Сейчас на форуме: Rio (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Пара вопросов по инлайн-патчу ASPack'а |
Посл.ответ | Сообщение |
|
Создано: 25 июля 2008 02:08 · Личное сообщение · #1 Пробую сделать инлайн патч, читаю статейки, и кое-что непонятно. Вот выдержки из --> статьи <-- Bad_guy'а "Полуавтоматическая распаковка ASPack 2.12 за 29 секунд": беру и нахожу прогу запакованную ASPack 2.12 ..., ищу там эти самые опкоды (68 00 00 00 00 C3)...
Так вот, непонятно, как можно вместо push 00D63B9C написать jmp 12345678. Ведь 4 байта в этом месте во время распаковки затираются: вместо PUSH 0 появляется PUSH OEP, а если написать jmp 12345678, то вместо этого получится JMP OEP. Второй вопрос по --> статье <-- BiT-H@ck'а "Объективный взгляд на DrWeb" ...Теперь будем писать так называемый in-line патч. Грузим в олю запакованный файл и ищем переход на ОЕР. Вот:
И как перенаправить этот переход, ведь там JNZ - SHORT, и до адреса 004С6АB5 он никак не достанет, значит будет JNZ обычный, который затрет MOV EAX,1. Кто нибудь может просветить по этим двум вопросам? ![]() |
|
Создано: 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 он никак не достанет Но ты то напишешь длинный джамп, который достанет ![]() ![]() |
|
Создано: 26 июля 2008 00:17 · Личное сообщение · #3 crc1 пишет: А то что следующие команды затрутся, не обращай внимания. Они не выполнятся. Когда все проходит нормально, эти команды действительно не выполняются, но разве можно на 100% исключить ситуацию, когда они все-таки выполнятся. А насчет того, чтобы занопить команду, затирающую PUSH, действительно - это решение, почему я сам не додумался? Спасибо, crc1. И почему в статье об этом ничего не сказано? Но есть еще один способ перехода к инлайну, когда ничего не затрется и не нужно ничего нопить. Когда смотрел, что нопить, увидел смещение на OEP открытым текстом MOV EAX,offset
В этот MOV EAX,offset и можно записать смещение на инлайн, а вообще, вариантов здесь куча. ![]() |
|
Создано: 26 июля 2008 05:04 · Личное сообщение · #4 |
|
Создано: 27 июля 2008 03:07 · Личное сообщение · #5 |
|
Создано: 05 августа 2008 13:51 · Личное сообщение · #6 Кто нибудь может просветить по этим двум вопросам? Объяснять тут особо нечего, при дальнем переходе( а переход будет действительно дальним) комада MOV EAX,1 (или какая-то другая в любом другом пакере при написании инлайна при таких же условиях) затрётся, но после дальнего перехода можно пропатчить код, выполнить затёртую команду и радоваться жизни ![]() ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 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 тоже убираю. ----- Ламер - не профессия :)) ![]() |
|
Создано: 07 августа 2008 17:58 · Личное сообщение · #8 |
|
Создано: 16 августа 2008 03:07 · Личное сообщение · #9 Прошу прощения, но еще раз подниму тему. С инлайном я, действительно, давно разобрался: SVLab пишет: В этот MOV EAX,offset и можно записать смещение на инлайн aspirin Может, я не совсем правильно оформил пост, но написанное моноширинным шрифтом - это не я пишу, а там_же_упомянутые авторы статей - Bad_guy и BiT-H@ck. ![]() И хотелось бы выяснить возникший попутно вопрос: о какой табличке писал pavka в своем посте? ![]() |
|
Создано: 16 августа 2008 08:44 · Личное сообщение · #10 |
|
Создано: 16 августа 2008 08:50 · Личное сообщение · #11 |
|
Создано: 17 августа 2008 01:43 · Личное сообщение · #12 |
|
Создано: 17 августа 2008 08:06 · Личное сообщение · #13 |
|
Создано: 18 августа 2008 17:56 · Личное сообщение · #14 Вообще-то, я сразу попробовал запустить этот скрипт, но Olly споткнулась на erun, т.к. скриптовая dll была старая (0.85). Нашел новую, сделал такой скрипт: gpa "GetModuleHandleA", "Kernel32.dll"
В ESI получаю IAT VA, а вот дальше мне не совсем понятно: pavka пишет: отнимай базу и ищи в загрузчке $RESULT-4 ==OEP RVA Т.е. от ESI надо отнять 400000 (получить IAT RVA) и полученное значение найти в модуле Aspack'а, найденный результат вернется в $RESULT, от которой надо отнять 4 и получится адрес, по которому будет лежать OEP RVA. Дописал скрипт: var _esi
Или я что-то делаю не так, или... что-то не так делаю. Вобщем, находится адрес, где IAT RVA грузится в ESI. И по адресу $RESULT-4 нет никакого намека ни на OEP RVA ни на какую-нибудь таблицу. ![]() |
|
Создано: 21 августа 2008 08:53 · Личное сообщение · #15 SVLab пишет: crc1 пишет: А то что следующие команды затрутся, не обращай внимания. Они не выполнятся. Когда все проходит нормально, эти команды действительно не выполняются, но разве можно на 100% исключить ситуацию, когда они все-таки выполнятся. mov eax,1 - выполняется только если файл - DLL. Если не dll то никогда не выполнится. SVLab поищи статик анпакер доктора Головы, он там по определенному смещению табличку читает. Или посмотри динамик анпакер йоды, он вообще для разных аспаков по разным смещениям табличку берет. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 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), хотя о поддержке написано, а в одном неправильно определил версию, и файл получился нерабочий. А может это разработчики программ постарались и защитили свои творения от автоматов. ![]() |
|
Создано: 22 августа 2008 09:54 · Личное сообщение · #17 |
|
Создано: 22 августа 2008 13:17 · Личное сообщение · #18 SVLab пишет: А видно, что у разных версий пакера OEP RWA и IAT RWA лежат то рядышком (т.е. можно говорить о табличке), то сравнительно далеко друг от друга (как у 2.12) прямо в исполняемом коде. И в этом случае говорить о таблице, содержащей OEP RWA и IAT RWA, нельзя, так как онной не существует. Это твое личное имхо ;) Вобще я не понимаю в чем твои претензии ? Тебя ткнули носом, надо рой дальше ![]() ![]() ![]() ![]() |
|
Создано: 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:
Я только не вижу, где же тут таблица? ![]() |
|
Создано: 22 августа 2008 16:34 · Личное сообщение · #20 SVLab пишет: Я только не вижу, где же тут таблица? А зачем ты привел здесь этот код ? Что я должен здесь увидеть? ![]() Вопрос в том, всегда ли используется для этого какая-либо структура (т.е. табличка), или некоторые данные могут сохраняться прямо в исполняемом коде упаковщика Хм а в чем разница? ![]() ![]() |
|
Создано: 22 августа 2008 19:51 · Личное сообщение · #21 Код я привел что бы развеять твои сомнения в моей способности найти и увидеть эти RVA. pavka пишет: Хм а в чем разница? Разницы, в принципе, нет. А читаю я внимательно (не всегда понимаю - это точно). Просто после твоего поста pavka пишет: Оно и лежит в табличке вместе с базой , иат и т.д , пояснения Archer'а Archer пишет: Видимо про ту внутреннюю табличку, в которую аспак складывает нужные для себя значения и данные: оеп, таблицу импорта, релоки и тд. и твоего поста со скриптом, я стал искать эту табличку (где лежат OEP RVA и IAT RVA), но в Aspack2.12 и некоторых других версиях этого пакера такой таблицы просто нет. Нельзя же назвать таблицей приведенный выше код. И что же я здесь не понимаю? ![]() |
|
Создано: 23 августа 2008 10:26 · Личное сообщение · #22 SVLab пишет: но в Aspack2.12 и некоторых других версиях этого пакера такой таблицы просто нет. Т ы как в том анекдоте про исполнительных и не внимательныхВерсии разные таблички разные такой нет есть другая ![]() ![]() |
|
Создано: 23 августа 2008 17:54 · Личное сообщение · #23 |
![]() |
eXeL@B —› Вопросы новичков —› Пара вопросов по инлайн-патчу ASPack'а |
Эта тема закрыта. Ответы больше не принимаются. |