Сейчас на форуме: zds, -Sanchez- (+9 невидимых)

 eXeL@B —› Протекторы —› Распаковка AsProtect >1.23 - от А до Я.
<< . 1 . 2 . 3 . 4 . 5 . >>
Посл.ответ Сообщение

Ранг: 384.1 (мудрец)
Активность: 0.250
Статус: Участник
www.int3.net

Создано: 18 августа 2005 11:56 · Поправил: nice
· Личное сообщение · #1

Эта тема по распаковке AsProtect'a последних версий, для надругательств выбрана программа: AlfaClock 1.82
сайт программы: www.alfasoftweb.com/rus/
прямая ссылка: www.alfasoftweb.com/rus/AlfaClock_rus.exe

В этот раздел можно постить всё что касается защиты в этой программе, а также скрипты для распаковки, утилиты для снятия, ссылки на статьи.

За флейм будем наказывать!

Нашел ОЕР inferno_mteam
004C5444 55 PUSH EBP
004C5445 8BEC MOV EBP,ESP
004C5447 83C4 C0 ADD ESP,-40
004C544A 53 PUSH EBX
004C544B 33C0 XOR EAX,EAX
004C544D 8945 D4 MOV DWORD PTR SS:[EBP-2C],EAX
004C5450 8945 D0 MOV DWORD PTR SS:[EBP-30],EAX
В Ольке можно быстро попасть на ОЕР сл. образом, открываем программу, жмем Ctrl+G (перейти на строку) вбиваем туда ОЕР=04С5444, правой кнопкой мыши: Breakpoint->Hardware, on execution
после чего отключаем все Exceptions: menu->Options->Exceptions и ставим все галочки, .теперь нажите F9 и вы на ОЕР

-----
Подписи - ЗЛО! Нужно убирать!




Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 03 октября 2005 02:28
· Личное сообщение · #2

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



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 03 октября 2005 02:50
· Личное сообщение · #3

Посмотрел, действительно имеет мето смена. Прыжёк отвечающий за смену находится по адресу ....6F44, в данном случае он происходит ещё и при усановке флага "С" и "Z" одновременно.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 03 октября 2005 07:49
· Личное сообщение · #4

На досуге решил попробовать распаковать Advanced Archive Password Recovery 3. Смотрю, а импорт там уже по другому восстанавливать надо и по мимо FF15 и FF25 есть ещё callыVM и все они на одно лицо, сейчас пытаюсь разобраться кто есть кто. FF25 видно из далека они все в низу, а с остальными пока проблема. Если заентересуешся ссылка на прогу есть в одноимённом топике на форуме. Что касается IAT то сейчас часть скрипта выглядит примерно так :
@reconstruct:
mov OEP,eip
bp VirtualAllocAddr
run
mov temp, esp
add temp, 40
mov realfunction, [temp]
run
mov temp, esp
add temp, 2C
cmp realfunction, [temp]
je ee
add temp, 40
mov realfunction, [temp]
ee:
bc VirtualAllocAddr
mov eip,OEP// здесь соответственно адреэтого кела
bp OEP
run
bc OEP
Однко какую прогу не возьми практически везде подходы разные. Однако плодовитый товарищ Солодовников.



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 03 октября 2005 20:21
· Личное сообщение · #5

Да мне хотелось бы закончить начатую прогу. Я разобрался, почему в некоторых Call VM скрипт выдает неправильный адрес возврата. Но пока не знаю, как это исправить. Если не разобраться в принципе формирования адреса возврата, то получение адреса возврата из ВМ возможно только при прохождении кода, т.е в динамике. Статическое сканирование кода (как мы делали ранее) приводит к не всегда верным результатам. В принципе, используя уже существующие наработки, можно и в ручную. Но уж больно долго.
У меня есть вопрос, я уже ранее его задавал, но никто не среагировал. Как в Олли посмотреть в динамике
изменение какой-нибудь локальной переменной (или нескольких)? Почему у меня не получается привести
диссасемблерный текст программы к виду, например: Mov [eax],[Local.35]. При этом, необходимые крыжики в опциях стоят. Делал анализ кода (use все три опции), ничего не меняется.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 03 октября 2005 23:21
· Личное сообщение · #6

Я тоже не дождался подсказки по формированою правельного смещения. Да делал в ручную и pushы переделывал и прикрутил к файлу, не надо в память подгружать, а вот адреса селлов пришлось переписывать, а так не плохо получилось( селлы у меня только там где были пуши, остальные джампы), но гдето вкралась ошибка, а перелопачивать это сного не хочу.
А вот и о Advanced Archive Password:
Похоже здесь всё очень просто, восстановили импорт нижние идущие подряд FF25, все остальные FF15. Только одно но, после некоторых Сall [ addr IAT] появляются нелепые инструкции типа PS, ?? и т.д. и для того чтобы вернуть всё к удобочитаемому варианту необходимо первый байт после Сall [ addr IAT] изменить #90# и всё вернётся на круги своя. Вот вообщем и вся распаковка, прога прекрасно работает. Спасибо ребятам с одноимённого топика за нужные байты. Давно хотел заиметь подобную прогу, а то на предыдущую версию терпения не хватило.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 04 октября 2005 01:46
· Личное сообщение · #7

Может ещё, что нибудь попробуем?




Ранг: 303.7 (мудрец), 4thx
Активность: 0.190
Статус: Участник
tPORt Manager

Создано: 04 октября 2005 03:20
· Личное сообщение · #8

Млин, берите скрипт от sanniassin для восстановления вм и исследуйте его работу....



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 04 октября 2005 03:27
· Личное сообщение · #9

А где взять скрипт от sanniassin .



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 04 октября 2005 06:21
· Личное сообщение · #10

SergSh пишет:
необходимо установить флаг Z=0, а второй раз Z=1 и если возвращённые оба раза значения

Это ты ранее писал. А изменение значения какой переменной контролирует флаг ZF? Как ты разводил
один вызов Call 013А0000 по разным адресам возврата?



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 04 октября 2005 07:46 · Поправил: SergSh
· Личное сообщение · #11

После обнаружения разницы возвращаемых адресов я делал так: ниже, в этом куске памяти, есть достаточно места поэтому я заменял CALL 013A0000 на JMPв низ, а там JNZ addr 1 и JMP addr2 соответственно.
Да спасибо Bit-hack за скрипты.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 05 октября 2005 03:49
· Личное сообщение · #12

Нашёл про адреса. Вот накропал пока замену Pusha c Celloм попробуй вроде робит. Осталось разобраться со смещениями при возврате с адресом Cell из проги:
var x
var ak
var y
var puh
var cal

mov x, eip
mov y, eip
sub eip,5
mov ak,[eip]
and ak, 000000ff
cmp ak,00000068
jne kon
add eip,1
mov puh,[eip]
mov cal, 13A0000
add x,5
sub puh,x
mov ak,puh
and puh,0000ff00
add puh,3
cmp puh,0
sub puh,3
je kor
mov eip,y
mov [eip],E9
add eip,1
and [eip],ffff0000
add [eip],ak
jmp DAL
kor:
mov eip,y
mov [eip],EB
add eip,1
mov [eip],90909000
add [eip],ak
jmp DAL
DAL:
mov eip,y
sub eip,5
mov [eip],E8
sub cal,5
sub cal,eip
add eip,1
mov [eip],cal
pause
kon:
ret



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 05 октября 2005 06:14
· Личное сообщение · #13

SergSh пишет:
Нашёл про адреса

Ты хоть бы писал, что прежней проге вернулся. А то ведь не понять с ходу, что ты делаешь. У меня ведь немного другой подход, я эти Pushи не трогаю пока. И вообще, я зарылся в обнаружение функций с двумя адресами вовзрата (в зависимости от флага Z). Идет очень сложно, делаю пока в ручную. В скрипте
реализовать его не получилось. В одной из функций флаг поменялся через примерно 20-й цикл прохождения через функцию. А в других он не меняется. Пока попадаются ошибки, связанные как раз с этими двуликими функциями.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 07 октября 2005 00:14
· Личное сообщение · #14

Уважаемые, подкажите пожалуйста как из скрипта можно воздействовать на регистр флагов. Команды скрипта его не именяют, может есть возможность как-то воздействовать на него по другому.



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 07 октября 2005 02:14 · Поправил: tar4
· Личное сообщение · #15

Ты хочешь менять значение флага в проге через скрипт или использовать его значение для условных переходов в тексте скрипта?



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 07 октября 2005 02:50
· Личное сообщение · #16

Да но что-то не выходит. Осталась только эта проблема.



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 07 октября 2005 05:14
· Личное сообщение · #17

Может тебе поможет. У меня в скрипте была проблема, связанная с тем, что он не реагировал на изменение значения флага (0 или 1). Я решил ее просто. Изменение флага продублировал изменением некой переменной. Ну, которую сам создал. И сравнивал, не возвращаемое значение флага, а значение переменной. Вроде работало. А в причине не стал разбираться. У меня вообще сложилось впечатление,
что в скриптовом алгоритме достаточно много глюков (Это только мое мнение).




Ранг: 328.7 (мудрец), 73thx
Активность: 0.170.01
Статус: Участник

Создано: 07 октября 2005 15:05
· Личное сообщение · #18

а где сухой остаток? от всего раннеесказанного



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 07 октября 2005 23:35 · Поправил: tar4
· Личное сообщение · #19

r99 пишет:
а где сухой остаток? от всего раннеесказанного

Остаток еще пережевывается (т.е. пишется).



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 08 октября 2005 01:37
· Личное сообщение · #20

Я, по-видимому, подошел к распаковке 2-й части проги. В ней адреса входа и выхода из ВМ уже другие. Сразу не понял, потерял время. Хочу пройти пока вручную, а уже потом пытаться как автоматизировать эту работу. Слишком много нюансов. Адрес возврата из функций меняются не только по факту изменения флага Z в последовательности (сначало 0, затем 1), а так же есть случаи и наоборот. То есть, может быть 1, затем 0, затем снова 1.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 08 октября 2005 06:32
· Личное сообщение · #21

Согласен, с флагами основная заморочка и есть. Не забывай, что там есть ещё и 3-й кусок где меняются все адреса.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 09 октября 2005 09:35
· Личное сообщение · #22

Кажись разобрался в прыжках. Всё оказалось довольно просто. Происходит так:
До прыжка по JMP [esp-4] есть такой код
....6F44 JB ....6F58
....6F46 JE ....6F85
....6F48 DEC AL
....6F4A JE ....6FD2
.....................
.....................
....7006 JE ....701F- меняя условный переход в этом месте добиваемся смены в JMP [esp-4].
.....................
.....................
....6F65 JNZ ....6F77- если этот переход не происходит то в JMP [esp-4] адрес из проги. Адрес из проги будет возвращён только когда перед CALL 013A0000 будет PUSH addr. Из этого делаем вывод, что если есть PUSH addr, то CALL 013A0000 не надо проходить дважды. Если же этот переход происходит то JMP [esp-4] то -же сменится, т.к. установлен флаг "С", но меняя переход по ....7006 мы добьёмся такого-же результата не зависимо от того установлен флаг "С" или нет. Завтра попробую реализовать.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 10 октября 2005 23:06
· Личное сообщение · #23

Придумал как осуществить автоматический поиск CALL 013A0000. Их надо искать не по названию, как это делалось ренее, а по смещению. Примерно так:
@continue:
mov filesecend, 13A0000
findop startscan, #E8# //Ищем оп-код call`а
mov startscan, $RESULT //Сохранили адрес найденного байта
mov temp,$RESULT
sub filesecend,temp
sub filesecend,5
add $RESULT,1
cmp [$RESULT],filesecend
jne @continue
Идея заключается в том, что после нахождения #E8#, рассчитывается смещение изходя из предположения, что по этому адресу находится CALL 013A0000 и затем полученное смещение сравнивается с тем которое действительно там находится и соответственно делается вывод. Это прекрасно работает правда 4 CALL 013A0000 не видит, их соответственно в ручную. Либо можно прогнать поиск ещё раз.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 11 октября 2005 03:25
· Личное сообщение · #24

Немного усовершенствовал автопоиск сейчас работает безупречно и находит все CALL 013A0000
@continue:
cmp startscan,endscan //endscan-адрес последнего CALL 013A0000
je @endscript
findop startscan, #E8# //Ищем оп-код call`а
add startscan,1
mov temp,$RESULT
sub filesecend,temp
sub filesecend,5
add $RESULT,1
cmp [$RESULT],filesecend
mov filesecend, 13A0000//13A0000-соответственно искомый CALL
jne @continue



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 12 октября 2005 10:00
· Личное сообщение · #25

SergSh
в ДАМПЕ после стека идет участок памяти 0130000 (размером 29000). Но в оригинале этом участок имеет
указанный размер только на ЕР. В дальнейшем он увеличивается до 2D000 (на 1-ом исключении), а на VOEP - уже размером 2Е000. В конце проги идет обращение к добавленному участку памяти. В принципе, можно эту секцию сдампить и прикрепить к новой проге, а затем, через VirtualAlloc, создать дополнительный участок и скопировать туда недостающие данные. Но мне этот путь по некоторым причинам не очень нравиться. Ты как здесь поступил?



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 12 октября 2005 10:31
· Личное сообщение · #26

Да я это видел. Честно сказать ничего пока не делал, всё пытаюсь нормально разобраться с прыжками. Но насколько я понял надо просто также восстановить эти келлы и выполнять их до VOEP, там они пользуются келлами проги.



Ранг: 136.5 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 13 октября 2005 14:40
· Личное сообщение · #27

У меня такое ощущение, что без скрипта все же не обойтись. В ручную -- слишком много работы.
Пока у меня сложилось следующее впечатление о защите:
1. Сначало идет 1-я ветвь кода, забранная аспром (у меня это Address=019A0000 Size=00005000).
В этой секции обращение к ВМ было типа CALL 02180000 (переделываем на jmp - адрес возврата, расположенный в секции 02190000). В этой ветви адрес возврата часто меняется в зависимости от флага Z
2. Вторая ветвь начинается с перехода JMP 01AC0000 (Address=01AC0000 Size=00001000). Эму область надо так же дополнительно создавать в дампе. В ней уже обращение к ВМ другого типа, например:
01AC0926 CALL 01DA0000. Адрес возврата находится в следующей секции 01DB0000. И он не зависит
от значения флага Z
3. А третья ветвь начинается здесь:
00562B27 JMP 01AE0000 (Address=01AE0000 Size=00002000)
А из нее идет другое обращение к ВМ, типа 01AE001E CALL 01E00000. Адрес возврата так же находится
в следующей секции (+10000) и вроде не зависит от значения флага.
Более того, есть ощущения, что это не конец и есть продолжение. В принципе, можно на каждый кусок (ветвь) написать свой скрипт. Но тогда не ясно, как вносить изменения в дамп. С другой стороны, мне кажется, общий скрипт будет слишком сложен.



Ранг: 115.3 (ветеран)
Активность: 0.030
Статус: Участник

Создано: 29 октября 2005 21:01
· Личное сообщение · #28

Вот попытался ещё написать, кому интересно читайте "Распаковк анового ASProtect на примере Advanced Archive Password Recoveryv_3_00", архив с программой тут:
hxxp://www.webfile.ru/601992
доступен до 05.11.2005 20:55.




Ранг: 299.6 (наставник)
Активность: 0.30
Статус: Участник
Armadillo Killer

Создано: 29 октября 2005 21:43 · Поправил: Z0oMiK
· Личное сообщение · #29

SergSh Мувик бы
тока в статье мне чего не понятно это -> жмем Alt+M и видим карту памяти находим наш процесс и ставим Set Memory Breakpoint on Access ... на какой процесс ставить то ? на CODE ?




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 29 октября 2005 22:15
· Личное сообщение · #30

Z0oMiK пишет:
мем Alt+M и видим карту памяти находим наш процесс

я статью не читал, поэтому не совсем понимаю о чём вы тут, но Alt+M показывает карту памяти _процесса_, поэтому как там найти что-нить кроме нашего процесса %)))))




Ранг: 299.6 (наставник)
Активность: 0.30
Статус: Участник
Armadillo Killer

Создано: 29 октября 2005 22:23
· Личное сообщение · #31

Mario555 А ты возьми почитай где то я подобную статью уже читал


<< . 1 . 2 . 3 . 4 . 5 . >>
 eXeL@B —› Протекторы —› Распаковка AsProtect >1.23 - от А до Я.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати