Сейчас на форуме: subword, rtsgreg1989, zds, _MBK_ (+5 невидимых) |
eXeL@B —› Основной форум —› И снова SecuRom 7.х.х |
Посл.ответ | Сообщение |
|
Создано: 12 октября 2007 11:48 · Личное сообщение · #1 Короче нашел способ добраться почти до ОЕР (дабы все отладчики на свете палються этой байдой)... 99 % защищенных SecuRom написаны на Visual C++ (по крайней мере другие мне еще не попадались) В установочной папке всегда присутствует msvcr71.dll и еже с ним. Так вот... после выполнения GetModuleHandleA после ОЕР выполняется вызов функи __set_app_type из msvcr71.dll... Я просто делаю бекап данной библы и патчу на входе в функи EBFE ... запускаю прогу.... и жду когда SecuRom проверит диск и прога зациклиться... затем аттачусь к процессу F9... F12 и я в данной функции... восстанавливаю замененные байты...(кстати можно уже смело дампить, дамп будет рабочим!)... нажимаю F8 иииии...... Процесс запускается и виснет где-то недрах ntdll.... короче отлаживать процесс не получается... единственный плюс, пока прога стоит в отладчике нетронутой можно смело восстановить импорт и сдампить... а вот ВМ уже хрен восстановишь.... Вот и вопрос - почему так происходит и как этого избежать... Кто-то мне сказал - "значит секюром забрал все отладочные прерывания себе"... так это или нет? И что ДЕЛАТЬ в данной ситуации? Спасибо заранее.... ----- aLL rIGHTS rEVERSED! |
|
Создано: 12 октября 2007 11:53 · Личное сообщение · #2 |
|
Создано: 12 октября 2007 13:46 · Личное сообщение · #3 |
|
Создано: 12 октября 2007 13:55 · Личное сообщение · #4 |
|
Создано: 12 октября 2007 14:02 · Личное сообщение · #5 |
|
Создано: 12 октября 2007 14:06 · Личное сообщение · #6 Cigan У меня начало прота вот такое 01C0D8E0 > 9C PUSHFD 01C0D8E1 9C PUSHFD 01C0D8E2 83EC 24 SUB ESP,24 01C0D8E5 C74424 20 563B4>MOV DWORD PTR SS:[ESP+20],DE4F3B56 01C0D8ED C74424 1C 7B030>MOV DWORD PTR SS:[ESP+1C],37B 01C0D8F5 895C24 18 MOV DWORD PTR SS:[ESP+18],EBX 01C0D8F9 BB B0D8C001 MOV EBX,TestDriv.01C0D8B0 01C0D8FE C14C24 20 18 ROR DWORD PTR SS:[ESP+20],18 01C0D903 897C24 14 MOV DWORD PTR SS:[ESP+14],EDI 01C0D907 8B3B MOV EDI,DWORD PTR DS:[EBX] 01C0D909 017C24 20 ADD DWORD PTR SS:[ESP+20],EDI 01C0D90D 83C3 04 ADD EBX,4 01C0D910 66:FF4C24 1C DEC WORD PTR SS:[ESP+1C] 01C0D915 0FACCD 00 SHRD EBP,ECX,0 ; Shift constant out of range 1..31 01C0D919 ^ 75 EC JNZ SHORT TestDriv.01C0D907 01C0D91B 804C24 20 01 OR BYTE PTR SS:[ESP+20],1 01C0D920 90 NOP 01C0D921 0FA4D5 00 SHLD EBP,EDX,0 ; Shift constant out of range 1..31 01C0D925 8B5C24 24 MOV EBX,DWORD PTR SS:[ESP+24] 01C0D929 8B7C24 20 MOV EDI,DWORD PTR SS:[ESP+20] 01C0D92D 50 PUSH EAX 01C0D92E 58 POP EAX 01C0D92F 895C24 20 MOV DWORD PTR SS:[ESP+20],EBX 01C0D933 8B5C24 18 MOV EBX,DWORD PTR SS:[ESP+18] 01C0D937 897C24 24 MOV DWORD PTR SS:[ESP+24],EDI 01C0D93B 90 NOP 01C0D93C 8B7C24 14 MOV EDI,DWORD PTR SS:[ESP+14] 01C0D940 83C4 20 ADD ESP,20 01C0D943 9D POPFD 01C0D944 73 13 JNB SHORT TestDriv.01C0D959 01C0D946 810424 32728C01 ADD DWORD PTR SS:[ESP],TestDriv.018C7232 01C0D94D 56 PUSH ESI 01C0D94E 5E POP ESI 01C0D94F 810424 C3443400 ADD DWORD PTR SS:[ESP],3444C3 01C0D956 ^ EB FA JMP SHORT TestDriv.01C0D952 01C0D958 3183 EC20C744 XOR DWORD PTR DS:[EBX+44C720EC],EAX 01C0D95E 24 1C AND AL,1C 01C0D960 DAC8 FCMOVE ST,ST 01C0D962 6300 ARPL WORD PTR DS:[EAX],AX причем после JMP-а идет RET в небо.... Я так понял у секброма есть обработчик событий подобных.... как его найти? ----- aLL rIGHTS rEVERSED! |
|
Создано: 12 октября 2007 14:10 · Личное сообщение · #7 bibendum - в этой секции EP... потом процесс пыгает est 01A06773 893E MOV DWORD PTR DS:[ESI],EDI 01A06775 56 PUSH ESI 01A06776 FF15 53D4E401 CALL DWORD PTR DS:[<&KERNEL32.GetVersionExA>] ; kernel32.GetVersionExA 01A0677C 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10] 01A0677F 890D CC4BCF01 MOV DWORD PTR DS:[1CF4BCC],ECX 01A06785 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4] 01A06788 A3 D84BCF01 MOV DWORD PTR DS:[1CF4BD8],EAX 01A0678D 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8] 01A06790 8915 DC4BCF01 MOV DWORD PTR DS:[1CF4BDC],EDX 01A06796 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C] 01A06799 81E6 FF7F0000 AND ESI,7FFF 01A0679F 8935 D04BCF01 MOV DWORD PTR DS:[1CF4BD0],ESI 01A067A5 83F9 02 CMP ECX,2 01A067A8 74 0C JE SHORT TestDriv.01A067B6 01A067AA 81CE 00800000 OR ESI,8000 01A067B0 8935 D04BCF01 MOV DWORD PTR DS:[1CF4BD0],ESI 01A067B6 C1E0 08 SHL EAX,8 01A067B9 03C2 ADD EAX,EDX 01A067BB A3 D44BCF01 MOV DWORD PTR DS:[1CF4BD4],EAX 01A067C0 33FF XOR EDI,EDI 01A067C2 57 PUSH EDI 01A067C3 FF15 57D4E401 CALL DWORD PTR DS:[<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA 01A067C9 66:8138 4D5A CMP WORD PTR DS:[EAX],5A4D 01A067CE 75 1F JNZ SHORT TestDriv.01A067EF 01A067D0 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C] 01A067D3 03C8 ADD ECX,EAX 01A067D5 8139 50450000 CMP DWORD PTR DS:[ECX],4550 01A067DB 75 12 JNZ SHORT TestDriv.01A067EF 01A067DD 0FB741 18 MOVZX EAX,WORD PTR DS:[ECX+18] 01A067E1 3D 0B010000 CMP EAX,10B 01A067E6 74 1F JE SHORT TestDriv.01A06807 01A067E8 3D 0B020000 CMP EAX,20B 01A067ED 74 05 JE SHORT TestDriv.01A067F4 01A067EF 897D E4 MOV DWORD PTR SS:[EBP-1C],EDI 01A067F2 EB 27 JMP SHORT TestDriv.01A0681B Вот сюда ----- aLL rIGHTS rEVERSED! |
|
Создано: 12 октября 2007 14:21 · Личное сообщение · #8 |
|
Создано: 12 октября 2007 16:01 · Поправил: DillerInc · Личное сообщение · #9 DaRKSiDE пишет: "значит секюром забрал все отладочные прерывания себе" ...это не так. Я пользуюсь SICE + IceExt. Когда запущенный отладчик просто пасётся где-то в недрах ОС,то протектор его не палит.А так всё прекрасно отлаживается,только надо обходить анти-трассировочные механизмы. Чтобы выйти к OEP лучше применять метод перехвата WinAPI,как предложил Cigan. Я тут уже выкладывал свою утилиту для этого.Вот более обновлённая версия. ----- the Power of Reversing team |
|
Создано: 12 октября 2007 16:04 · Поправил: DillerInc · Личное сообщение · #10 |
|
Создано: 12 октября 2007 16:38 · Личное сообщение · #11 |
|
Создано: 12 октября 2007 18:51 · Личное сообщение · #12 |
|
Создано: 13 октября 2007 00:09 · Личное сообщение · #13 |
|
Создано: 13 октября 2007 12:13 · Личное сообщение · #14 |
|
Создано: 13 октября 2007 12:16 · Личное сообщение · #15 |
|
Создано: 19 декабря 2007 12:26 · Личное сообщение · #16 Вожусь с диском защищенным SecuROM 7.x и застопорился на дампе. У экзешника Image Base 0x10000000, а память для гадостей SecuROM'а выделяется выше (например, 0x0A000000). Поэтому не могу просто сдампить экзешник и прикрутить к его концу выделенную память, т.к. надо еще адреса переходов исправлять, т.е. заменять jmp 0x0A000000 на jmp 0x1A000000, да и сомневаюсь, что дамп после этого будет работать. Может есть более простое решение для подобной задачи? |
|
Создано: 19 декабря 2007 15:24 · Личное сообщение · #17 |
|
Создано: 19 декабря 2007 16:39 · Поправил: xlETO · Личное сообщение · #18 Диск DVD'ишный, программу назвать не могу (да и толку от этого - в инэте все равно не встречается), написана на MS VC++. Хмм, появилась мысль, что если занять все свободные регионы памяти до 0x10000000 используя например VirtualAlloc(Ex), то когда SecuROM запросит память - ему вернется участок памяти расположенный за экзешником. Еще нашел плагин для OllyDbg - Memory Manage v1.0 (https://www.openrce.org/downloads/details/216/Memory_Manage https://www.openrce.org/downloads/details/216/Memory_Manage ). С его помощью можно выделить нужный участок памяти, указав его начало и размер. |
|
Создано: 19 декабря 2007 16:49 · Личное сообщение · #19 |
|
Создано: 19 декабря 2007 16:50 · Личное сообщение · #20 |
|
Создано: 19 декабря 2007 17:10 · Личное сообщение · #21 xlETO пишет: ему вернется участок памяти расположенный за экзешником ...а если участок за образом уже занят какой-нибудь библиотекой??Тем более что,насколько мне известно,протектор не располагает всю свою память одним куском(случай с игрой FEAR отбрасываем).Ты можешь сдампить и прикрутить один кусок,а потом окажется,что какой-нибудь обработчик ВМ читает/передаёт управление в какой-нибудь иной регион памяти. ----- the Power of Reversing team |
|
Создано: 19 декабря 2007 17:31 · Поправил: xlETO · Личное сообщение · #22 DillerInc пишет: протектор не располагает всю свою память одним куском Понимаю, но и памяти свободной ему много не останется. Будет свободен промежуток памяти после экзешника и до первой библиотеки (а если библиотека близко расположена, то ее можно перебазировать DllRebaser'ом). Поэтому сдамплю весь промежуток памяти после экзешника и до библиотеки, а там уж разберемся... DillerInc пишет: а если участок за образом уже занят какой-нибудь библиотекой Это ладно, просто придется добавить в конец файла пустую секцию размером с занятый участок, а уже после нее вставлять дамп регионов памяти. Может потом и перестроить получится, главное чтобы дамп работал - остальное можно потом подкрутить. |
|
Создано: 20 декабря 2007 14:42 · Поправил: xlETO · Личное сообщение · #23 |
eXeL@B —› Основной форум —› И снова SecuRom 7.х.х |