Сейчас на форуме: Rio (+5 невидимых)

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

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

Создано: 25 июля 2008 02:08
· Личное сообщение · #1

Пробую сделать инлайн патч, читаю статейки, и кое-что непонятно. Вот выдержки из --> статьи <-- Bad_guy'а "Полуавтоматическая распаковка ASPack 2.12 за 29 секунд":

беру и нахожу прогу запакованную ASPack 2.12 ..., ищу там эти самые опкоды (68 00 00 00 00 C3)...
...вот еще одна интересность, которую можно провернуть с аспаком, да и почти любым другим упакованным файлом:
Вспомним
push 00D63B9C
ret
но нам ведь вовсе не обязательно сейчас прыгать на Entry Point, нам же надо прогу попатчить...
...Тогда вместо push 00D63B9C можно написать jmp 12345678


Так вот, непонятно, как можно вместо push 00D63B9C написать jmp 12345678. Ведь 4 байта в этом месте во время распаковки затираются: вместо PUSH 0 появляется PUSH OEP, а если написать jmp 12345678, то вместо этого получится JMP OEP.
Второй вопрос по --> статье <-- BiT-H@ck'а "Объективный взгляд на DrWeb"

...Теперь будем писать так называемый in-line патч. Грузим в олю запакованный файл и ищем переход на ОЕР. Вот:
004C43AF 61 POPAD
004C43B0 7508 JNZ SHORT 004C43BA
004C43B2 B801000000 MOV EAX, 1
...
Теперь ищем место под патч. Я взял вот тут:
004C6AB5 00 DB 00
...
Теперь переход по адресу 004C43B0 перенаправляем на будущий патч


И как перенаправить этот переход, ведь там JNZ - SHORT, и до адреса 004С6АB5 он никак не достанет, значит будет JNZ обычный, который затрет MOV EAX,1.
Кто нибудь может просветить по этим двум вопросам?



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

Создано: 25 июля 2008 10:22
· Личное сообщение · #2

В ASPack под PUSH OEP зарезервирована пятибайтная команда:
6800000000 PUSH 0
C3 RET
Ее легко заменить на jmp 12345678, то же пятибайтная команда. А еще лучше менять на
PUSH адрес инлайна (не надо высчитывать смещение джампа). Тогда по RET ты перейдешь на свой код.
Но в этом случае необходимо учесть, что байты после 68 будут затерты предыдущей командой. Ее нужно нопить. Это что касается метода Bad_guy'а
У BiT-H@ck'а проще, он меняет команду которая не затирается. SVLab пишет:
ведь там JNZ - SHORT, и до адреса 004С6АB5 он никак не достанет

Но ты то напишешь длинный джамп, который достанет А то что следующие команды затрутся, не обращай внимания. Они не выполнятся.



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

Создано: 26 июля 2008 00:17
· Личное сообщение · #3

crc1 пишет:
А то что следующие команды затрутся, не обращай внимания. Они не выполнятся.

Когда все проходит нормально, эти команды действительно не выполняются, но разве можно на 100% исключить ситуацию, когда они все-таки выполнятся.
А насчет того, чтобы занопить команду, затирающую PUSH, действительно - это решение, почему я сам не додумался? Спасибо, crc1. И почему в статье об этом ничего не сказано?
Но есть еще один способ перехода к инлайну, когда ничего не затрется и не нужно ничего нопить. Когда смотрел, что нопить, увидел смещение на OEP открытым текстом
MOV EAX,offset
PUSH EAX
ADD EAX,DWORD PTR SS:[EBP+422]
POP ECX
OR ECX,ECX
MOV DWORD PTR SS:[EBP+3A8],EAX
POPAD
JNZ SHORT 006003BA
MOV EAX,1
RETN 0C
PUSH 0
RETN

В этот MOV EAX,offset и можно записать смещение на инлайн, а вообще, вариантов здесь куча.



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 26 июля 2008 05:04
· Личное сообщение · #4

SVLab пишет:
Когда смотрел, что нопить, увидел смещение на OEP открытым текстом

Оно и лежит в табличке вместе с базой , иат и т.д Ну и пиши туда нужное тебе значение



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

Создано: 27 июля 2008 03:07
· Личное сообщение · #5

Писать, в смысле, в табличку? Только что-то я не нашел ничего похожего на такую табличку. Как ее искать?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 05 августа 2008 13:51
· Личное сообщение · #6

Кто нибудь может просветить по этим двум вопросам?
Объяснять тут особо нечего, при дальнем переходе( а переход будет действительно дальним) комада MOV EAX,1 (или какая-то другая в любом другом пакере при написании инлайна при таких же условиях) затрётся, но после дальнего перехода можно пропатчить код, выполнить затёртую команду и радоваться жизни

-----
Stuck to the plan, always think that we would stand up, never ran.





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

Создано: 07 августа 2008 15:32
· Личное сообщение · #7

SVLab пишет:
беру и нахожу прогу запакованную ASPack 2.12 ..., ищу там эти самые опкоды (68 00 00 00 00 C3)...
...вот еще одна интересность, которую можно провернуть с аспаком, да и почти любым другим упакованным файлом:
Вспомним
push 00D63B9C
ret

зачем так заморачиваться, можно же проще HR ESP-4, лично я так делаю.
push 00D63B9C - это адрес твоего ОЕР, поэтому я не трогаю этот код.
SVLab пишет:
...Теперь будем писать так называемый in-line патч. Грузим в олю запакованный файл и ищем переход на ОЕР. Вот:
004C43AF 61 POPAD
004C43B0 7508 JNZ SHORT 004C43BA
004C43B2 B801000000 MOV EAX, 1
...
Теперь ищем место под патч. Я взял вот тут:
004C6AB5 00 DB 00
...
Теперь переход по адресу 004C43B0 перенаправляем на будущий патч

И как перенаправить этот переход, ведь там JNZ - SHORT, и до адреса 004С6АB5 он никак не достанет, значит будет JNZ обычный, который затрет MOV EAX,1.
Кто нибудь может просветить по этим двум вопросам?

004C43B0 7508 JNZ SHORT 004C43BA - я просто меняю этот код на JMP xxx(х -адрес моего кода на нулях) , Short тоже убираю.

-----
Ламер - не профессия :))





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 августа 2008 17:58
· Личное сообщение · #8

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



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

Создано: 16 августа 2008 03:07
· Личное сообщение · #9

Прошу прощения, но еще раз подниму тему.
С инлайном я, действительно, давно разобрался:
SVLab пишет:
В этот MOV EAX,offset и можно записать смещение на инлайн


aspirin
Может, я не совсем правильно оформил пост, но написанное моноширинным шрифтом - это не я пишу, а там_же_упомянутые авторы статей - Bad_guy и BiT-H@ck.

И хотелось бы выяснить возникший попутно вопрос: о какой табличке писал pavka в своем посте?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 16 августа 2008 08:44
· Личное сообщение · #10

Видимо про ту внутреннюю табличку, в которую аспак складывает нужные для себя значения и данные: оеп, таблицу импорта, релоки и тд.



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 16 августа 2008 08:50
· Личное сообщение · #11

SVLab пишет:
попутно вопрос: о какой табличке писал pavka в своем посте?

а чего там выяснять в 2.12 к примеру ставь бряк на GetModuleHandleA
erun
erun
bc eip
rtu
в esi будет IAT VA отнимай базу и ищи в загрузчке $RESULT-4
==OEP RVA



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

Создано: 17 августа 2008 01:43
· Личное сообщение · #12

pavka
Ты так пишешь, как будто мои познания равны твоим. bc eip похоже на снятие точки останова с eip, а что такое erun, rtu? Это команды скрипта или что-то другое?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 17 августа 2008 08:06
· Личное сообщение · #13

Это всё скрипт для ольки, почитай ман по скриптам.



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

Создано: 18 августа 2008 17:56
· Личное сообщение · #14

Вообще-то, я сразу попробовал запустить этот скрипт, но Olly споткнулась на erun, т.к. скриптовая dll была старая (0.85). Нашел новую, сделал такой скрипт:
gpa "GetModuleHandleA", "Kernel32.dll"
bp $RESULT
erun
erun
bc eip
rtu

В ESI получаю IAT VA, а вот дальше мне не совсем понятно:
pavka пишет:
отнимай базу и ищи в загрузчке $RESULT-4
==OEP RVA

Т.е. от ESI надо отнять 400000 (получить IAT RVA) и полученное значение найти в модуле Aspack'а, найденный результат вернется в $RESULT, от которой надо отнять 4 и получится адрес, по которому будет лежать OEP RVA. Дописал скрипт:
var _esi
mov _esi,esi
sub _esi,400000
find 8b3000, _esi
log $RESULT-4

Или я что-то делаю не так, или... что-то не так делаю. Вобщем, находится адрес, где IAT RVA грузится в ESI. И по адресу $RESULT-4 нет никакого намека ни на OEP RVA ни на какую-нибудь таблицу.




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

Создано: 21 августа 2008 08:53
· Личное сообщение · #15

SVLab пишет:
crc1 пишет:
А то что следующие команды затрутся, не обращай внимания. Они не выполнятся.
Когда все проходит нормально, эти команды действительно не выполняются, но разве можно на 100% исключить ситуацию, когда они все-таки выполнятся.

mov eax,1 - выполняется только если файл - DLL. Если не dll то никогда не выполнится.

SVLab поищи статик анпакер доктора Головы, он там по определенному смещению табличку читает. Или посмотри динамик анпакер йоды, он вообще для разных аспаков по разным смещениям табличку берет.

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




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

Создано: 22 августа 2008 02:24
· Личное сообщение · #16

PE_Kill пишет:
mov eax,1 - выполняется только если файл - DLL

Понял, спасибо за информацию.

PE_Kill пишет:
поищи статик анпакер доктора Головы ... Или посмотри динамик анпакер йоды

Ты имеешь в виду, посмотреть исходники? Посмотрел AspackDie1.4 yoda. И что же там видно? А видно, что у разных версий пакера OEP RWA и IAT RWA лежат то рядышком (т.е. можно говорить о табличке), то сравнительно далеко друг от друга (как у 2.12) прямо в исполняемом коде. И в этом случае говорить о таблице, содержащей OEP RWA и IAT RWA, нельзя, так как онной не существует.
Кстати, этот анпакер не смог распаковать ни одного из трех имеющихся у меня файлов, запакованных Aspack'ом. В двух случаях вообще не определил, что это Aspack (2.12b по PEiD0.94), хотя о поддержке написано, а в одном неправильно определил версию, и файл получился нерабочий. А может это разработчики программ постарались и защитили свои творения от автоматов.




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

Создано: 22 августа 2008 09:54
· Личное сообщение · #17

SVLab пишет:
Кстати, этот анпакер не смог распаковать ни одного из трех имеющихся у меня файлов

Юзай мой. Он на защиту от автоанпакеров не обращает внимания.

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




Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 22 августа 2008 13:17
· Личное сообщение · #18

SVLab пишет:
А видно, что у разных версий пакера OEP RWA и IAT RWA лежат то рядышком (т.е. можно говорить о табличке), то сравнительно далеко друг от друга (как у 2.12) прямо в исполняемом коде. И в этом случае говорить о таблице, содержащей OEP RWA и IAT RWA, нельзя, так как онной не существует.

Это твое личное имхо ;) Вобще я не понимаю в чем твои претензии ? Тебя ткнули носом, надо рой дальше Да естественно разные версии аспака различаются притом довольно сильно если брать первую и последнюю Любой пакер, протектор сохранет информацию о структуре обработаного Pe , и если ты ее не видишь или не можешь найти это не значит сто ее нет



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

Создано: 22 августа 2008 16:01 · Поправил: SVLab
· Личное сообщение · #19

PE_Kill пишет:
Юзай мой

Спасибо. Ради интереса попробовал. Те, которые были запакованы 2.12b, после распаковки нормально работают, а третий (2.001 по PEiD) при запуске выдает Runtime error 216 at 000032D4. Хотя файл этот немного странный - с двумя секциями .rsrc, одна до Aspack'а, другая - нулевого размера - после. Возможно, из-за удаления второй вместе с Aspack'ом, файл и получается нерабочим.
pavka пишет:
Это твое личное имхо

Возможно и так, но оно основано на том, что я вижу в конкретных файлах.
pavka пишет:
Вобще я не понимаю в чем твои претензии ?

Да с чего ты взял, что у меня есть претензии?
pavka пишет:
Тебя ткнули носом, надо рой дальше

Так я, вроде, и рою... с вашей помощью
pavka пишет:
Любой пакер, протектор сохранет информацию о структуре обработаного Pe

Конечно, сохраняет. Кто же это отрицает? Вопрос в том, всегда ли используется для этого какая-либо структура (т.е. табличка), или некоторые данные могут сохраняться прямо в исполняемом коде упаковщика. Ты утверждаешь первое, я - второе (хотя спорить с авторитетами - дело опасное :s1
pavka пишет:
если ты ее не видишь или не можешь найти это не значит сто ее нет

Почему же не могу? И нахожу, и вижу. Конкретный пример (Offline explorer enterprise 3.7.2008SR1 - Aspack2.12b):

Code:
  1. 008B3279    BE 00703A00            MOV ESI,3A7000            // 3A7000 == IAT RVA
  2. . . .
  3. 008B339B    B8 B40C3800            MOV EAX,380CB4           // 380CB4 == OEP RVA


Я только не вижу, где же тут таблица?



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 22 августа 2008 16:34
· Личное сообщение · #20

SVLab пишет:
Я только не вижу, где же тут таблица?

А зачем ты привел здесь этот код ? Что я должен здесь увидеть? SVLab пишет:
Вопрос в том, всегда ли используется для этого какая-либо структура (т.е. табличка), или некоторые данные могут сохраняться прямо в исполняемом коде упаковщика

Хм а в чем разница? )Имхо или ты не внимательно читаешь или просто не понимаешь о чем идет речь



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

Создано: 22 августа 2008 19:51
· Личное сообщение · #21

Код я привел что бы развеять твои сомнения в моей способности найти и увидеть эти RVA.
pavka пишет:
Хм а в чем разница?

Разницы, в принципе, нет. А читаю я внимательно (не всегда понимаю - это точно). Просто после твоего поста
pavka пишет:
Оно и лежит в табличке вместе с базой , иат и т.д
,
пояснения Archer'а
Archer пишет:
Видимо про ту внутреннюю табличку, в которую аспак складывает нужные для себя значения и данные: оеп, таблицу импорта, релоки и тд.

и твоего поста со скриптом, я стал искать эту табличку (где лежат OEP RVA и IAT RVA), но в Aspack2.12 и некоторых других версиях этого пакера такой таблицы просто нет. Нельзя же назвать таблицей приведенный выше код. И что же я здесь не понимаю?



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 23 августа 2008 10:26
· Личное сообщение · #22

SVLab пишет:
но в Aspack2.12 и некоторых других версиях этого пакера такой таблицы просто нет.

Т ы как в том анекдоте про исполнительных и не внимательныхВерсии разные таблички разные такой нет есть другая За каким хреном ему записывать смещения иат и оеп если он пихает их в регистры открытым текстом На память не помню чего он там пишет, базу чето еще..



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

Создано: 23 августа 2008 17:54
· Личное сообщение · #23

Ну вот, наконец-то, и договорились.


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