Size: a a a

Ассемблер

2020 September 20

ST

Saenro T in Ассемблер
Просто сравни участки памяти RSI, RDI перед _call
источник

ST

Saenro T in Ассемблер
__gg
Его нет в памяти. Программа при запуске начинает считывать файл и доставать из него пароль.
Есть. Уже есть.
источник

_

__gg in Ассемблер
Каким образом он должен там появиться? Насколько я знаю, оптимизатор не обладает таким функционалом, чтобы заранее из файлов доставать какую-либо информацию.
К тому же, если ты утверждаешь, что он уже есть в памяти, то тогда оптимизатору незачем было вызывать отдельные функции _fscanf, fopen и прочее, так как в этом не было бы нужды - достаточно было бы просто подставить то константное значение, которое он заранее достал из файла при компиляции программы.
источник

_

__gg in Ассемблер
Я же не дебажу этот выходной файл, а патчу его.
источник

ST

Saenro T in Ассемблер
У тебя идёт закрытие файла. Потом сравнение.
Отсюда: файл был считан, из него что-то оставили в памяти. Теперь две "строки" в памяти сравниваются. А после этого ты ломаешь код.
источник

_

__gg in Ассемблер
Моя задача по лабе состоит как раз в том, чтобы просто пропатчить выходной файл так, чтобы он съедал все пароли.
источник

ST

Saenro T in Ассемблер
Так ты знаешь какой там пароль? Он не скрыт?
источник

_

__gg in Ассемблер
Вот полноценный стек инструкций.
источник

_

__gg in Ассемблер
Saenro T
Так ты знаешь какой там пароль? Он не скрыт?
Да, он пока не скрыт.
источник

ST

Saenro T in Ассемблер
Тогда не интересно)
источник

_

__gg in Ассемблер
В дальнейшем по лабе мне нужно будет шифровать этот пароль, ну и прочими действиями заниматься.
источник

_

__gg in Ассемблер
А пока мне лишь нужно инструкцию повернуть так, чтобы она все пароли ела
источник

ST

Saenro T in Ассемблер
Либо меняй eax перед jnz, либо сам jnz выбрось.
источник

_

__gg in Ассемблер
__gg
Вот полноценный стек инструкций.
Мне по факту нужно заменить строчку "jnz short loc_100003E70" на "jmp short loc_100003E62", где short loc_100003E70 - адрес левого блока. Но IDA тупо не дает поменять, кидая ошибку "Invalid operand".
источник

ST

Saenro T in Ассемблер
Тебе наверное нужно выйти из ida, загрузить жертву в hex-редактор, там пропатчить и сохранить.
источник

ST

Saenro T in Ассемблер
Я просто не в курсе, может ли ida патчить код, с которым работает.
источник

_

__gg in Ассемблер
Saenro T
Я просто не в курсе, может ли ida патчить код, с которым работает.
Может. Например, я могу заменить саму инструкцию "jnz" на "jmp". Но сам адрес вместе с инструкцией изменить не могу.
источник

ST

Saenro T in Ассемблер
А почему на jmp? Эта же ветка приведёт к обработке при неправильном пароле.
источник

ST

Saenro T in Ассемблер
Тебе не нужно идти на 3e70
источник

_

__gg in Ассемблер
Saenro T
А почему на jmp? Эта же ветка приведёт к обработке при неправильном пароле.
Я хотел заменить на jmp c изменением адреса перехода на левую ветвь. Но IDA не позволяет мне это сделать.
источник