![]() |
eXeL@B —› Вопросы новичков —› Пишу Loader, появились вопросы. |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 28 ноября 2006 15:28 · Личное сообщение · #1 |
|
Создано: 28 ноября 2006 22:21 · Личное сообщение · #2 sliderZ пишет: Может ли такое быть что бы на другом компе VA адресс в процессе по которому я вношу изменения будет другим? Если это динамически выделяемая память или длл-ка, то да. Если это часть образа самой проги, то всё нормально. sliderZ пишет: Что делать если память процесса куда надо внести изменения запротекчена? В смысле нет прав на запись? - VirtualProtectEx тебе тогда поможет. ![]() |
|
Создано: 28 ноября 2006 22:40 · Поправил: PE_Kill · Личное сообщение · #3 |
|
Создано: 28 ноября 2006 23:04 · Личное сообщение · #4 |
|
Создано: 29 ноября 2006 00:25 · Личное сообщение · #5 asd пишет: или длл-ка Всмысле длл-ка? Если вношу изменения в образ какой-то длл-ки проги, то адрес может не совпасть? Вот еще такой вопросец появился, если создавать процесс с CREATE_SUSPENDED, то это тоже самое что создать процесс без этого флага а потом сразу SuspendThread(...) ? Еще вопрос: в проге нужно поменять не просто несколько байт, а переписать несколько процедур, места в самих секциях проги нету, т.е нужно как-то создать еще одну свою "секцию" в памяти и туда загнать процедуры. Как это сделать? ![]() |
|
Создано: 29 ноября 2006 00:33 · Личное сообщение · #6 |
|
Создано: 29 ноября 2006 01:09 · Личное сообщение · #7
Это разные вещи. Когда ты создаешь процесс с флагом CREATE_SUSPENDED, его основной поток приостановлен и к этому моменту не выполнил ни одной команды. Во втором случае поток может успеть выполнить часть кода, до того как ты вызовешь SuspendThread(...) ![]() |
|
Создано: 29 ноября 2006 10:34 · Личное сообщение · #8 Еще такой вопрос меня мучает: Если дать VirtualAllocEx выделить на свое усмотрение где-то динамическую память (т.е ставить NULL в lpAddress) и туда переписывать процедуры, то потом возникнет полная джоппа со всеми джампами, т.к они все относительные... А если выделить память там где надо, то на другом компе эта область памяти может уже быть занята чем-нибудь? Что делать? ![]() |
|
Создано: 29 ноября 2006 10:39 · Личное сообщение · #9 |
|
Создано: 29 ноября 2006 11:08 · Личное сообщение · #10 Я имею ввиду у меня например из переписаной процедуры идет jmp обратно в секцию кода проги/dll-ки, джамп-то вроде всегда относительный типа E9 XX XX XX XX, где XX - разница между тем где мы находимся и куды прыгаем - 5 байтов и если выделять облясть памяти через virtualallocex передавая NULL в качестве параметра, то система я так понимаю сама выделяет где хочет и на другом компе она значит может выделить в другом месте и все прыги запортятся, а если выделить память где-то конкретно указав адресс ( хотя у меня это пока почему-то не получается), то на другом компе эта память уже может быть занята? ![]() |
|
Создано: 29 ноября 2006 12:16 · Личное сообщение · #11 Можно переносить длл целиком, тогда надо пересчитать тоьлко абсолютные адреса.(это проще и возможности больше) Если ты хочешь инжектить какой-то участок кода, то он должен быть изначально базонезависимым, а просто переписать процедуру в другой процесс не получится. На wasm.ru много статей на эту тему ![]() |
|
Создано: 29 ноября 2006 12:34 · Личное сообщение · #12 Не понял, причем тут другой процесс. Есть прога, например calc.exe. Мы лоадером резервируем через virtualallocex область памяти в этом процессе calc.exe (если я правильно эту api понял). Потом где-то в секции кода calc.exe мы делаем JMP в нашу выделенную virtualalloc'ом область памяти, делаем там что надо и прыгаем обратно. Это невозможно? ![]() |
|
Создано: 29 ноября 2006 12:42 · Личное сообщение · #13 |
|
Создано: 29 ноября 2006 20:33 · Личное сообщение · #14 |
|
Создано: 29 ноября 2006 20:36 · Личное сообщение · #15 sliderZ Потом где-то в секции кода calc.exe мы делаем JMP в нашу выделенную virtualalloc'ом область памяти, делаем там что надо и прыгаем обратно. так осуществляется перехват апи функции например. Для выполнения кода в целевом процессе, достаточно CreateRemoteThread или изменить контекст у имеющегося потока. ![]() |
|
Создано: 01 декабря 2006 08:12 · Личное сообщение · #16 |
|
Создано: 01 декабря 2006 08:38 · Личное сообщение · #17 |
|
Создано: 01 декабря 2006 09:12 · Личное сообщение · #18 |
|
Создано: 03 декабря 2006 03:02 · Личное сообщение · #19 |
|
Создано: 21 декабря 2006 02:54 · Личное сообщение · #20 |
|
Создано: 22 декабря 2006 02:57 · Личное сообщение · #21 Уточню вопрос. Ксть комп с WinXP64, на нем мой лоадер не работает. Адреса главного модуля (exe) совпадают, а вот адреса DLL'ок проги не совпадают (это Dll'ки, которые подгружаются с самого начала, еще до того как olly прервется на EP, не знаю как эти "стартовые" DLL'ки называются). В чем может быть дело? ![]() |
|
Создано: 22 декабря 2006 03:08 · Личное сообщение · #22 |
|
Создано: 22 декабря 2006 03:22 · Личное сообщение · #23 |
|
Создано: 22 декабря 2006 05:37 · Личное сообщение · #24 |
|
Создано: 22 декабря 2006 07:36 · Личное сообщение · #25 HoBleen пишет: Бугага, разные версии виндовса проецируют системные библиотеки по разным адресам. Если приглядишься, заметишь, что и размер у них может сильно отличаться. Зачем жестко задавать адреса библиотек? Не легче находить их по GetModuleHandle? Через getmodulehandle сейчас переделываю. Насчет системных Dll понятно, но разве Dll'ки самой проги, лежащие в папке проги относятся к системным? ![]() |
|
Создано: 22 декабря 2006 07:52 · Личное сообщение · #26 |
|
Создано: 22 декабря 2006 08:01 · Личное сообщение · #27 |
|
Создано: 22 декабря 2006 12:53 · Личное сообщение · #28 Hellspawn пишет: но это относиться ко всем длл HoBleen пишет: Ты сам наверное не понял что спросил. Библиотеки kernel32, ntdll - системные, и грузятся всегда, лежат в папке system32. Что-то я совсем запутался. Берем PeTools. В папке лежат NDump.dll, RebPE32.dll .... Являются ли эти Dll'ки системными? Если нет, то почему в других версиях винды они (не только kernel и иже) грузятся по другим адресам? Системные "портят" смещения обычным? ![]() |
|
Создано: 22 декабря 2006 13:13 · Поправил: Hellspawn · Личное сообщение · #29 sliderZ пишет: Являются ли эти Dll'ки системными? нед! sliderZ пишет: грузятся по другим адресам? ImageBase – адрес, по которому будет загружен файл в памяти. Если это DLL, то ImageBase может не совпадать с тем адресом, по которому возможно будет загружена эта DLL. Это связано с тем, что по указанному значению ImageBase, уже может, располагается одна из необходимых процессу DLL, тогда это вызовет реалокацию и DLL будет загружена по другому свободному адресу. Поэтому для вычисления, из RVA-адреса, конечный адрес, необходимо получать базовый адрес загрузки DLL, используя функцию GetModuleHandle. sliderZ пишет: Системные "портят" смещения обычным? ну если примитивно то да, точнее занимают "нужный" адрес ----- [nice coder and reverser] ![]() |
|
Создано: 22 декабря 2006 19:21 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Пишу Loader, появились вопросы. |