Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Вопросы новичков —› ASProtect 1.23 RC4 Demo почти повторение
Посл.ответ Сообщение

Ранг: 105.9 (ветеран)
Статус: Участник

Создано: 13 июня 2007 13:13 New!
Цитата · Личное сообщение · #1

Была тут недавно тема, где один товарищ просил помочь распаковать ASProtect 1.23 RC4. А потом то ли распаковал и отвалил, то ли не смог и плюнул. В общем тема уползла в историю. А я чего-то увяз на этой проге и четвертый день ковыряюсь с ней, обложившись туторами.
Stripper ее не берет. Распакованная прога вываливается с ошибкой (это вроде вышеупомянутый товарищ уже сообщал).

Как я понял crc1 ковырялся с этой прогой, и не без успеха. Может подскажешь? Хотя если еще кто-нибудь поможет буду только рад.


[url=http://www.softnew.ru/process.phtml?action=load&id=6884&mirror=0& PHPSESSID=639c33b50bcd1fc7453d91f1d1a0f63b]Remote Desktop Control 1.8 1.4Mb[/url

crc1 давал ссылку на тутор.

[quote]Тутор по адресу hack4joy.narod.ru/crack/arc4/arc4.htm один в один с этой прогой.[/quote]
Я бы так не сказал.
Значит, что я сам сделал. Ничего не получилось, правда, но все же опишу, может быть кто-то укажет на мои ошибки.

Ищем ОЕР. По пути занопил magic CALL (кстати раньше не знал про такую штуку). А вот дальше не сходится, хотя это может у меня руки кривые. Ставим hr esp-4, и, по статье от ALEXa, должны брякнуться три раза. У меня получается бряк только один раз, а потом прога запускается. Ну да ладно, мы пойдем другим путем(с).

До ОЕР дошел проще. Дошел до последнего исключения. Мемори бряк на секцию кода и трассируем.


Попадаем на адрес 00406D54-FF2574224C00 JMP DWORD PTR DS:[4C2274]. Поначалу тоже думал, что это ОЕР, но после прочтения туторов догнал, что это прыжок на эмуляцию GetModuleHandleA.

Выходим по РЕТ из эмуляции GetModuleHandleA. Проходим код по Ф8 по пути записывая ЕАХ (типа из спертых байтов)

еах=004BC2D4

Выходим по РЕТ на настоящую ОЕР.

004BC612 00 DB 00
004BC613 . E8 3CA8F4FF CALL apc_Admi.00406E54
004BC618 . 33C0 XOR EAX,EAX <-выходим здесь
004BC61A . 55 PUSH EBP

Выше адреса 004BC612 расположены 23 ноля. Соответственно 23 спертых байта?

Опять же вопрос: где снимать дамп? В разных статьях советуют снимать то на ОЕП, то на джампе в GetModuleHandleA. Попробовал и там, и там.

Восстанавливаем импорт. Запускаем ИмпРек (что характерно). ОЕР = BC618, размер ставим 1000. Восстанавливаем нераспознанные функции с помощью Trace Level1(Disasm). Все что не распозналось отрезаем нафиг.

Фиксируем импорт.

Спертые байты. Тут засада. Следуя туторам, попадаю в код, замусоренный настолько, что с непривычки разобраться в нем не могу. Начинаются эти сперты байты с мусором с такого кода:
00A36E71 61 POPAD
00A36E72 /EB 02 JMP SHORT 00A36E76
00A36E74 |CD20 F2EB010F VxDJump F01EBF2
00A36E7A 83EC 39 SUB ESP,39

То ли это место, что нужно? И как выковырнуть отсюда правильные байты? Пока, для пробы, взял байты приведенные crc1. Попробовал вписать. Поменял Entry Point.

Итог: прога падает на обращениях к несуществующим адресам. Причем таких мест очень много, так что просто занопить их все нет возможности.
Я понимаю, что туторов по Аспру хоть пруд пруди, и желания разжевывать каждую отдельную прогу ни у кого нет. Но может быть кто-то уже распаковывал эту прогу и сможет помочь?



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

Создано: 13 июня 2007 15:19 · Поправил: Small_S New!
Цитата · Личное сообщение · #2

Sturgeon прогу не смотрел я на работе и ещё долго буду, по верхам. На Восстанавливаем нераспознанные функции с помощью Trace Level1(Disasm). Все что не распозналось отрезаем нафиг.

Когда восстанавливаю импорт после Аспра обязательно кроме Trace Level1(Disasm) восстанавливаю повреждённые Аспром переходники плугом для импректа ASProtect 1.23(так кажется зовётся). Приду домой если раньше не найдёшь приаттачу. Причём плуг ASProtect 1.22 не подходит(делает ошибки) из за этого часть функций не распознаётся.

В мусорном коде, как правило содержится, самое начало проги присущее тому или иному компилятору. Попробуй в DIE загнать прогу прям запакованную и посмотри на чём написано, возьми несколько вариантов начал для скажем С и сверяй.

Судя по приведённому куску там в спёртой части нужно идти обратным трассированием(я надеюсь ты туда по трассировке попал?) по клавише - минус, уже подзабыл, давно 1.23 RC4 не ковырял. Ну а как в начале мусорного кода окажешся иди по шагу вперёд и смотри переходы будут приводить к визуальному изменению кода. У тебя это место совсем другим будет:
00A36E74 |CD20 F2EB010F VxDJump F01EBF2
00A36E7A 83EC 39 SUB ESP,39
совершенно другим.
(видишь прыг не нормально на следующую команду, а между двумя командами JMP SHORT 00A36E76)
Такой дрянью вся секция выделенной памяти под VM в старших версиях аспра забита(всё плывёт при каждом шаге, модефицируется, куча байт пропускаются и по сути являются мусором и к тому же даже многие из тех команд, что выполняются ничего не делают Например SUB EAX, INC EAX).

Вот аттачу всем известный плагин. Сунь длл в папку с плагинами импректу.



Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 13 июня 2007 16:24 New!
Цитата · Личное сообщение · #3

Sturgeon
В версии 1.23 RC4 мусорный код проходишь по F7, за исключением одного CALL'a
00B97AAC CALL 00B97A27 тут F8
00B97AB1 POPAD
00B97AB2 JMP SHORT 00B97AB6
00B97AB4 INT 20
00B97AB6 PREFIX REPNE:
00B97AB7 JMP SHORT 00B97ABA

Дальше идешь по F7 и внимательно смотришь и увидишь спертые команды
00B97B20 PUSH EBP
00B97B21 MOV EBP, ESP
00B97B23 SUB ESP, 18 ; заменить на ADD ESP, -18 (три байта)

При выходе из мусорного кода на RET в EAX будет нужное значение (004BC2D4)
Всего в данной проге своровано 11 (dec) байт
004BC608 PUSH EBP ;OEP
004BC609 MOV EBP, ESP
004BC60B ADD ESP, -18
004BC60E MOV EAX, 004BC2D4

Импорт: Trace Level1(Disasm), после него нужен плугин, или руками. Возможно неверно восстановится
ф-я LoadLibrary. Остальное допишу завтра
Вот распакованный rapidshare.com/files/36949947/dump.rar.html



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

Создано: 13 июня 2007 18:12 New!
Цитата · Личное сообщение · #4

Млин. На исправлении не аттачится. Вот.

{ Атач доступен только для участников форума } - ASPR_1.23-ImpREC_Plugin.dll



Ранг: 105.9 (ветеран)
Статус: Участник

Создано: 14 июня 2007 00:30 New!
Цитата · Личное сообщение · #5

crc1 Спасибо! Со спертым ОЕР разобрался. Меня сильно смущало то, что нолей на настоящем ОЕР было 23.
Small_S
Как я понял, в AsprRC4 несколько хитрее прячется ОЕР, чем в более ранних версиях. Т.е. обратной трассировкой я пробовал найти байты, но не получилось. Уж очень много мусора, да и непривычно в первый раз.
С импортом буду завтра с утра заморачиваться, а то уже поздно очень. Плаг к импреку у меня есть, спасибо. У меня вроде весь импорт восстановился, а отрезал я явный мусор (или это мне кажется что мусор:-\)
2 crc1 А ты Magic Call нопил или нет? Насколько это вообще нужно? И дамп где снимал? На ОЕР или на джампе?

З.Ы. Долбаный Аспр! Уж сколько написано про него, а все равно с каждой отдельной прогой какие-то заморочки. Неожиданно возник вопрос. Здесь на форуме на двадцать вопросов об Аспре приходится один-два вопроса об Армадилло или Екзекрипторе. Неужели Аспр сложнее снять чем Арму или Криптор? Или просто они более стандартные? Сам я пока не берусь снимать такие проты, но в ближайше время хочу попробовать научиться снимать хотя бы ранние версии.



Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 14 июня 2007 09:09 New!
Цитата · Личное сообщение · #6

Sturgeon
Приношу извинения, вчера поспешил с крадеными байтами. Их действительно 23 (dec) шт
00B97180 PUSH EBP
00B97181 MOV EBP, ESP
00B97183 SUB ESP, 18 ; заменить на ADD ESP, -18 (три байта)
00B97189 JMP SHORT 00B9718C ; это мусор
00B9718B NOP ; это мусор, я поменял на ноп
00B9718C PUSH EBX
00B9718D XOR EAX, EAX
00B9718F MOV DWORD PTR SS:[EBP-10], EAX
00B97192 MOV DWORD PTR SS:[EBP-18], EAX
00B97195 MOV DWORD PTR SS:[EBP-14], EAX

OEP == 004BC5FC
Дамп снимай как только распаковалась секция кода, (но можно на OEP)
Magic Call можно не нопить, плагин ASPR_1.23 нормально восстанавливает импорт, за исключением ф-ии
LoadLibraryA (путает с GetModuleHandleA) (может только у меня?)
Если прога падает на обращениях к несуществующим адресам, забей нулями третью секцию
Тут нормально распакованный файл
rapidshare.com/files/37103825/dump.rar.html



Ранг: 105.9 (ветеран)
Статус: Участник

Создано: 14 июня 2007 11:45 New!
Цитата · Личное сообщение · #7

Твой дамп замечательно работает. А у меня снова жопа
Пробовал сравнивать побайтно два файла (твой и мой). Совершенно одинаковые, за исключение небольших отличий в адресах таблицы импорта.
Мой файл первый раз падает по следующему адресу:

004021E9 > \C1F8 02 SAR EAX,2
004021EC . 8B15 8C144C00 MOV EDX,DWORD PTR DS:[4C148C]
004021F2 . 8B5482 F4 MOV EDX,DWORD PTR DS:[EDX+EAX*4-C] <- Здесь Memory violation
004021F6 . 85D2 TEST EDX,EDX

Хотя твой файл выполняет этот код без проблем.
Может быть это связано как раз с неправильным распознаванием LoadLibraryA? Я просто не знаю как узнать правильно она определилась или нет.
Вот мой нерабочий (к сожалению) дамп

slil.ru/24511811



Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 14 июня 2007 16:21 New!
Цитата · Личное сообщение · #8

00405A22 MOV DWORD PTR SS:[EBP-8], EAX
00405A25 PUSH 00405B94 ; ASCII "kernel32.dll"
00405A2A CALL <JMP.&kernel32.GetModuleHandleA> Должно быть LoadLibraryA
********************************************************************** ********
0040D440 PUSH EBX
0040D441 PUSH 0040D478 ; ASCII "kernel32.dll"
0040D446 CALL <JMP.&kernel32.GetModuleHandleA> Аналагична


Sturgeon пишет:
004021F2 . 8B5482 F4 MOV EDX,DWORD PTR DS:[EDX+EAX*4-C] <- Здесь Memory violation

crc1 пишет:
забей нулями третью секцию




Ранг: 105.9 (ветеран)
Статус: Участник

Создано: 14 июня 2007 20:18 New!
Цитата · Личное сообщение · #9

По поводу восстановления LoadLibraryA.
Когда я в Импреке восстанавливаю импорт, каким образом можно определить, что функция восстановилась неправильно? Допустим, что теперь я знаю, что функция LoadLibraryA может восстановиться как GetModuleHandleA. Но как из восьми функций GetModuleHandleA опознать те, которые должны быть на самом деле LoadLibraryA?

crc1 пишет:
crc1 пишет:
забей нулями третью секцию

В смысле секцию .adata? Только теперь доперло. А то я по недалекости своей забивал нолями третью по счету, то есть секцию после .code. А если ее отрезать вобще нафиг? Сейчас попробую...



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

Создано: 14 июня 2007 22:38 New!
Цитата · Личное сообщение · #10

Sturgeon на Но как из восьми функций GetModuleHandleA опознать те, которые должны быть на самом деле LoadLibraryA?
так запусти дамп в оле и когда упадёшь смотри в окно стека, там обычно такая верхняя строка:
адрес такой то из(from) от туда то запоминаешь откуда и перегружаешь Олю.
Контрал +G и переходишь по этому адресу и смотришь почему падает(это как бы общий алгоритм).

А в случае с неправильно распознанной функой

1) Смотриш в центральное окно CPU и видишь вызов АПИ на котором падает например(это первая попавшаяся прога)
00402442 |. 2E:FF15 BCD08000 CALL DWORD PTR CS:[<&gdi32.SetTextColor>] ; \SetTextColor
Вот этот вызов берет из секции где таблица ИАТ по адресу BCD08000 нужный адрес АПИ функи
точнее это адрес 0080D0BC (знаешь наверное что адреса читаются в памяти справа налево побайтно).
То же самое(контрал +G) в окне дампа и туда этот адрес (0080D0BC) у тебя там так же перевернуто будет

0080D0B8 >77F1B4F7 чґсw GDI32.SetPixel
0080D0BC >77F15D97 —]сw GDI32.SetTextColor==========вот она
0080D0C0 >77F1BAF2 тєсw GDI32.StretchBlt
0080D0C4 >77F17EE5 е~сw GDI32.TextOutW

меняешь режим на HEX/UNICOD(16bytes) этот режим Long, в нём удобно смотреть, но вбивают изменения в хексе, как обычно выделил перешёл в хекс режим пробел клавиша и вбиваешь нужный адрес АПИ какая тебе нужна. И сохраняешь изменения в дампе.

Ну и всё запускаешь по новой, если упал там же то не угадал нужно вернуть на родину как было, если упал позже то повторяешь маневры.

Вот тебе прога(не помню откуда качал), она по имени функи определяет её адрес на твоёй системе. См аттач.


{ Атач доступен только для участников форума } - прога для определения API адрессов на этом компе у любой функции.rar



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

Создано: 15 июня 2007 04:15 New!
Цитата · Личное сообщение · #11

Сорри, совершил описку вчера по усталости. В предыдущем посте читай не
"Ну и всё запускаешь по новой, если упал там же то не угадал нужно вернуть на родину как было, если упал позже то повторяешь маневры. "
а значит не угадал и есть ещё какой то вариант (АПИ вообще какая то вызывается другая).
Пост побоялся править, иногда аттачи после правки слетают.



Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 15 июня 2007 07:55 New!
Цитата · Личное сообщение · #12

Sturgeon пишет:
Но как из восьми функций GetModuleHandleA опознать те, которые должны быть на самом деле LoadLibraryA?

При восстановлении импорта после аспра я иногда натыкался на грабли, когда Импрек вместо LoadLibraryA
определял GetModuleHandleA. Если библиотека отображена в адресном пространстве вызывающего процесса, то все ОК, GetModuleHandleA вернет дискриптор библы. А если библиотека еще не загружена?
Тогда произойдет ошибка. Т.е. в такой конструкции
00405A25 PUSH 00405B94 ; ASCII "kernel32.dll"
00405A2A CALL <JMP.&kernel32.LoadLibraryA>
00405A2F MOV EBX, EAX
00405A31 TEST EBX, EBX
00405A33 JE SHORT 00405A75
00405A35 PUSH 00405BA4 ; ASCII "GetLongPathNameA"
00405A3A PUSH EBX
00405A3B CALL <JMP.&kernel32.GetProcAddress>

лучше LoadLibraryA (она загрузит dll и вернет дискриптор), потому что вместо kernel32.dll может быть имя библы, еще не загруженной в контекст проги.
Третья секция это не .adata, а третья сверху она без названия, начинается с адреса 004С1000
Тут это обсуждалось
http://exelab.ru/f/index.php?action=vthread&topic=6624&forum=1&page= -1



Ранг: 105.9 (ветеран)
Статус: Участник

Создано: 15 июня 2007 08:03 New!
Цитата · Личное сообщение · #13

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



Ранг: 105.9 (ветеран)
Статус: Участник

Создано: 15 июня 2007 17:52 · Поправил: Sturgeon New!
Цитата · Личное сообщение · #14

2 [crc1] Чего то я туплю
Забил нолями секцию, а прога все равно падает. Только теперь на другой ошибке:
00403CD8 > \F0:FF42 F8 LOCK INC DWORD PTR DS:[EDX-8] ; LOCK prefix
00403CDC > 8710 XCHG DWORD PTR DS:[EAX],EDX <-Access violation
00403CDE . 85D2 TEST EDX,EDX

Может это праблы с неправильным дампом? Если есть свободное время и если не трудно, не мог бы ты посмотреть мой дамп (приаттачен выше). Можно ли из него сделать правильно работающий?



Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 16 июня 2007 23:26 New!
Цитата · Личное сообщение · #15

Со slil.ru скачать не могу и че толку если я сделаю твой дамп рабочим. Ты сам разберись.
Кароче
Тормознись тут
00B332B0 MOV EAX, DWORD PTR SS:[EBP+C]
00B332B3 PUSH EAX
00B332B4 CALL 00B32F00
00B332B9 CALL 00B3313C ; как ты называешь Magic Call
иди до RET

00B3354D POP EBX ; Выйдешь сюда
00B3354E JMP SHORT 00B3351E
00B33550 POPAD ; сюда ставь бряк что бы пройти цикл и F9
00B33551 CALL 00B33590 ; тут жми F7
00B33556 PUSH 0B3355F
00B3355B INC DWORD PTR SS:[ESP]
00B3355E RETN

дойдешь до сюда
00B3359C MOV DWORD PTR FS:[EAX], ESP
00B3359F XOR DWORD PTR DS:[EAX], EAX ; SEH
00B335A1 JMP SHORT 00B335A4 ; сюда бряк и Shift+F9
чуть ниже будет код
00B335FC PUSHAD
00B335FD PUSH 0B363AC
00B33602 LEA EAX, DWORD PTR SS:[EBP-C]
00B33605 PUSH DWORD PTR DS:[B37AA4]
00B3360B CALL DWORD PTR DS:[EAX]
00B3360D POPAD ; тут снимай дамп, т.к. секция кода распакована и IAT заполнена

Восстанавливай импорт, Trace Level1(Disasm) + ASPR_1.23-ImpREC_Plugin.dll, все API восстановятся
На LoadLibraryA (в данной проге)не обращай внимания, прикручивай спертые байты, правь OEP
ВСЕ, 10 минут работы. Только что проделал все вышесказанное, дамп пашет
Я тебе пересказал статью Alex'a. Ты наверн плохо ее читал Найди хоть одно отличие(кроме адресов)



Ранг: 105.9 (ветеран)
Статус: Участник

Создано: 18 июня 2007 10:35 New!
Цитата · Личное сообщение · #16

crc1
Приношу свои извинения за глупые и истеричные вопросы. Все праблы как обычно были следствием собственной невнимательности Неправильно вписывал спертые байты.
Разобрался, слава Богу!
Огромное спасибо за помощь, советы и терпение!


 eXeL@B —› Вопросы новичков —› ASProtect 1.23 RC4 Demo почти повторение

Видеокурс ВЗЛОМ