четверг, 27 января 2011 г.

Ещё раз о распаковки AsPack 2.XX



О распаковке протектора AsPack 2.XX, написано уже столько, что до конца жизни хватит. Правда это чтиво, будет не всегда полезным, потому что большинство приёмов, по понятным причинам - не работает. А дело всё в том, что команда разработчиков, даром не просиживает штаны, а чуть ли не в каждом новом билде, преподносит хоть небольшое, но новое. Вот из-за этого, и происходят непонятки.  Поэтому не будет лишним, снова поднять эту тему.
  Почему именно ручная распаковка, когда давным давно написаны распаковщики и скрипты, позволяющие обойти данную проблему в пол счёта? Да потому, что на автомате может и осёл распаковывать, а нам ведь главное процесс, а не результат.
  Теперь перейдём непосредственно к действию. Примером программы запакованной данным протектором, будет USDownloader, которая(как это не сложно догадаться по названию), является менеджером загрузок. Открываем её в OllyDBG и видим стандартную картину, для AsPack`а

00579100 > $ 60             PUSHAD
00579101   . BE 00804F00    MOV ESI,USDownlo.004F8000
00579106   . 8DBE 0090F0FF  LEA EDI,DWORD PTR DS:[ESI+FFF09000]
0057910C   . C787 D4941300 >MOV DWORD PTR DS:[EDI+1394D4],7F107FD1
00579116   . 57             PUSH EDI
00579117   . 83CD FF        OR EBP,FFFFFFFF
0057911A   . EB 0E          JMP SHORT USDownlo.0057912A

Как обычно доходим до сюда и дампим с помощью плагина OllyDump. Естественно, программа не запустится, потому что у неё нарушена таблица импорта, котрую нам и предстоит восстановить. Открываем распакованное приложение в дизассемблере HIEW, давим F8, а потом F10. Это минишаманство нужно для того, чтобы перейти в начало таблицы импорта. Сразу как только мы перенесёмся в это место, становится понятно, почему программа не запускалась. Начало таблицы, заехало прямо на функцию LoadLibraryA, что естественно является аномальным. Настоящий старт таблицы, начинается чуть-чуть ниже, а именно на строке 00576FB8. После этого, надо занести изменения в раздел NT_HEADER. Далее запускаем и видим что программа вроде загрузилась, но всё-равно выдаёт ошибку. Значит это ещё не всё. Открываем PE Tools и смотрим есть ли что-то странное в библиотеках, которые обеспечивают работу программы. В самом конце списка библиотек, мы замечаем  oleaut32.dll в которой первая функция выглядит довольно странно. То есть у неё нет ни Thunk RVA, ни Thunk Value. В таком случае, давайте удалим эту функцию, чтобы она не смущала загрузчик. Перезапускаем и видим, что теперь программа успешно запускается. Теперь можно радоваться и праздновать) Вот так вот не сложно, можно восстановить таблицу импорта. Конечно, в полевых условиях лучше всего юзать ImpRec, но знать как восстанавливается эта таблица, думаю не помешает. Удачи!

Комментариев нет:

Отправить комментарий