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

 eXeL@B —› Вопросы новичков —› Добавление кода в прогу=/
Посл.ответ Сообщение

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

Создано: 06 октября 2007 22:16
· Личное сообщение · #1

как можно добавить код в программу с помощью OllyDebugger'а?

например, есть такой код:

PUSH 0
CALL GetModuleHandleA
MOV DWORD PTR [00411030],EAX
JMP XXXXXXXX............ и т.д.

как добавить вызов MsgBox'а например?

чтоб было

PUSH 0
PUSH 0
PUSH 00413010
PUSH 0
CALL MessageBoxA
PUSH 0
CALL GetModuleHandleA
MOV DWORD PTR [00411030],EAX

в смысле вставить код в начало...

когда я нажимаю пробем и ввожу новый код, то старый просто заменяется...
нету проблем, когда программа начинается NOP'ами и можно просто их заменять на новый код, но это ведь будет раз из ста раз.


я, конечно, могу в текстовом редакторе в начало вставить пару символов, потом их заменить на новый код, но ведь так неудобно! еще если в начало проги вставлять то можно, но если в середину...

подскажите, пожалуйста, есть ли в отладчике функция добавления кода?



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 06 октября 2007 22:43
· Личное сообщение · #2

нет.
просто найди свободный участок и впихни в него код, а где надо поставь call/jmp




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 06 октября 2007 22:43 · Поправил: tnt17
· Личное сообщение · #3

ну а почему тебе не сделать таким образом:
ищешь свободное место в секции кода, либо затираешь не нужный код( иногда процедуру регистрации можно с легкостью затереть) ,ну и оформляешь патч вида:
EP:
jmp add_of_icode ; те n байт целого количества инструкций, что были в оригинальной проге, мы сохраняем(old_bytes)
;дальше идут оригинальные инструкции программы

...
add_of_icode:
PUSH 0
PUSH 0
PUSH 00413010
PUSH 0
CALL MessageBoxA
PUSH 0
CALL GetModuleHandleA
MOV DWORD PTR [00411030],EAX
old_bytes; наши старый байти инструкций, что были сохранены
jmp EP+n ; где n >=5 байт инструкций.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 06 октября 2007 22:47 · Поправил: Sturgeon
· Личное сообщение · #4

Опередили, блин.
А я то расписывал



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

Создано: 06 октября 2007 22:56
· Личное сообщение · #5

спасибки, понял=)



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

Создано: 06 октября 2007 22:57
· Личное сообщение · #6

ну а если бы свободного места совсем не было?



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 06 октября 2007 22:59
· Личное сообщение · #7

Necromancer13 пишет:
ну а если бы свободного места совсем не было?

В каком нибудь РЕ-редакторе создаешь новую секцию. Заполняешь ее нолями и прыгаешь туда



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

Создано: 06 октября 2007 23:02
· Личное сообщение · #8

а... ясно=) спасибо




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 06 октября 2007 23:06 · Поправил: tnt17
· Личное сообщение · #9

Necromancer13
если для ольки, то после запуска приложения затираешь PE хидер, и на его место пишешь код патча. Там, впринципе 1000h байт свободно.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 06 октября 2007 23:11
· Личное сообщение · #10

ок)

можно еще вопрос? Оффтоп, но просто не хочется создавать новую тему для него :

бывает ли PE EXE-файл размером меньше, чем 1 КБ, или размер всегда округляется?




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 06 октября 2007 23:44 · Поправил: tnt17
· Личное сообщение · #11

Necromancer13
А вот тут нужно уточнять, тебе нужно в памяти или на диске. В памяти он обычно не привышает 4кб, так как выравнивание идет по размеру страницы обычно равно тому, что прописано в SectionAlignment
//
Размеp выpавнивания секций в памяти. Hапpимеp, если значение в этом поле pавно 4096 (1000h), каждая секция должна начинаться по адpесу, кpатном этому значению. Если пеpвая секция находится в 401000h и его адpес pавен 10 байтам, следующая секция должна начинаться в 402000h, даже если адpесное пpостpанство между ними останется неиспользованным.
//
а если на диске, то см FileAlignment и SizeOfHeaders

//FileAlignment Размеp выpавнивания секций в файле. Hапpимеp, если значение в этом поле pавно 512 (200h), каждая секция должна начинаться на pасстоянии от начала файла кpатном 512 байтам. Если пеpвая секция в файле находится по смещению 200h и ее pазмеp 10 байт, следующая секцию должна быть pасположена со смещением 400h: пpостpанство между смещениями 522 и 1024 будет неиспользованно/неопpеделенно.
//
//SizeOfHeaders Размеp всех заголовков + таблицы секций. То есть это значение pавно pазмеpу файла минус комбиниpованный pазмеp всех секций в файле. Вы можете также использовать это значение в качестве файлового смещения пеpвой секции в PE-файле.
//
смотри доку: http://wasm.ru/series.php?sid=4 http://wasm.ru/series.php?sid=4

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 07 октября 2007 01:26
· Личное сообщение · #12

Ок, спасибо=)



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 08 октября 2007 12:29
· Личное сообщение · #13

Necromancer13 пишет:
бывает ли PE EXE-файл размером меньше, чем 1 КБ, или размер всегда округляется?

www.wasm.ru/forum/viewtopic.php?id=22802



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

Создано: 08 октября 2007 15:11
· Личное сообщение · #14

спасибо, сейчас посмотрю ссылку...


и вопрос, связанный уже с самой темой=)
а если в программе нету места, чтоб вставить свой call на добавленные команды?




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 08 октября 2007 15:15
· Личное сообщение · #15

Necromancer13 пишет:
а если в программе нету места, чтоб вставить свой call на добавленные команды?

разве эта программа состоит из 4 байт и менее?

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 08 октября 2007 16:22
· Личное сообщение · #16

да нет... но ведь если я добавлю свой call, то он ведь затрет те команды, что были там до него....




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 08 октября 2007 16:34 · Поправил: tnt17
· Личное сообщение · #17

Necromancer13
Так сохрани их, на их место запиши переход на код патча, и выполни после твоего кода патча,после чего передавай управление на код программы. смотри мой самый первый пост в этом топике.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




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

Создано: 08 октября 2007 18:27
· Личное сообщение · #18

ааа..... уже понятнее=) пасибки


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


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