Сейчас на форуме: YDS, _MBK_, user99 (+9 невидимых)

 eXeL@B —› Основной форум —› Замена push register на push value в бинарном файле
Посл.ответ Сообщение

Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 января 2006 00:16
· Личное сообщение · #1

Приветвтвую,

есть небольшой вопросик.

Например, замена jz на jnz и наоборот не представляет никакого труда в hex-редакторе. Но вот я только что нашел место в программе, где мне нужно изменить значения, которые заталкиваются в стэк, а именно, код выглядит примерно так:

push edx
push eax
call function_address

В регистрах edx и eax лежат значения которые мне нужно поменять. В SoftICE "на лету" я знаю как это сделать, но - как мне нужно изменить бинарный файл, чтобы вместо имен регистров были конкретные числа? В дисассемблированном виде, например, комманда push edx записана просто как "52". Я на самом деле еще только учусь, так что не судите строго. Мне нужно, скажем, чтобы было push 640 - как это можно сделать? Вариант один в голову приходит - где-нибудь до этого сделать безусловный jmp на мною добавленный кусок кода, где в регистры edx и eax будут записываться те значения, которые мне нужны, ну а потом вернутся оттуда откуда пришел... но боюсь и этого я не совсем знаю как сделать (идеи есть конечно). Думаю может есть полегче способ?

Буду очень признателен за помошь.




Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 05 января 2006 00:24
· Личное сообщение · #2

Xatrix пишет:
В регистрах edx и eax лежат значения которые мне нужно поменять. В SoftICE "на лету" я знаю как это сделать, но - как мне нужно изменить бинарный файл, чтобы вместо имен регистров были конкретные числа? В дисассемблированном виде, например, комманда push edx записана просто как "52". Я на самом деле еще только учусь, так что не судите строго. Мне нужно, скажем, чтобы было push 640 - как это можно сделать? Вариант один в голову приходит - где-нибудь до этого сделать безусловный jmp на мною добавленный кусок кода, где в регистры edx и eax будут записываться те значения, которые мне нужны, ну а потом вернутся оттуда откуда пришел... но боюсь и этого я не совсем знаю как сделать (идеи есть конечно). Думаю может есть полегче способ?

Полегче спобсоба нет, так как один байт на 2 заменить нельзя

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!




Ранг: 53.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 05 января 2006 00:29
· Личное сообщение · #3

Xatrix пишет:
ариант один в голову приходит - где-нибудь до этого сделать безусловный jmp на мною добавленный кусок кода, где в регистры edx и eax будут записываться те значения, которые мне нужны, ну а потом вернутся оттуда откуда пришел

в общем случае это по-моему единственный метод. но вообще ведь где-то есть код, который модифицирует eax и edx, так попробуй туда вместить код, который и будет менять значения на нужные.



Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 января 2006 00:41 · Поправил: Xatrix
· Личное сообщение · #4

ну есть такие строки:

8B1588CF5500 mov edx, dword ptr [0055CF88]
A16CCF5500 mov eax, dword ptr [0055CF6C]

Но тут опять непонятно, если из первой и второй строки убрать адрес, то получится (машинный код в hex) :

8B15
A1

Что мне это дает? Что такое, например, A1? Неужели A1 == mov eax? Короче, я не совсем понимаю, как в одном байте может содержаться и инструкция, и имя регистра...

Можно поподробней?



Ранг: 79.6 (постоянный), 2thx
Активность: 0.080
Статус: Участник
алХимик

Создано: 05 января 2006 00:44 · Поправил: SeDoYHg
· Личное сообщение · #5

Если вообще интересует принцип кодирования/декодирвоания инструкций, то прямая дорога к свинским обучалкам обущающие программы http://wasm.ru/toollist.php?list=22 . Еще посты его поищи в архиве форума васма.

А в твоем случае как тебе и сказали, так как всунув двухбайтовую 68 imm16/imm32 вместо однобайтовой 50+rd, порушишь всю программу.

-----
Все говорят что мы вместе. Но не многие знают в каком.




Ранг: 389.6 (мудрец)
Активность: 0.150
Статус: Участник

Создано: 05 января 2006 00:59 · Поправил: Grey
· Личное сообщение · #6

mov edx,0640
mov eax,"что-то еще"

ты кинь хоть что на что править. фигли пальцем в небо тыкать?

-----
TBR




Ранг: 79.6 (постоянный), 2thx
Активность: 0.080
Статус: Участник
алХимик

Создано: 05 января 2006 00:59
· Личное сообщение · #7

Да вот еще, можно даже начать с этого, это возможно покажеться проще. Но всё про тоже кодирование интсрукций. Заклинание кода http://wasm.ru/publist.php?list=11

-----
Все говорят что мы вместе. Но не многие знают в каком.





Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 05 января 2006 01:12
· Личное сообщение · #8

Попробуй заменить в hiew
8B1588CF5500 mov edx, dword ptr [0055CF88]
на
BA4006000090 mov edx,00000640
nop
а дальше у тебя пройдёт push edx



Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 января 2006 01:14 · Поправил: Xatrix
· Личное сообщение · #9

пальцем в небо тыкать не надо. Не важно на что менять, хоть на 1000. Вопрос в том, как это записать в опкоде, вот например: mov edx, 640 - как это будет в opcode? (вотрое значение для eax - 480 если очень нужно).

SeDoYHg,
спасибо за ссылки. Я их обязательно посмотрю, просто сейчас ради такой простой вещи не охота перерывать столько статей. Если знаете, подскажите плиз.



Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 января 2006 01:19
· Личное сообщение · #10

Во спасибо, ToBad. Правда еще не попробовал. А как вдруг из 8B1588CF5500 получилось BA4006000090 ? Конкретно первый байт. Что как-то расчитывать надо? Зависит от того, что ложится в регистр? Извиняюсь за дурацкие вопросы...



Ранг: 79.6 (постоянный), 2thx
Активность: 0.080
Статус: Участник
алХимик

Создано: 05 января 2006 01:22
· Личное сообщение · #11

короче,

mov edx, 640 - BA 80 02 00 00

Как это сделать самому, пишешь свою инструкцию в FASM (его ассемблеру я доверяю =) нажимаешь компилировать и получаешь на выходе бинарник с нужными тебе опкодами. Есть вариант с другими иснтрументами (олли и тп.), но вот в грамотности их ассемблера я не уверен.

Вот код что нужно писать в FASM'e

use32
mov edx, 640


-----
Все говорят что мы вместе. Но не многие знают в каком.




Ранг: 79.6 (постоянный), 2thx
Активность: 0.080
Статус: Участник
алХимик

Создано: 05 января 2006 01:24
· Личное сообщение · #12

Xatrix пишет:
Что как-то расчитывать надо?

Тебе нужно знакомиться с форматом машинных инструкций, в пяти строках не объяснишь, читай материал, что я указал выше.

-----
Все говорят что мы вместе. Но не многие знают в каком.




Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 января 2006 01:28
· Личное сообщение · #13

Ясненько, спасибо!




Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 05 января 2006 01:30
· Личное сообщение · #14

Я делал просто. Сперва загнал в файл твою строчку, открыл в hiew в ASM режиме. Посмотрел соответствует ли это mov edx, dword ptr [0055CF88], далее на этой инструкции нажал tab и отредактировал вписав mov edx,640. После увидил появившийся лишний байтик (так как mov edx,640 занимает 5 байт) и вписал туда nop. Как это делает hiew - не знаю. Я тоже ради простых вещей не лезу в дебри. Знаешь в дизассемблировании даже IDA не всегда однозначно определяет какая именно это инструкция. Но если интересно покопать как это делается - лучше смотреть исходники. Статьи конечно полезно, но зачастую очень сложны для понимания.
Посмотри тут: ms-rem.dot-link.net/files/cadt.rar



Ранг: 34.1 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 05 января 2006 01:31
· Личное сообщение · #15

Прив. всем! Недавно решил заняться крэкингом. Но встала одна проблемка: ни как не могу найти опкоды команд (трудно в hex режиме код править). дайте плиз, линк на какой-нибудь тутор\faq по этой теме.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 05 января 2006 01:43
· Личное сообщение · #16

Xatrix пишет:
Если знаете, подскажите плиз.

Всё уже подсказано.
Система команд довольно сложная, в топике не расскажешь.
Однобайтовой инструкции для помещения в стек непосредственного операнда у Интела нет.
push reg заменить на что-то нужное тебе - не получится.
Xatrix пишет:
если очень нужно

Ну и чем тебе не подходит вариант с "mov edx,значение"?
Если нет места, то заменяешь команду (или несколько) на прыжок в свободное место, там их восстанавливаешь, меняешь регистр EDX как тебе надо и прыгаешь обратно.
Простых решений в пару бит здесь нет... Хотя всё зависит от конкретной ситуации.

-----
Всем привет, я вернулся





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 05 января 2006 01:52
· Личное сообщение · #17

Shad0vv
А топик ты пробовал читать? Выше SeDoYHg приводил --> Эту<-- http://wasm.ru/toollist.php?list=22 и --> Эту <-- http://wasm.ru/publist.php?list=11 ссылки. Там все найдешь, что ищешь по опкодам.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 79.6 (постоянный), 2thx
Активность: 0.080
Статус: Участник
алХимик

Создано: 05 января 2006 01:53
· Личное сообщение · #18

Shad0vv

Полнее чем мануалы интела FAQ (гы) не встретишь IA-32 Intel(R) Architecture Software Developer's Manuals http://www.intel.com/design/pentium4/manuals/index_new.htm
Если с трафом напряг можно поглядеть всякие огрызки типа этого Справочник по опкодам процессоров Intel Pentium 4 и AMD Athlon XP http://ms-rem.dot-link.net/stuff/intel_amd_quick_ref_v2_2.rar
таблица опкодов процессора Pentium MMX http://ms-rem.dot-link.net/stuff/pentium.rar

Туторы лучше чем те что я указал, на просторах рунета не встречал.


ToBad пишет:
Статьи конечно полезно, но зачастую очень сложны для понимания.

Че правда?

-----
Все говорят что мы вместе. Но не многие знают в каком.




Ранг: 8.3 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 января 2006 01:58
· Личное сообщение · #19

Shad0vv
Прив. всем! Недавно решил заняться крэкингом. Но встала одна проблемка: ни как не могу найти опкоды команд (трудно в hex режиме код править)

Вот знаете ребят почему вас скоро с форума погонят - за такие утверждения !

Первая-же ссылка в Yandex-се или Google направять вас на путь истинный ..

САМ ПРОВЕРЯЛ (ПЕРЕД ТЕМ КАК ТАКИЕ ВОТ ВОПРОСЫ ЗАДАВАТЬ) ! БУБЁНАТЬ !



Ранг: 34.1 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 05 января 2006 02:01
· Личное сообщение · #20

to_4kusNick
to_SeDoYHg
Спасибо! Нашел, что искал.



Ранг: 389.6 (мудрец)
Активность: 0.150
Статус: Участник

Создано: 05 января 2006 02:03 · Поправил: Grey
· Личное сообщение · #21

ToBad пишет:
Попробуй заменить в hiew

где-то я такое уже видел


Xatrix

MOV EDX,0640
MOV EAX,0480
NOP

BA 40 06 00 00 B8 80 04 00 00 90

-----
TBR




Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 января 2006 02:45
· Личное сообщение · #22

Спасибо, Grey, работает идеально


 eXeL@B —› Основной форум —› Замена push register на push value в бинарном файле
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати