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

 eXeL@B —› Вопросы новичков —› мой Патчик ))
Посл.ответ Сообщение

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

Создано: 17 декабря 2007 11:06 · Поправил: UR-Shark
· Личное сообщение · #1

Собственно хотел пропатчить одну програмку, на помощь пришел с++. Потом решил более поковыряться на эту тему, раз уж взялся...
Задача не заключается перехватывании именно этой АПИ что у меня в исходниках. Я использую эту АПИ в качестве примера, ведь здесь достаточно было бы изменить пару байт... Это так сказать в образовательных целях

Хотелось задать несколько вопросов по коду:

1) Есть автоматические способы поиска или добавления свободного места куда я могу добавить свой код и исполнить его?

2) Я использую LoadLibrary для загрузки файла в память для последующего получения AddressOfEntryPoint и ImageBase, в принцепе это очень просто и работает, но ведь есть и другие способы?

3) Постоянно перещитытывать смещения при добавлении\измениении кода влом, есть что-нить более продвинутое?

4) Рад буду любым советам по оптимизации кода.

5) Подкиньте доков в тему. Конкретно меня ещё интересуют опкоды.

Заранее спасибо за помощь.

Собственно сами исходники + откомпиленые версии на всяк случай (35,5 KB)
хотя всё прекрасно компилиться в VC6 и VS2005

8258_17.12.2007_CRACKLAB.rU.tgz - MyPatch.zip



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

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

Кстати дайте что-нить про опкоды почитать, а то компилить а потом олькой лезти их выдирать это извращение




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

Создано: 17 декабря 2007 20:16
· Личное сообщение · #3

UR-Shark пишет:
1) Есть автоматические способы поиска или добавления свободного места куда я могу добавить свой код и исполнить его?

Секции подвигать? Кода туча в нете - всё сводится к разбору PE структур и fread()+fwrite()

UR-Shark пишет:
2) Я использую LoadLibrary для загрузки файла в память для последующего получения AddressOfEntryPoint и ImageBase, в принцепе это очень просто и работает, но ведь есть и другие способы?

Смотри выше - .exe это PE file.

UR-Shark пишет:
Кстати дайте что-нить про опкоды почитать, а то компилить а потом олькой лезти их выдирать это извращение

тебе disasm движок нужен?



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

Создано: 18 декабря 2007 07:30
· Личное сообщение · #4

UR-Shark пишет:
Кстати дайте что-нить про опкоды почитать, а то компилить а потом олькой лезти их выдирать это извращение

В таком ракурсе проще пользоваться Олей или Hiew'ом (они умеют транслировать команды асма в маш. коды), но лучше всё-таки FASM =).
UR-Shark пишет:
Постоянно перещитытывать смещения при добавлении\измениении кода влом, есть что-нить более продвинутое?

Не очень понятно, какие именно смещения ты пересчитываешь, но если, например, хочешь получить метки, имена и всё такое, то FASM лучшее решение.

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




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

Создано: 18 декабря 2007 09:37
· Личное сообщение · #5

Да, я фасм и юзал при написании. Очень хорошо помогает, компилишь потом открываешь олей и вытаскиваешь всё. Я имел ввиду тапа табличку или ещё лучше прогу, где ей сказал: PUSH EAX ана тебе 0x50 выдала! Хотелось бы как-нить по быстрее опкоды получать, может есть такое чудо??

Я имел ввиду вот что:
kernel32_WriteProcessMemory это 0x0000220F + 0x7C800000 = 0x7С80220F пощиталось.
дальше если записать это как 0xE8, 0x0F, 0x22, 0x80, 0x7C то получим совсем не то что хотелось, как оказалось нужно ещё отнять EIP. Вот и тут понадобилось допустим вставить пару байт посередке, теперь нужно будет отнимать другой EIP для кода, который ниже... Это всё вычислимо, но делать это заново ужос как не нравится.
Можно также вызывать функцию через указатель, тогда отнимать EIP не приходиться, зато теперь нужно выделять место для указателя и вызывать так: 0xFF, 0x15, 0x??, 0x??, 0x??, 0x?? - здесь ?? это адрес где записано 0x0F, 0x22, 0x80, 0x7C

кстати попробовал использовать 0xE9, 0x??, 0x??, 0x??, 0x?? вместо 0x68, 0x??, 0x??, 0x??, 0x??, 0xC3
касперскому это жутко не понравилось..




Ранг: 154.2 (ветеран), 66thx
Активность: 0.080
Статус: Участник
REVENGE Crew

Создано: 18 декабря 2007 10:59
· Личное сообщение · #6

UR-Shark,

хороший справочник по опкодам: x86 Instruction Reference http://ref.x86asm.net/ .


Постскриптум

По голове надо давать за такие названия тем...



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

Создано: 18 декабря 2007 11:14 · Поправил: UR-Shark
· Личное сообщение · #7

всем сспасибо

По голове надо давать за такие названия тем...
сорри, исправлюсь...



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

Создано: 18 декабря 2007 13:55
· Личное сообщение · #8

UR-Shark, я имел в виду грамотно использовать FASM для написания всего твоего кода.
Попробуй, не пожалеешь ;)
Фактически именно для таких задач и нужен FASM (не считая OS'иписательстав).
В крайнем случае можешь инклудить бинарные куски скомпилённые Фасмом.

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





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

Создано: 18 декабря 2007 21:24
· Личное сообщение · #9

UR-Shark пишет:
Да, я фасм и юзал при написании. Очень хорошо помогает, компилишь потом открываешь олей и вытаскиваешь всё. Я имел ввиду тапа табличку или ещё лучше прогу, где ей сказал: PUSH EAX ана тебе 0x50 выдала! Хотелось бы как-нить по быстрее опкоды получать, может есть такое чудо??

эээ, товарищ, в hiew есть асемблер - в decode рещиме Edit/F3, потом F2/Asm и пиши себе инструкции.



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

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

Спасибо за советы! Буду страраться!


 eXeL@B —› Вопросы новичков —› мой Патчик ))
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати