> ааааа! @$тель этож относительный переход .. но я такой > тупой шо серавно не понимаю какм образом произойдет переход > с 0х77012320 на 0х00401220 > если поставить jmp 0х80801282? ведь при вычитании > получается отрицательное число! а разве jmp rel32 нету?
0х80801282 - это отрицательное число :)
(старший бит = 1)
просто не думай о знаке - оно так сделано, что само собой правильно получается
я наглючил
это наоборот в win32 нету rel16 - есть только rel32
(см. объяснение Heromantor'a)
Кто знает УРЛы на инфу по сабжу? ... смыльте плz! Перерыл кучу всякого дерьма в инете,.. нихрена стОящего не нашел! Так же интересует инфа по восстановлению функицй из ассмовского кода...
мыльздесь: neuron_viking@yahoo.com
thnx!
ЗЫ: отладка не катит!
[Win32] Перехват API !14.10.01 12:47 Автор: SerpentFly <Vadim Smirnov> Статус: Member
Посмотри во первых http://home.od.ua/~blackw/reversfaq.htm. От себя могу добавить, что решение сильно зависит от операционной системы и от API которые ты собрался перехватывать. Кстати, соответствующая глава есть в последнем издании Рихтера. В общем прежде чем кричать читай библию ;))
link13.10.01 22:35 Автор: йцукенг <jcukeng> Статус: Member
API Spy пройденый этап, прикольно канешна но немнога не то что нада...
мне нужно не только перехватить вызов функции но и еще получить переметры и их содержимое при этом. А вот как это сделать никак не допру :(((
ежели есть инфа каккая или УРЛы поделитесь плиз!
link#214.10.01 01:27 Автор: йцукенг <jcukeng> Статус: Member
>А вот как это
> сделать никак не допру :((( > ежели есть инфа каккая или УРЛы поделитесь плиз!
посмотри на www.reversing.net
там есть МАССА статей на тему реверсинга.
кстати - я не понял, почему, собственно, ты не воспользуешься IDA или SoftICE?
SoftIce позволяет же поставить брейкпоинт на вызов функции...
> >А вот как это > > сделать никак не допру :((( > > ежели есть инфа каккая или УРЛы поделитесь плиз! > > посмотри на www.reversing.net > там есть МАССА статей на тему реверсинга. > кстати - я не понял, почему, собственно, ты не > воспользуешься IDA или SoftICE? > SoftIce позволяет же поставить брейкпоинт на вызов > функции...
потому как нужно мне програмно перехватить переданные параметры функции и подменить их(а может и нет)... как перехватывать сам вызов я прошарил а вот как перехватиь параметры еще нет :(((
[Win32] Здесь что одни ламеры собрались?!13.10.01 21:40 Автор: neuron_viking Статус: Незарегистрированный пользователь
Po-moemu eto ty voprosy zadavat' ne umeesh', vot nikto i ne reagiruet.
a vot eto :
"Так же интересует инфа по восстановлению функицй из ассмовского кода... " - menya povalilo na poval.
> > Крик души!!! > Ne ori !!! > > Po-moemu eto ty voprosy zadavat' ne umeesh', vot nikto i ne > reagiruet. > a vot eto : > "Так же интересует инфа по восстановлению функицй из > ассмовского кода... " - menya povalilo na poval. > > Tebe chego nado ???
Мне нада имея в наличии адрец функции узнать какие параметры ей переданы и узнать их содержимое. И еще мне нужно узнать где заканчивается эта функция т.е. я так полагаю нужно искать от стартовой точки до кода ret n ... я прав?
>И еще мне
> нужно узнать где заканчивается эта функция т.е. я так > полагаю нужно искать от стартовой точки до кода ret n ... я > прав?
Ну вааще-то ф-ция не ОБЯЗАНА иметь один ret. Скажем такой пример
mov eax,333
call Func1
...
...
...
Func1:
cmp eax,666
jge Label1
xor ebx,ebx
ret
Label1
mov ebx,1
ret
Но не знаю как в WinApi может там все и имеют один ret, хз
+Чтоб искать ret нужен хотя бы дизассемблер длин комманд т.е. просто поиск CAxxxx(retf xxxx) или C2xxxx(retn xxxx), а также есть просто C3(retn) CB(retf)
Xy}|{e :-), И что же мне теперь со всем этим делать?!15.10.01 05:23 Автор: neuron_viking Статус: Незарегистрированный пользователь
> Ну вааще-то ф-ция не ОБЯЗАНА иметь один ret. Скажем такой > пример > mov eax,333 > ... > xor ebx,ebx > ret > Label1 > mov ebx,1 > ret > > Но не знаю как в WinApi может там все и имеют один ret, хз > +Чтоб искать ret нужен хотя бы дизассемблер длин комманд > т.е. просто поиск CAxxxx(retf xxxx) или C2xxxx(retn xxxx), > а также есть просто C3(retn) CB(retf)
... повеситься чтоль?!
Каким образом можно решить два вопроса:
1) Как вычислить размер функции зная только её начало(адрес первой команды в памяти)?
2) Как получить параметры переданные этой функции если известно число параметров, в каком порядке они передаются и размер параметров(их тип)?
Xy}|{e :-), И что же мне теперь со всем этим делать?!15.10.01 13:15 Автор: SerpentFly <Vadim Smirnov> Статус: Member
> 1) Как вычислить размер функции зная только её начало(адрес > первой команды в памяти)? > 2) Как получить параметры переданные этой функции если > известно число параметров, в каком порядке они передаются и > размер параметров(их тип)?
1)Ну попробуй все таки искать те инструкции которые я написал с помощью дизасемблера длин команд можно написать самому можно взять отседа http://z0mbie.host.sk/index.html#down но там он глючит, с 32хбитным кодом так что придкться немного доделать... Ну и конечно 100% гарантии что ret который ты найдешь это истинный конец ф-ции нет.
2)Извлечь их из стека. Параметры помещаються в стек в обратном порядке т.е. сначала push xxx - последний, push yyy - предпоследний и т.д. + не надо забывать что call помещает в стек адрес возврата. Так что это проще всего, конечно надо знать кол-во параметров и их тип.
Тогда пачиму ЭТО не работает ?!15.10.01 19:12 Автор: neuron_viking Статус: Незарегистрированный пользователь
Вычисляю(к примеру) адрес MessageBox, записываю туда вместо первых 5и байт свои байты FF 0F 10 40 00 - это jmp MyStubFuncAddr, но вместо вызова моей функции(MyStubFunc) я получаю ошибку доступа к памяти в какое-то левое место; отладчик при этом дизассемблирет этот код как ДВЕ! отдельных инструкции:
FF 0F dec dword ptr [edi]
10 40 00 adc byte ptr [eax],al - и вот здесь эта хрень вылетает!!!
это совсем не то что я хотел, а я хотел, как уже сказал, чтобы выполнилась моя инструкция FF 0F 10 40 00. Что вообще происходит? С call таже самая фигня :(((. Атрибуты страницы ессно меняю на PAGE_EXECUTE_RW.
Тогда пачиму ЭТО не работает ?!16.10.01 09:16 Автор: z0 <z0> Статус: Member
> Вычисляю(к примеру) адрес MessageBox, записываю туда вместо > первых 5и байт свои байты FF 0F 10 40 00 - это jmp > MyStubFuncAddr, но вместо вызова моей функции(MyStubFunc) я > получаю ошибку доступа к памяти в какое-то левое место; > отладчик при этом дизассемблирет этот код как ДВЕ! > отдельных инструкции: > FF 0F dec dword ptr [edi] > 10 40 00 adc byte ptr [eax],al - и вот здесь > эта хрень вылетает!!! > это совсем не то что я хотел, а я хотел, как уже сказал, > чтобы выполнилась моя инструкция FF 0F 10 40 00. Что вообще > происходит? С call таже самая фигня :(((. Атрибуты страницы > ессно меняю на PAGE_EXECUTE_RW.
а почему тебе можно, понимаешь, байты в памяти менять а какой-нить другой проге нельзя. верни атрибут на PAGE_NOT_PRESENT и обрабатывай exception 0e с проверкой CRC на странице
а если серьезно, то по внешнему виду похоже ты нарвался на fuxup correction - адрес-то у тебя в косвенном джампе есть
как только я вижу адрес - первая мысля - а фиксапы как?
Тогда пачиму ЭТО не работает ?!15.10.01 20:15 Автор: SerpentFly <Vadim Smirnov> Статус: Member
Проверь стоит ли у тебя в системе драйвер ruky.sys. Если нет то поищи...
А вообще, что софтайс вообще не судьба воспользоваться? Пеньку ясно что что-то ты сделал криво, так поставь туда бреакпойнт. Или ты думаешь тут экстрасенсы организуют удаленную отладку по астральному каналу?
Тогда пачиму ЭТО не работает ?!15.10.01 21:42 Автор: neuron_viking Статус: Незарегистрированный пользователь
> Проверь стоит ли у тебя в системе драйвер ruky.sys. Если > нет то поищи... > > А вообще, что софтайс вообще не судьба воспользоваться? > Пеньку ясно что что-то ты сделал криво, так поставь туда > бреакпойнт. Или ты думаешь тут экстрасенсы организуют > удаленную отладку по астральному каналу?
Причина вот в чем, то что я пытался записать как jmp MyStubFuncAddr или FF 00 40 D0 10 но на самом деле превращается в FF 00 80 42 04 т.е. что то типа jmp неизвестно_куда, почему так получается?! Тогда я посмотрел дизасмом как будет выглядеть call MyStubFuncAddr, пусть MyStubFuncAddr = 0x004010D0, тогда по идее это должно быть: FF D0 10 40 00, НО! нифига подобного, почему-то это превращяется в FF 55 F8. Почему так??? И ккаким таким образом возникает подобное преобразование? А вот если я запишу FF 55 F8 то все пучком заработает!
Тогда пачиму ЭТО не работает ?!16.10.01 00:23 Автор: Heromantor Статус: Незарегистрированный пользователь
> Причина вот в чем, то что я пытался записать как jmp > MyStubFuncAddr или FF 00 40 D0 10 но на самом деле > превращается в FF 00 80 42 04 т.е. что то типа jmp > неизвестно_куда, почему так получается?! Тогда я посмотрел > дизасмом как будет выглядеть call MyStubFuncAddr, пусть > MyStubFuncAddr = 0x004010D0, тогда по идее это должно быть: > FF D0 10 40 00, НО! нифига подобного, почему-то это > превращяется в FF 55 F8. Почему так??? И ккаким таким > образом возникает подобное преобразование? А вот если я > запишу FF 55 F8 то все пучком заработает!
Ну вообще я ничего не стану утверждать но все же мне кажеться что jmp начинаеться с 0xE9, а FF вроде это либо inc хитрый либо jmp еще хитрее вроде что-то jmp по адресу регистр+число 0xE9 по крайней мере это 100% jmp :))
О точно то что ты написал будет как
0xFFD0104000=
call eax
adc [eax][0],al
В общем хрен знает но с FF00xxxx тебя похоже обманули... Делай E9xxxxxxxx
Тогда пачиму ЭТО не работает ?!16.10.01 02:03 Автор: neuron_viking Статус: Незарегистрированный пользователь
> > Причина вот в чем, то что я пытался записать как jmp > > MyStubFuncAddr или FF 00 40 D0 10 но на самом деле > > превращается в FF 00 80 42 04 т.е. что то типа jmp > > неизвестно_куда, почему так получается?! Тогда я > посмотрел > > дизасмом как будет выглядеть call MyStubFuncAddr, > пусть > > MyStubFuncAddr = 0x004010D0, тогда по идее это должно > быть: > > FF D0 10 40 00, НО! нифига подобного, почему-то это > > превращяется в FF 55 F8. Почему так??? И ккаким таким > > образом возникает подобное преобразование? А вот если > я > > запишу FF 55 F8 то все пучком заработает! > > Ну вообще я ничего не стану утверждать но все же мне > кажеться что jmp начинаеться с 0xE9, а FF вроде это либо > inc хитрый либо jmp еще хитрее вроде что-то jmp по адресу > регистр+число 0xE9 по крайней мере это 100% jmp :)) > О точно то что ты написал будет как > 0xFFD0104000= > call eax > adc [eax][0],al > > В общем хрен знает но с FF00xxxx тебя похоже обманули... > Делай E9xxxxxxxx
Делал, абсолютно тоже самое - т.е. адрес функции коверкается, т.е. как я уже говорил, мне нужо чтобы в памяти были E9(или E8, пофигу!)D0 10 40 00, а на самом деле почему то в памяти оказывается E9 55 F8, и еще раз говорю, что если именно эту штуку записать в память то все корректно срабатывает :((( ... откуда она берется и как осуществляется преобразование D0 10 40 00 -> 55 F8 ???? я в панике!
Тогда пачиму ЭТО не работает ?!16.10.01 19:34 Автор: Heromantor Статус: Незарегистрированный пользователь
> Делал, абсолютно тоже самое - т.е. адрес функции > коверкается, т.е. как я уже говорил, мне нужо чтобы в > памяти были E9(или E8, пофигу!)D0 10 40 00, а на самом деле > почему то в памяти оказывается E9 55 F8, и еще раз говорю, > что если именно эту штуку записать в память то все > корректно срабатывает :((( ... откуда она берется и как > осуществляется преобразование D0 10 40 00 -> 55 F8 ???? > я в панике!
Ну во первых когда меняеться значение? Ты пробовал просичитать его сразу после записи? И в конце концов поставь ты себе SoftIce и bpm там поставь на MessageBox тогда все станет ясно моментом.