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

 eXeL@B —› Вопросы новичков —› Проблема с ASProtect 1.23 RC4 - 1.3.08.24 [1]
Посл.ответ Сообщение

Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 20 июля 2007 19:55 · Поправил: tempread
· Личное сообщение · #1

Такой протектор показывает VerA 0.15.
Нашел OEP(сразу вручную, через "подсчет исключений", потом попробовал скрипт asprsoep.txt - результаты совпали).

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

Сделал дамп.

ImpRec автоматом не нашел импорт. Поэтому я в запустил запакованную прогу, дошел до OEP, дошел до импортируемой функции. Посмотрел где таблица импорта. Потом нашел, где она пишется. Перед созданием таблицы, обнулил. Создался импорт. Пустил прогу. Запустил ImpRec, импорт замечательно восстановился. Пофикил дамп. Дамп не запускается Ошибку выдает какаято борландовская библиотека.

Запустил пофиксеный дамп в OllyDbg. Долго копался,пытаясь понять в чем дело.

В общем внутри одной борландовской библиотеки перебираются адреса функций(и имена) другой библиотеки.
И в сдапленной программе адреса определенной функции нет. Посмотрел что в запакованной програме в этом месте - там есть определенная функция. Ок,проблема вроде нашлась - плохой импорт.
В запакованной программе посмотрел, откуда она берет адрес той злощастной функции. Нашел. Хотел найти место, где же в запакованной программе этот адрес записывается. И с удивлением обнаружил, что этот адрес УЖЕ записан лоадером при старте ЗАПАКОВАНОЙ программы с EP. Получается, что распакованная протектором программа использует импорт(или функционально нечто подобное), созданный для запакованной программы!

Подскажите, что в каком направлении дальше идти? Необходимо как-то импорты созданный для запакованной и незапакованной программы обьединять?



Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 20 июля 2007 23:12
· Личное сообщение · #2

Трассировку в ImpRec юзай для восстановления импорта,в некоторых случаях помогает.
Тутор от ARTeam по распаковке данного прота в атаче

7b49_20.07.2007_CRACKLAB.rU.tgz - Unpacking_ASProtect_1.23_RC4-1.3.08.24_By_R@dier.rar



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 июля 2007 03:09
· Личное сообщение · #3

Трассировку в ImpRec использовать не могу... Я еще нигде не встречал описание странной ситуации, которая у меня сложилась... Когда я запускаю в ImpRec'а трассировку, распаковываемая програма ЗАКРЫВАЕТСЯ(причем так ведут себя все екзешники програмного пакета, которые запакованы)! Проверял на двух разных компьютерах... Это,наверное, защита какая-то отрабатывает? Как с таким бороться?
И вобще,все статьи,которые я прочитал про AsProtect 1.23, такие простые(перечитал уже много), там все просто и легко...А в моем случае,все почему то сложнее Импорт исковеркан ужасно,адреса разманы среди большого количества мусора
И вопрос по поводу использования импорта запакованной программы программой распакованой остается в силе... Насколько я понимаю, у меня не сама программа распакованая использует импорт запакованной програмы, а dll'ка распакованой программы использует этот импорт. И проблема в том, что в распакованой программе нет и упоминаний об импорте запакованной програмы. Поэтому прога виснет. Жду подсказок...




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 21 июля 2007 09:56
· Личное сообщение · #4

tempread пишет:
И с удивлением обнаружил, что этот адрес УЖЕ записан лоадером при старте ЗАПАКОВАНОЙ программы с EP

...так нельзя что-ли никак вписать этот адрес в распакованную программу??

-----
the Power of Reversing team




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 июля 2007 12:44 · Поправил: tempread
· Личное сообщение · #5

Есть такой код(mail thread,module vcl50):
400039F4 PUSH ESI
400039F5 PUSH EDI
400039F6 MOV EDI,EDX
400039F8 MOV ESI,DWORD PTR DS:[EAX-2C]
400039FB XOR ECX,ECX
400039FD MOV CL,BYTE PTR DS:[ESI]
400039FF INC ECX
40003A00 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ES]
40003A02 POP EDI
40003A03 POP ESI
40003A04 RETN


Окно регистров выглядит(при EIP=400039FB) так:
EAX 4003F970 vcl50.@Stdctrls@TEdit@
ECX 00000006
EDX 0012F4A4 ASCII 06,"TLabel"
EBX 00000008
ESP 0012F480
EBP 0012F5B4
ESI 4003FA44 ASCII 05,"TEdit"
EDI 0012F4A4 ASCII 06,"TLabel"
EIP 400039FB vcl50.400039FB

Эта функция вызывается много раз(больше 100). Адреса функций в EAX меняются, меняются ссылки на строки в других регистрах. И на n-ой итерации в EAX находится указатель на функцию, который находится в импорте запакованной программы(а в распакованной программе там нули...)....
DillerInc пишет:
..так нельзя что-ли никак вписать этот адрес в распакованную программу??

Так как нету этого адреса, то и вписывать нечего....

Вот так выглядит окно регистров при ексепшене(ESI указывает на невыделенную область пямяти - происходит ексепшен,eax - указатель на функцию,который заполняется лоадером запакованной програмы, в даном случае это распакованная пррамма, поэтому тут неправильное значение...):

EAX 00684A48 indy50.00684A48
ECX 00000000
EDX 0012F4A4 ASCII 0E,"TAdvStringGrid"
EBX 00000004
ESP 0012F480 ASCII "HJh"
EBP 0012F5B4
ESI 8BFFFCC6
EDI 0012F4A4 ASCII 0E,"TAdvStringGrid"
EIP 400039FD vcl50.400039FD




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 21 июля 2007 13:27
· Личное сообщение · #6

tempread пишет:
Так как нету этого адреса, то и вписывать нечего....

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

-----
the Power of Reversing team




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 июля 2007 14:44 · Поправил: tempread
· Личное сообщение · #7

Ссылка на инсталляцию - тут http://www.semonitor.ru/semonitor-rus.exe
Из набора этих программ я пытаюсь распаковать dcmonitor.
Попытался его вырезать(для уменьшения размера), но там много dll, мог пропустить какую-нибудь...
Вырезанная версия http://upload.com.ua/get/899944624

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

А это мой дамп dcmonitor.exe(с импортом): Дамп http://upload.com.ua/get/899944629

В дампе, в место, перед самой ошибкой можно попась по bp 400039f4 eax==684a48




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 21 июля 2007 18:45
· Личное сообщение · #8

tempread
Скажи мне OEP,который ты нашёл...

-----
the Power of Reversing team




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 июля 2007 19:08 · Поправил: tempread
· Личное сообщение · #9

OEP:
RVA=1000
VA=401000

IAT:
RVA:168b74
size:3a5d




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 22 июля 2007 01:46
· Личное сообщение · #10

tempread
По-видимому,я разобрался.Но...
У меня распакованная программа падала явно в другом месте.А точнее в самой программе по ошибке доступа,что является более характерным вариантом остатков защиты.Дело в том,что падения в "нейтральных" библиотеках наводят на мысль,что что-то криво распаковалось.

По делу -- по адресу 004062C6 проиходит скорее всего вызов какой-то функции протектора:

004062C6 call dword ptr ds:[0055F474]

Так вот по адресу 0055F474 у нас нули,а должен быть адрес функции: 00405FCC

Вопрос на-вскидку: чем ты снимал дамп??

Прикрепляю ссылку на мой дамп,который у меня запускается:
ifolder.ru/2747159

-----
the Power of Reversing team




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 22 июля 2007 02:51 · Поправил: tempread
· Личное сообщение · #11

Дамп снимал PE Tools v1.5.800.2006 RC7
Стоят галочки:
Full dump:paste header from disk
Full dump:fix header
Rebuild PE
Validate PE



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 22 июля 2007 03:09 · Поправил: tempread
· Личное сообщение · #12

Сразу есть два вопроса:
1) Версия прота старая или нет? Я считал, что версия старая, и надеялся, что распакую "влет"(ведь столько статей про эту версию прота, где все делается чуть ли не автоматически).

2) Можете в двух словах написать, как восстанавливали импорт?

P.S. Ваш дамп и у меня нормально запустился.
P.P.S. По поводу нулей по адресу 0055F474... В моем дампе там то, что нужно:
Address Value Comment
0055F474 00405FCC Entry address




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 22 июля 2007 12:10
· Личное сообщение · #13

tempread пишет:
Версия прота старая или нет?

...ну вроде да.
tempread пишет:
Можете в двух словах написать, как восстанавливали импорт?

...в принципе,как описано в статьях.Потом в ImpRec'е правда пришлось долго руками мусор вычищать(cut thunks, delete thunks).Дампил с помощью LordPE в том месте,где мы заканчиваем разбираться с импортом:

call [eax]
popad ; <-- тут

В общем,всё стандартно.Приложу свою IAT.

Попробуй сделать дамп LordPE.У меня было пару случаев,когда PETools криво снимал дамп.

У меня есть вопрос.Когда-то давно кто-то на форуме объяснял,как можно зарегистрировать программу,защищённую ASProtect'ом,найдя определённую сигнатуру в файле и изменив там один байт(00 на 01).
Может сейчас кто-нибудь это прокомментировать??

91bc_22.07.2007_CRACKLAB.rU.tgz - dcmonitor_IAT.rar

-----
the Power of Reversing team




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 22 июля 2007 16:17 · Поправил: tempread
· Личное сообщение · #14

Замучался уже, все никак не получается самому распаковать

Сверил приложенную таблицу с IAT с той что у меня - у меня на одну функцию меньше... Ладно, беру Ваш IAT, накладываю на свой дамп - та же ошибка. Делаю дамп LordPE - ошибка все та же
Я делаю дамп находясь на OEP...

Не совсем понял где находится:
call [eax]
popad ; <-- тут

Нашел функцию,где импорт заполняется, и после заполнения последней ячейки пробовал дампить - ошибка все та же

Пробовал дампить и OllyDump (находясь на OEP) - такая же ошибка, как и в других случаях

Еще раз статьи поперечитывал..Ничего нового вроде не вычитал... Может у меня опции програм не так стоят? Проверьте,пожалуйста, выше я приводил настройки PETools, вот настройки ImpRec:
Стоят галочки:
Create New IAT
Fix Ep to OEP
Enable Debug Provilege (NT,2K,XP)
Use PE header from disk

Настройки LordPE:
Стоят галочки:
Paste header from disk
Full Dump: Fix header
Realign file
WipeRelocation
Rebuild ImportTable
Validate PE




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 22 июля 2007 17:15 · Поправил: DillerInc
· Личное сообщение · #15

Попробуй убрать галку "Create new IAT" из ImpRec'а,т.к. во-первых это ни к чему в данном случае,а во-вторых кто-то однажды писал на форуме,что ImpRec неправильно обрабатывает эту опцию.

В LordPE вроде всё также.
tempread пишет:
Не совсем понял где находится:
call [eax]
popad ; <-- тут

...читай статью от -= ALEX =-, например.

-----
the Power of Reversing team




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 22 июля 2007 21:32 · Поправил: tempread
· Личное сообщение · #16

Ура! Получилось!
Вся проблема была в галочке "Create new IAT". Как только снял - старая проблема пропала... Но появилось новая: об ошибке доступа от борландовской библиотеки, и когда я нажал ok,программа запустилась! Поизучав сдапленную програму в Оле, нашел откуда ошибка выскакивает: указатели на несуществующую память передается функции @System@@LStrFromPChar$qqrr17System@AnsiStringpc>,где и происходило исключение(два раза были исключения).


В запакованной программе один раз передается пустая строка, а второй раз - "l4QbcADQFoU="(без кавычек). Никто не подскажет, что закодировано(и каким алгоритмом) во второй строке? (возможно строка "Unregistered" ?)

Когда я подставил указатели на существующие строки в распакованой программе, она запустилась без ошибок, в About написано, что "зарегистрировано на", и строку(которую я дважды подставлял). Никаких напоминаний и указаний о триале нигде нет.

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



Ранг: 72.7 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 22 июля 2007 21:52
· Личное сообщение · #17

tempread на А как собственно искать "свободный кусок памяти"? промотай в конец секции кода там непременно будет участок с достаточным числом нулей(для записи строки).

Вот кратенький фрагмент участка скрипта, который я модефицирую:

FIND nastroika,#000000000000000000000000000000000000# //ищем достаточно нулей с некоего адреса
cmp $RESULT,0
je @sorry
...
... //какие то действия
@sorry: // а сюда на тот невероятный случай если нулей не найдено в достаточном количестве.
eval "Вижу ошибку адресации IAT по адресу {nastroika}, но не могу найти достаточно свободного места, чтобы исправить!"
msg $RESULT



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 22 июля 2007 22:04 · Поправил: tempread
· Личное сообщение · #18

А разве не може быть ситуации, что код что-то будет писать в эти нули?(т.е. случай,когда это не просто результат выравнивания секции) Или этого почти никогда не бывает?




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 22 июля 2007 22:55
· Личное сообщение · #19

tempread
Скажи мне адрес,где вызывается эта функция,которой ты передаёшь свои указатели.Странно,что у меня никаких ошибок не выдаёт
tempread пишет:
А разве не може быть ситуации, что код что-то будет писать в эти нули?

...дело в том,что код в секции кода имеет строго определённый размер, т.е. сколько его написал программист.Это логично.
Остальное пространство в конце секции,занимаемое нулями,это есть выравнивание секции.Туда по идее ничего не может быть записано.

К тому же можно учесть тот факт,что секция кода при нормальных условиях имеет права доступа только для чтения и исполнения.Это явно предотвращает попытку записи в неё.

-----
the Power of Reversing team




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 23 июля 2007 00:26
· Личное сообщение · #20

Я указатель передаю не сразу функции LStrFromPChar, а чуточку раньше, в функции самой програмы(а она уже запустит LStrFromPChar):
Я использовал свой дамп,и Ваш IAT. Мой дамп чуточку по другому работает чем Ваш... Ваш показывает -1 день осталось до окончания триала, а мой молчит.
Итак, адреса функций:
VA: 40d226
и
VA: 40d8e4

В регистре DX - указатели на строки, полученные из ds:[542ef4] и ds:[542f08] соответственно.




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 23 июля 2007 11:49
· Личное сообщение · #21

tempread
Спасибо.Подставил свой указатель в первом случае и увидел своё имя в About, плюс программа перестала показывать окошко "Reminder".
Немного не понял насчёт второго варианта.Там чуть выше по коду передаётся указатель на строку "Ranking monitor".Может тогда где-то должна показыватся строка "Standart, ... Edition" ...?
Я подставил указатель на строку "Expert Edition", но нигде подобной строки не показалось...

-----
the Power of Reversing team




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 23 июля 2007 15:47
· Личное сообщение · #22

Шифрованная строка присутствует и в других екзешниках,например в loganalyzer.exe она равна "jiZ1+ABwM9Q=". Может,насчет типа версии догадка и верна,но наверное, надо не просто подставлять строку, а как-то шифровать ее...



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 23 июля 2007 21:03
· Личное сообщение · #23

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

Входные данные: файлик с джампами(переходники на функции,просто копирую с окна OllyDbg), и файл ImpRecovera(сразу после GetImport,без скана).
Скриптик смотрит,какие есть переходники, и оставляет в файле Imprecover'a только те записи,на которые были переходники.

Потом я полученный файлик загружаю в ImpRec, и уже мучаю до конца,точно зная, что все что там есть нужно обработать.

Тогда мне скриптик не помог, и я о нем подзабыл. А вот сейчас, когда помогли разобраться с проблемой, я вспомнил о скриптике. Только что проверил - работает... Так вот, вопрос вот в чем, можно ли применять данную методику очистки импорта или нет?



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 31 июля 2007 22:23
· Личное сообщение · #24

В общем, дальше все екзешники из этого програмного пакета поломались без проблем, тему закрываю.


 eXeL@B —› Вопросы новичков —› Проблема с ASProtect 1.23 RC4 - 1.3.08.24 [1]
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати