Здравствуйте. Возникла проблема... столкнулся на днях с C-Dilla. Обползал вудмана ничего примечательного не нашёл. Подскажие, пожалуйста, может туторы какие есть? цель: NFS: Most Wanted С уважением...
http://nikolaekb.narod.ru/tutor/Unpack_SafeDisc_2_xx_and_3_xx.rar http://cracklab.ru/f/index.php?action=vthread&forum=2&topic=2087&page=2
Здраствуйте ребята! Я тоже занимаюсь распаковкой NFS Most Wanted. А она, оказывается, защищена протектором SafeDisc 4.60.000 от Macrovision. Должен сказать что они молодцы! Технология защиты такая: к хвосту главного EXE закреплены три "PE" файлика: две DLL (SecServ.dll и AuthServ.dll) плюс ещё один EXE ("cleanup.exe"). На самом деле они копируются во временном каталоге винды. Оттуда они инициализируются и загружаются в память. Если вам интересно, могу рассказать больше.
Ну, самая прикольная это DLL-ка "SecServ.dll" (кстати во временном каталоге винды у нее другое имя: если я не ошибаюсь "~df394.tmp"). Так вот, SFX-код из нашего главного EXE (speed.exe) передает управление ей в точку входа функции "Ox12121212". Тут начинается самое интересное. Во первых, большинство функций из этой DLL-ки зашифрованы, так что при выполнение каких либо операщий идет 1) декодирование нужной функции 2) её выполнение и конечно же 3) обратное кодирование (этот приемчик используется для любителей дампить процесс из памяти) так что будьте внимательны... Из функции "Ox12121212" загружается и "AuthServ.dll" (он также распаковывается под другим именем). В AuthServ.dll много кода который проверяет если установлены программы которые эмулируют CD/DVD-ROM, TEA-decrypt, ASCIIZ-decrypt.
Я еще не полностью разшифровал эти две DLL-ки, так что хвалиться не буду. В "SecServ.dll" (ImageBase=0x66700000) раскопал несколько интересных функций. Приведу ниже перечень их имена и смещения: 0x667309E7: int decrypt_asciiz_simple@8(LPCSTR lpszDecryptedAsciiz; LPCSTR lpszCryptedAsciiz) 0x667309B8: LPCSTR decrypt_asciiz_simple@4(LPCSTR lpszCryptedAsciiz) 0x6672FF53: DWORD get_asciiz_decrypt_key@0 0x6672FF71: decrypt_asciiz_with_first_key@8(LPCSTR lpszDecryptedAsciiz; LPCSTR lpszCryptedAsciiz) 0x66702FC5: check_for_debugger 0x66701402: miscellaneous_debugger_checks 0x66705740: multiple_debugger_checks <- здесь серцевина всех проверок на присудствие дебаггера 0x6670B110: _is_debugger_present_ 0x6670B020: _check_if_softice_for_win9x_is_running_ 0x6670AF60: _check_if_softice_for_winnt_is_running_ 0x6672F98C: get_kernel32_handle 0x6672FBB1: get_proc_address_by_crypted_name 0x6672FB25: LPVOID *emulate__get_proc_address@8(HMODULE hModule; LPCSTR lpszCryptedProcName) В "SecServ.dll" эмулируются и такие API-функции как CreateFileA, DeviceIoControl etc. Но на счет NFSMW, остановился я на восстановлении таблицы импортов, так как SafeDisc смешал их полностью. Но это не все. SafeDisc портит и секцию кода (в случае с NFSMW это ".text"). Он использует перехват некоторых API-функций (вместо CALL ставит JMP куда-то в секцию "stxt774"), но это не самое сложное. Помимо этого SafeDisc 4.60 использует принцип краденного кода, то есть вместо некоторых машинных кодов ставит опкод CCh (int 3). Я предполагаю что он использует SEH для определения смещения где возникла нарошная ошибка и какую именно инструкцию следует выполнить дальше.
1. импорт восстанавливается прекрасно по статье про распаковку NFSU2... 2. перенаправленные джампы и коллы восстанавливаюся по той же статье (хотя у меня почему-то не восстановилось штуки 4 колла)... 3. c int3 тоже вроде проблем не замечено... 4. AuthServ.dll на самом деле AuthServ.exe... 5. самое хреновое из всего - API SafeDisc`а...: SUB ESP,20 PUSH ESI MOV ESI,DWORD PTR DS:[8FAD10] ------- В ESI заносится адрес SecServ.DLL TEST ESI,ESI JNZ SHORT call_ref.00666D27 MOV EAX,DWORD PTR DS:[8FAD14] TEST EAX,EAX JE SHORT call_ref.00666D5D PUSH EBX MOV EBX,DWORD PTR DS:[8FAD9C] PUSH EDI MOV EDI,DWORD PTR DS:[8FAD98] LEA EAX,DWORD PTR SS:[ESP+34] PUSH EAX LEA ECX,DWORD PTR SS:[ESP+34] PUSH ECX LEA ECX,DWORD PTR SS:[ESP+14] CALL call_ref.0065FA90 LEA EAX,DWORD PTR SS:[ESP+C] CDQ PUSH EDX PUSH EAX PUSH EBX PUSH EDI CALL ESI ------- здесь и вызывается ADD ESP,10 POP EDI POP EBX POP ESI ADD ESP,20 RETN MOV EDX,DWORD PTR SS:[ESP+2C] MOV EAX,DWORD PTR SS:[ESP+28] PUSH EDX PUSH EAX CALL call_ref.00666380 ADD ESP,8 POP ESI ADD ESP,20 RETN и такой код встречается оч много раз... в аттаче полная IAT.... все выше сказанное относится к NFSMW v. 1.2 _1509667898__iat_full!!!.txt
Здравствуйте. Поздравляю вас с Новым Годом! На счет NFSMW v1.2: Хочу сказать s0cpy огромное спасибо за полную таблицу импортов, она мне очень пригодилась. С джампами и коллами я разобрался (эти структуры находятся на "REDIRECTION BRIDGE" :-D). На счет "INT 3" должен сказать что они все-таки существуют! Посмотрите функцию кде вызывается "SetErrorMode". Чуть выше на пару инструкций будут два опкода 0CCh. На их месте должна быть инструкция XOR EBX, EBX. Также посмотрите функции где вызываются InterlockedIncrement и InterlockedDecrement. Так вот у меня будет к вам такой вопрос: где находятся эти STOLEN BYTES? И в подарок, наткнулся на фунцию про которую говорил s0cpy. Так что, если мы хотим создать "антивирус" надо изучить "вирус". Я вот сижу и парюсь с этими двумя DLL-ками (пака еще не расшифровал их полностью). Похоже этот SafeDisc немножко круче чем ASProtect нашего многоуважаемого Алексея Солодовникова.