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

 eXeL@B —› Протекторы —› unpack securom
<< . 1 . 2 . 3 .
Посл.ответ Сообщение


Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

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

я создал тему в разделе для новичков
http://exelab.ru/f/action=vthread&forum=5&topic=9277

пакер SecuROM 4.x.x.x - 5.x.x.x -> Sony DADC
посмотрел секции:
CWFR
FWFR
.asrc
.ojff
.apypwk
.idata

Говорят что это пакер по сложности не уступает Themida
Знаю, на сайте есть две статьи про распаковк securom, но чт-то мне не очень понятно.
Буду благодарен, если кто посмотрит exe-ник.
http://ifolder.ru/2578939




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

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

Mavlyudov пишет:
0040EECB 8946 10 MOV DWORD PTR DS:[ESI+10],EAX

...так ты уже проскочил настоящее OEP...между прочим.

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

-----
the Power of Reversing team





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

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

DillerInc пишет:
И что значит запускал "с одним exe-шником"??

Значит, что в отдельную папку кинул exe и его дебаггил




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

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

DillerInc пишет:
Ты вообще программу инсталлировал на жёсткий диск??

Проинсталировал, открыл и т.д.. ВСЁ тоже самое, что и в моем последнем посте, где я код приводил.
с точностью до адресов!!!!! НИЧЕГО не понимаю!!!!




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 28 июля 2007 14:15 · Поправил: Mavlyudov
· Личное сообщение · #5

Я так посмотрел, только 6% из посетивших отвечают в эту тему...
Наверняка же можно имея только один файл EGU.exe, распаковать этот файл: убрать проверку cd, выйти на UPX и распаковать...




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

Создано: 29 июля 2007 10:50
· Личное сообщение · #6

Mavlyudov
И всё-таки я думаю,что у тебя палится отладчик,потому как иначе трудно объяснить,почему у тебя так происходит.
Вот,попробуй поставить этот плагин для ольки.Попробуй с ним,так сказать,поиграться,когда загрузишь программу в отладчик и будешь стоять на EP.


c33e_29.07.2007_CRACKLAB.rU.tgz - hidedbg_by_xDREAM.rar

-----
the Power of Reversing team





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 31 июля 2007 01:42 · Поправил: Mavlyudov
· Личное сообщение · #7

Начну с хороших новостей: я нашел ОЕР.
Но импорт еще не восстановил. Мои попытки это сделать не увенчались успехом,
Поэтому расскажу, как я это делал, чтобы была возможность меня поправить.
Заодно покритикую(в хорошем смысле) статьи Ra$cal’а и Cigan’а.

Итак, я стою на ОЕР.
00553258 55 PUSH EBP
Сразу снимаю 2 дампа: один с галочкой Rebuild Import, другой без.
Cigan пишет, что чуть ниже ОЕР "видим первый CALL ведущий в не куда"
Вот как он выглядит у меня:
А вот куда он ведет (сомневаюсь, что это то самое "не куда", хотя кто знает):
00407093 90 NOP
00407094 53 PUSH EBX
Продолжим.
Трассирую F7 со входом в call:
Попадаю в секцию библиотек
7C573DFC > 55 PUSH EBP
Жму Alt+F9 и попадаю опять в код проги:
004070A5 A3 18F75500 MOV DWORD PTR DS:[55F718],EAX ; EGU.00400000
Поднимаюсь на команду выше
004070A0 E8 2BFFFFFF CALL EGU.00406FD0 ; JMP to kernel32.GetModuleHandleA
Жму Enter на нее:
00406FD0 -FF25 18435600 JMP DWORD PTR DS:[564318] ; kernel32.GetModuleHandleA

В окне дампа смотрю на адрес 564318 и пытаюсь найти примерное начало импорта
00564318 FC 3D 57 7C 00 00 00 00 24 30 2D 7C 1A 90 2D 7C ь=W|....$0-| ђ-|
Поднимаюсь чуть выше, вижу нули.
00564208 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Нули заканчиваются по адресу
0055E698 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Т.е с адреса 0055E688 опять начинается код.
0055E688 EC 9F 41 00 0C 32 47 00 00 00 00 00 00 00 00 00 мџA..2G.........
Ладно, иду в ImpRec:
OEP=00153258 (без ImageBase)
RVA=<начало где нули>=00564208 - 400000=00164208
SIZE=<начало кода, после того как нули закончились>=0055E688
Галочка "Add new section" стоит
Нажимаю Get Imports и ничего не импортируется, значит я накосячил где-то…
Вот только где…
Хм…попробовал еще кое-что. Перечитал топик еще раз..
Ввел параметры, какие говорил DillerInc
OEP=00153258
RVA=0016421C
SIZE= 00000A88.
RVA(от галочки Add new section) =001F7000
Get Import и Fix Dump. Зафиксировал те два дампа, что снял из Олли..
Оба работают.
Так, интересно. Теперь правлю мои параметры. Решил заменить размер.
Был SIZE=0055E688
Заменил на размер DillerInc'а 00000A88. Все получилось!!!!

Еще попробовал. Теперь ставлю размер 00010000
Появилось кое-что лишнее
? Fthunk: 00169000 Nbfunc:4 (decimal:4) valid:NO
rva: 00169000 ptr 00568000
rva: 00169004 ptr 00568010
rva: 00169008 ptr 0055F710
rva: 0016900C ptr 00569010

Удаляю ее, фиксирую оба дампа. Все работает.
Файл в среднем занимает 3,63 МБ (±0,01)
Значит все дело в IAT Size (хотя у меня RVA=00164208, у DillerInc RVA=0016421C, у меня к тому же Windows 2000 )

DillerInc, расскажи почему IAT Size = 0A88h ??
Щас пойду почитаю про PE-формат и "Директории импорта". Расскажешь тогда еще как урезать файл?? А то он весит 3,63 МБ.
Как там вырезать секции и т.п. Ты вроде говорит что-то про .idata.




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 31 июля 2007 02:39
· Личное сообщение · #8

DillerInc
Решил попробовать, как ты посоветовал (интересно, получится ли?).
Дошел до ОЕР.
Ставлю бряк. bp GetModuleHandleA
Остановка на
7C573DFC > 55 PUSH EBP
Смотрю откуда эта функция была вызвана и куда вернется после завершения работы
0012F87C 00553272 RETURN to EGU.00553272 from EGU.00407094
From:
00407093 90 NOP
00407094 53 PUSH EBX
Как видно, это тот самый «CALL ведущий в не куда»
To:
0055326D E8 223EEBFF CALL EGU.00407094
00553272 33C0 XOR EAX,EAX

Что с этим делать??
Возможно, какую-то информацию уже можно вбивать в ImpRec?

Еще заметил: дамп, снятый в WinXp, в Win2000 не запутился:
Ошибка с заголовком:
"Entry Point Not Found" сообщает, что:
"The procedure entry point RestoreLastError could not be located in the dynamic link library kernel32.dll"

Посмотрел параметры функции GetModuleHandleA.
HMODULE GetModuleHandleA
{
LPCSTR module
}
Возвращает
Success: A handle to the loaded dll.
Failure: A NULL handle. Use GetLastError to determine the cause.




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

Создано: 31 июля 2007 11:36
· Личное сообщение · #9

Mavlyudov пишет:
расскажи почему IAT Size = 0A88h ??

...ну,это же элементарно,Ватсон

00564CA4h - 0056421Ch = 0A88h

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

И здесь нет "CALL ведущий в не куда", потому что это UPX.
Securom тут по-видимому используется для привязки к оригинальному диску.

-----
the Power of Reversing team





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 31 июля 2007 11:56
· Личное сообщение · #10

DillerInc пишет:
Начало IAT -- это смещение,где начинаются первые адреса IAT, а не какие-то нули.
Конец IAT -- это смещение,по которому находится последний импортируемый адрес, + 8 байт.

Как понять где начинается IAT, а где заканчивается?
Это столбики цифр 77 или 7С ?
У меня по адресу 00564318 таких нет.
Где ты взял арес 00564CA4 ?




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

Создано: 31 июля 2007 14:46
· Личное сообщение · #11

Mavlyudov
По-моему,тема начинает проситься в раздел для новичков,ей богу.
Это элементарные вещи,я не знаю,как их объяснить проще.Поэтому учи матчасть.

-----
the Power of Reversing team




Ранг: 38.7 (посетитель)
Активность: 0.020
Статус: Участник

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

Может быть, мне тут помогут =)
В общем начал изучать сей прот. Для опытов взял старую версию на WarCraft'e - 4.84
Восстанавливать импорт методом Cigan'a не стал, а просто пофиксил все переходы скриптом. Но вот проблемка. Все переходы верные, но импорт imprec'ом восстанавливается не полностью. Для сравнения брал nocd с gamecopyworld.com. Если точнее, то не восставливается импорт системных библиотек - т.е. kernel, user32, ntdll и т.д. Хотя в дампе все они есть:
nop
call ..
заменено на:
004011D0 |. FF15 ECB34400 CALL DWORD PTR DS:[44B3EC] ; \MessageBoxA
Возможно, я что-то конкретно не понимаю в импорте, но все же прошу помочь



Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

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

А там импорт и не надо востанавливать, там единственное что нужно это коректно его прописать.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 05 августа 2007 01:07 · Поправил: Smon
· Личное сообщение · #14

Кто нить реально смотрел 7-ку ? Начал ковырять Hitman Blood Money, распакованная гама падает на одном из инт3 (неужели в секуроме есть наномиты?! ), которых в секции кода примерно несколько тысяч, блоками от 1-го до 4 интов подряд, лежат в основном сразу за jcc (может это всё же такая проверка на распакованность\антидамп?)

Примеры:
00401030 6A FF PUSH -1
00401032 68 54897200 PUSH 555_.00728954
00401037 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
0040103D 50 PUSH EAX
0040103E 64:8925 00000000 MOV DWORD PTR FS:[0],ESP
00401045 51 PUSH ECX
00401046 A1 3CF88100 MOV EAX,DWORD PTR DS:[81F83C]
0040104B 85C0 TEST EAX,EAX
0040104D 74 01 JE SHORT 555_.00401050
0040104F CC INT3
00401050 6A 21 PUSH 21
00401052 68 C4147500 PUSH 555_.007514C4 ; ASCII "hitman3\hitman3\hitman3.cpp"
00401057 68 886A0000 PUSH 6A88
0040105C E8 FF560400 CALL 555_.00446760


00402E1C 57 PUSH EDI
00402E1D 897424 0C MOV DWORD PTR SS:[ESP+C],ESI
00402E21 C706 4C167500 MOV DWORD PTR DS:[ESI],555_.0075164C
00402E27 8B46 14 MOV EAX,DWORD PTR DS:[ESI+14]
00402E2A 33DB XOR EBX,EBX
00402E2C 3BC3 CMP EAX,EBX
00402E2E 895C24 1C MOV DWORD PTR SS:[ESP+1C],EBX
00402E32 74 01 JE SHORT 555_.00402E35
00402E34 CC INT3
00402E35 891D 84F68100 MOV DWORD PTR DS:[81F684],EBX
00402E3B 8B7E 04 MOV EDI,DWORD PTR DS:[ESI+4]
00402E3E 3BFB CMP EDI,EBX
00402E40 895E 18 MOV DWORD PTR DS:[ESI+18],EBX
00402E43 895E 14 MOV DWORD PTR DS:[ESI+14],EBX


00405310 8B81 041B0000 MOV EAX,DWORD PTR DS:[ECX+1B04]
00405316 85C0 TEST EAX,EAX
00405318 74 04 JE SHORT 555_.0040531E
0040531A CC INT3
0040531B 32C0 XOR AL,AL
0040531D C3 RETN
0040531E C781 041B0000 02000000 MOV DWORD PTR DS:[ECX+1B04],2
00405328 B0 01 MOV AL,1
0040532A C3 RETN


00452BE7 FF15 A8107500 CALL DWORD PTR DS:[<&kernel32.GetCurrent>; kernel32.GetCurrentProcess
00452BED 50 PUSH EAX
00452BEE FF15 A4107500 CALL DWORD PTR DS:[<&kernel32.GetProcess>; kernel32.GetProcessAffinityMask
00452BF4 85C0 TEST EAX,EAX
00452BF6 0F84 B5000000 JE 555_.00452CB1
00452BFC 8B0C24 MOV ECX,DWORD PTR SS:[ESP]
00452BFF 85C9 TEST ECX,ECX
00452C01 75 04 JNZ SHORT 555_.00452C07
00452C03 CC INT3
00452C04 8B0C24 MOV ECX,DWORD PTR SS:[ESP]
00452C07 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
00452C0B 85C0 TEST EAX,EAX
00452C0D 75 04 JNZ SHORT 555_.00452C13
00452C0F CC INT3
00452C10 8B0C24 MOV ECX,DWORD PTR SS:[ESP]
00452C13 83F9 01 CMP ECX,1
00452C16 0F84 95000000 JE 555_.00452CB1

Особенно забавно выглядят третий и четвертый пример, складывается такое впечатление, что прот просто сам обрабатывает инты, не позволяя проге упасть
PS: ни вм, ни прыжков в секцию прота не нашёл, прога падает на интах, попытка занопить их по шаблонам не удалась, всё равно падает, только уже непонятно где (OpenGL движок игры не дает ольке нормально работать )

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels





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

Создано: 06 августа 2007 22:00
· Личное сообщение · #15

Smon
Странно,не встречал подобного.Хотя я в принципе не особо разбирал седьмую версию.
А можно посмотреть,что происходит в защищённой программе при выполнении команды INT3, т.е. как её обрабатывает протектор??Может в защищённой программе они(команды прерывания) вообще не получают управления??

Может Cigan сможет больше сказать...он ведь у нас любит Securom

-----
the Power of Reversing team




Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 06 августа 2007 22:07
· Личное сообщение · #16

DillerInc пишет:
А можно посмотреть,что происходит в защищённой программе при выполнении команды INT3, т.е. как её обрабатывает протектор

Я уже думал над этим, но сайс не юзаю, а олька тут не помощник, т.к. гама падает уже после запуска и входа в граф. режим, а олька с ним к сожалению не дружит (

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 08 августа 2007 15:23
· Личное сообщение · #17

DillerInc
Еще пришла такая мысль: а зачем распаковывать UPX, ведь если импорт не кривой, то все работать будет!!!
Дошел до адреса
005ED180 60 PUSHAD
Снял дамп: с галочкой Rebuild Import и без.
Работает файл с отключенной галочкой.

тоже самое сделал на строчке ОЕР
00553258 55 PUSH EBP
Опять же: дамп, который снять с отключенной галочкой Rebuild Import работает.
(другой дамп выдает ошибку: The procedure entry point could not be located in the dynamic link library WS2_32.DLL)

Мне кажется, что такие дампы все же не будут работать на других компах, так что подправить импорт одним из указанных выше способой в ImpRec, ст0ит...
Да, кстати, проверил еше раз скрипты: один из них доходит до 005ED180, т.е лошел бы ло ОЕР, если бы не было UPX. Другой скрипт ставить бряки на все CALL'ы. Пока что я не понял для чего.

DillerInc
Расскажи пожалуйста еще две такие вещи:
1) как дойти до ОЕР, если ставить бряк на WriteProcessMemory, а не на CreateEventA....
2) как сократить размер файла с 3,62МБ до 1,98МБ



Ранг: 38.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 01 сентября 2007 14:07
· Личное сообщение · #18

Вопрос. Начал разбирать седьмую версию сабжа, встал на первом же шаге - ОЕР и антиотладка. Последний тутор от ARTeam немного освещает антиотладку, но этого оказалось недостаточно. Я не смог даже найти использование описанного там трика. Даже ничего похожего. Как я понимаю, с помощью плагинов, удается обойти ZwQueryInformationProcess, ZwQuerySystemInformation, CheckRemoteDebuggerPresent, IsDebuggerPresent, NtGlobalFlag\HeapFlag и несколько проверок класса\имени окна. На форуме ARTeam haggar отмечал след. зависимость кодов ошибки со срабатыванием антиотладки:
1. ERROR_NUMBER = 10000
ZwQueryInformationProcess
InfoClass = 0
2. ERROR_NUMBER = 2000
ZwQueryInformationProcess
InfoClass = 7
3. ERROR_NUMBER = 5002
FindWindowA
FindWindowExA
FindWindowW
FindWindowExW
4. ERROR_NUMBER = 5001
CreateFileA - drivers
5. ERROR_NUMBER = 5017
ZwQuerySystemInformation
6. ERROR_NUMBER = 8002
CheckRemoteDebuggerPresent
7. ERROR_NUMBER = 8008
HeapFlag
8. ERROR_NUMBER = 8009
NtGlobalFlag
9. ERROR_NUMBER = 8010
IsDebuggerPresent ???? maybe some more checks
10 ERROR_NUMBER = 8007
ZwQueryObject ????

... почти уверен, что 8010 вызывается не только из-за IsDebuggerPresent
Вот собственно и все, что смог узнать. Версия 7.29.0008 (Protection_ID 5.2с) с отладчиком выплевывает ошибку 8010. Уверен, кто-то справлялся с этим делом, может подскажите куда рыть? =)




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

Создано: 01 сентября 2007 19:47
· Личное сообщение · #19

SniperOK пишет:
Уверен, кто-то справлялся с этим делом, может подскажите куда рыть?

...на самом деле всё можно сделать гораздо проще,не заморачиваясь со всевозможными антиотладочными трюками.Надо только немного попрограммировать.
Главной наводкой здесь является то,что почти любая программа вызывает одной из первых функцию GetModuleHandleA.Подумайте,как это можно использовать,а потом напишите что-то вроде loader'а.

-----
the Power of Reversing team




Ранг: 5.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 сентября 2007 18:40
· Личное сообщение · #20

Mavlyudov пишет:
The linear sector density of Securom discs is very different to the density of normal cdr(w)s. This can be measured by timing reads on the cd. The following image shows the density of a Securom disc (red) compared to a normal disc (green).


Кто смотрел, в 7-ой версии все тоже самое? Новых фишек проверки диска нет?


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


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