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

 eXeL@B —› Вопросы новичков —› Пишу Loader, появились вопросы.
. 1 . 2 . >>
Посл.ответ Сообщение

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

Создано: 28 ноября 2006 15:28
· Личное сообщение · #1

Пишу первый раз лоадер поэтому вопросы такие:

1. Может ли такое быть что бы на другом компе VA адресс в процессе по которому я вношу изменения будет другим?

2. Что делать если память процесса куда надо внести изменения запротекчена?



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

Создано: 28 ноября 2006 22:21
· Личное сообщение · #2

sliderZ пишет:
Может ли такое быть что бы на другом компе VA адресс в процессе по которому я вношу изменения будет другим?

Если это динамически выделяемая память или длл-ка, то да. Если это часть образа самой проги, то всё нормально.

sliderZ пишет:
Что делать если память процесса куда надо внести изменения запротекчена?

В смысле нет прав на запись? - VirtualProtectEx тебе тогда поможет.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 28 ноября 2006 22:40 · Поправил: PE_Kill
· Личное сообщение · #3

1) Если динамически выделяемая память, то да.
2) VirtualProtectEx
ыы, asd опередил

-----
Yann Tiersen best and do not fuck




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

Создано: 28 ноября 2006 23:04
· Личное сообщение · #4

Это плагиат, я буду жаловаться



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

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

asd пишет:
или длл-ка

Всмысле длл-ка? Если вношу изменения в образ какой-то длл-ки проги, то адрес может не совпасть?

Вот еще такой вопросец появился, если создавать процесс с CREATE_SUSPENDED, то это тоже самое что создать процесс без этого флага а потом сразу SuspendThread(...) ?

Еще вопрос: в проге нужно поменять не просто несколько байт, а переписать несколько процедур, места в самих секциях проги нету, т.е нужно как-то создать еще одну свою "секцию" в памяти и туда загнать процедуры. Как это сделать?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

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

VirtualAllocEx, WriteProcessMemory.

-----
Yann Tiersen best and do not fuck




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

Создано: 29 ноября 2006 01:09
· Личное сообщение · #7


Вот еще такой вопросец появился, если создавать процесс с CREATE_SUSPENDED, то это тоже самое что создать процесс без этого флага а потом сразу SuspendThread(...) ?

Это разные вещи. Когда ты создаешь процесс с флагом CREATE_SUSPENDED, его основной поток приостановлен и к этому моменту не выполнил ни одной команды.
Во втором случае поток может успеть выполнить часть кода, до того как ты вызовешь SuspendThread(...)



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

Создано: 29 ноября 2006 10:34
· Личное сообщение · #8

Еще такой вопрос меня мучает:
Если дать VirtualAllocEx выделить на свое усмотрение где-то динамическую память (т.е ставить NULL в lpAddress) и туда переписывать процедуры, то потом возникнет полная джоппа со всеми джампами, т.к они все относительные...
А если выделить память там где надо, то на другом компе эта область памяти может уже быть занята чем-нибудь?
Что делать?



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

Создано: 29 ноября 2006 10:39
· Личное сообщение · #9

Все относительные джампы как раз-то будут выполнятся, т.к. они относительные, а вот жестко вбитые адреса надо будет пересчитать(хранятся они в релоке).

Поэтому выделяй память где получится и под нее пересчитывай все адеса.



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

Создано: 29 ноября 2006 11:08
· Личное сообщение · #10

Я имею ввиду у меня например из переписаной процедуры идет jmp обратно в секцию кода проги/dll-ки, джамп-то вроде всегда относительный типа E9 XX XX XX XX, где XX - разница между тем где мы находимся и куды прыгаем - 5 байтов и если выделять облясть памяти через virtualallocex передавая NULL в качестве параметра, то система я так понимаю сама выделяет где хочет и на другом компе она значит может выделить в другом месте и все прыги запортятся, а если выделить память где-то конкретно указав адресс ( хотя у меня это пока почему-то не получается), то на другом компе эта память уже может быть занята?



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

Создано: 29 ноября 2006 12:16
· Личное сообщение · #11

Можно переносить длл целиком, тогда надо пересчитать тоьлко абсолютные адреса.(это проще и возможности больше)

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

На wasm.ru много статей на эту тему



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

Создано: 29 ноября 2006 12:34
· Личное сообщение · #12

Не понял, причем тут другой процесс.


Есть прога, например calc.exe. Мы лоадером резервируем через virtualallocex область памяти в этом процессе calc.exe (если я правильно эту api понял). Потом где-то в секции кода calc.exe мы делаем JMP в нашу выделенную virtualalloc'ом область памяти, делаем там что надо и прыгаем обратно.
Это невозможно?



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

Создано: 29 ноября 2006 12:42
· Личное сообщение · #13

sliderZ
Учи матчасть, читай статьи. jmp-ы бывают не только относительные, но иабсолютные. И связку push/ret ещё никто не отменял.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 29 ноября 2006 20:33
· Личное сообщение · #14

E9 {mem_base-eip-5}

push {mem_base}
retn

mov exx,{mem_base}
jmp exx

Все вопросы, что ты задаешь есть или в MSDN или в статьях, прекращай заниматься фигней и начинай, как посоветовал asd, учить матчасть...

-----
Yann Tiersen best and do not fuck




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

Создано: 29 ноября 2006 20:36
· Личное сообщение · #15

sliderZ
Потом где-то в секции кода calc.exe мы делаем JMP в нашу выделенную virtualalloc'ом область памяти, делаем там что надо и прыгаем обратно.

так осуществляется перехват апи функции например.
Для выполнения кода в целевом процессе, достаточно CreateRemoteThread или изменить контекст у имеющегося потока.



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

Создано: 01 декабря 2006 08:12
· Личное сообщение · #16

Последний вопрос, какой api id другого процесса узнать?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 01 декабря 2006 08:38
· Личное сообщение · #17

хм, а зачем тебе ид другого? ты же лоадер пишешь...
сосзаешь процесс, а потом "мучаешь" его а т.к. ты его создал, так
и все карты тебе в руки...

-----
[nice coder and reverser]




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

Создано: 01 декабря 2006 09:12
· Личное сообщение · #18

sliderZ
ToolHelp функции




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 03 декабря 2006 03:02
· Личное сообщение · #19

sliderZ пишет:
Последний вопрос, какой api id другого процесса узнать?

Если создаешь процесс с помощью функции CreateProcess, то в параметре lpProcessInformation передается инфа о созданном процессе, в том числе и его PID и открытый Handle.



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

Создано: 21 декабря 2006 02:54
· Личное сообщение · #20

Еще один вопрос
Есть ли какая либо специфика с работой loader'ов в 64-битных виндах. Могут ли из-за этого адреса не совпасть?



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

Создано: 22 декабря 2006 02:57
· Личное сообщение · #21

Уточню вопрос. Ксть комп с WinXP64, на нем мой лоадер не работает. Адреса главного модуля (exe) совпадают, а вот адреса DLL'ок проги не совпадают (это Dll'ки, которые подгружаются с самого начала, еще до того как olly прервется на EP, не знаю как эти "стартовые" DLL'ки называются). В чем может быть дело?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

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

Бу го го, DLL - динамик линк либрари. Название само за себя говорит. ToolHelp функции тебе в помощь.

-----
Yann Tiersen best and do not fuck





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 22 декабря 2006 03:22
· Личное сообщение · #23

sliderZ пишет:
"стартовые" DLL'ки

Бугага, разные версии виндовса проецируют системные библиотеки по разным адресам. Если приглядишься, заметишь, что и размер у них может сильно отличаться.

Зачем жестко задавать адреса библиотек? Не легче находить их по GetModuleHandle?



Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 22 декабря 2006 05:37
· Личное сообщение · #24

Вот тут какой-то - мож в помощь
www.smidgeonsoft.prohosting.com/download/Win2KLoader.zip



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

Создано: 22 декабря 2006 07:36
· Личное сообщение · #25

HoBleen пишет:
Бугага, разные версии виндовса проецируют системные библиотеки по разным адресам. Если приглядишься, заметишь, что и размер у них может сильно отличаться.

Зачем жестко задавать адреса библиотек? Не легче находить их по GetModuleHandle?


Через getmodulehandle сейчас переделываю.
Насчет системных Dll понятно, но разве Dll'ки самой проги, лежащие в папке проги относятся к системным?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 22 декабря 2006 07:52
· Личное сообщение · #26

sliderZ пишет:
лежащие в папке проги относятся к системным?


какая разница сист. длл или нет? те бе же сказали, что

HoBleen пишет:
разные версии виндовса проецируют системные библиотеки по разным адресам


но это относиться ко всем длл

-----
[nice coder and reverser]





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 22 декабря 2006 08:01
· Личное сообщение · #27

Hellspawn пишет:
но это относиться ко всем длл

Просто sliderZ спросил про системные...

sliderZ пишет:
но разве Dll'ки самой проги, лежащие в папке проги относятся к системным?


Ты сам наверное не понял что спросил. Библиотеки kernel32, ntdll - системные, и грузятся всегда, лежат в папке system32.



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

Создано: 22 декабря 2006 12:53
· Личное сообщение · #28

Hellspawn пишет:
но это относиться ко всем длл


HoBleen пишет:
Ты сам наверное не понял что спросил. Библиотеки kernel32, ntdll - системные, и грузятся всегда, лежат в папке system32.


Что-то я совсем запутался. Берем PeTools. В папке лежат NDump.dll, RebPE32.dll .... Являются ли эти Dll'ки системными? Если нет, то почему в других версиях винды они (не только kernel и иже) грузятся по другим адресам? Системные "портят" смещения обычным?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 22 декабря 2006 13:13 · Поправил: Hellspawn
· Личное сообщение · #29

sliderZ пишет:
Являются ли эти Dll'ки системными?


нед!

sliderZ пишет:
грузятся по другим адресам?


ImageBase – адрес, по которому будет загружен файл в памяти. Если это DLL, то ImageBase может не совпадать с тем адресом, по которому возможно будет загружена эта DLL. Это связано с тем, что по указанному значению ImageBase, уже может, располагается одна из необходимых процессу DLL, тогда это вызовет реалокацию и DLL будет загружена по другому свободному адресу. Поэтому для вычисления, из RVA-адреса, конечный адрес, необходимо получать базовый адрес загрузки DLL, используя функцию GetModuleHandle.

sliderZ пишет:
Системные "портят" смещения обычным?


ну если примитивно то да, точнее занимают "нужный" адрес

-----
[nice coder and reverser]





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 22 декабря 2006 19:21
· Личное сообщение · #30

PE_Kill пишет:
DLL - динамик линк либрари. Название само за себя говорит

И какая разница системная она или нет? Динамик значит динамик. Может ты наконец почитаешь какую нибудь инфу?

-----
Yann Tiersen best and do not fuck



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


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