![]() |
eXeL@B —› Вопросы новичков —› Star Force Forever |
<< . 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 19 мая 2007 23:00 · Личное сообщение · #1 Привет всем, кто интересуется защитой стар форс Я знаю, что здесь сидят умные люди которые могут помочь вопрос такой не на счет эмуляции а на счет отладки стар форс В инете я наткнулся на статьи AsMaxа по взлому стар форс но ничего не получается т.к. не могу запустить старфорсный экзешник в отладчике Если кто-нибудь запускал экзешник с protect.dll по AsMaxу ОТЗОВИТЕСЬ!!! P.S кто хочет почитать статьи введите в яндексе восстановление импорта стар форс ![]() |
|
Создано: 09 июня 2007 14:33 · Личное сообщение · #2 |
|
Создано: 10 июня 2007 14:58 · Личное сообщение · #3 Ковырял и продолжаю ковырять игрушку со старфорсом. Что нашел. Проверка на дебаггер производится до первой остановки в Olly (страшное ощущение, что при загрузке Olly просто переходит по jmp в protect.dll даже не останавливаясь на точке входа), далее protect.dll осуществляет проверку диска на валидность и полюбак прыгает в исходный экзешник (по адресу соответствующему OEP) , после чего происходит повторный jmp прыжок в protect.dll, где и осуществляется, при соблюдении условий, или распаковка исходного экзешника в память, или выдача ошибки, далее при валидности диска стоит еще одна интересная защита, суть работы которой до сих пор не пойму - помоему происходит выдача ошибки, при этом просто запущенная игра ее как-то нормально закрывает и запускает игру, а под отладчиком выдается эта ошибка и происходит "уничтожение" процесса. Итог всего моего ковыряния - имеется нормальный распакованый экзешник (неизвестно пока правда, что там с таблицей импорта), но для запуска необходимо переопределить точку входа, допустим, что состояние стэка и регистров мы сможем подделать, но нужна OEP как ни крути, потомучто без ее смены мы прыгаем в экзешник, а оттуда все также от следующей команды после OEP прыгаем в protect.dll за проверкой диска, а нам этого как раз не надо. Внимание вопрос: по каким признакам можно найти точку входа? Трассировка проделывает невероятное количество операций среди которых оооооочень трудно найти что-то нужное. Кто знает, пожалуйста, или сами напишите, или дайте ссылку где есть данная инфа. И еще вопрос есть: различается ли как-то ошибка связанная с таблицей импорта, допустим, от ошибки связаной с неправильной OEP? Надо знать где неполучится, чтобы знать где ковырять чтобы получилось... ![]() |
|
Создано: 11 июня 2007 17:37 · Личное сообщение · #4 |
|
Создано: 11 июня 2007 18:37 · Личное сообщение · #5 Собственно я об этом и говорил. Ты глянь после этого в основной экзешник и будет для тебя сюрприз - он должен быть распакован. По крайней мере у меня при возникновении последней ошибки судя по содержанию главного файла он находится в распакованом состоянии - осталось только найти точку входа и посмотреть что там с импортом. ![]() |
|
Создано: 13 июня 2007 10:50 · Личное сообщение · #6 |
|
Создано: 13 июня 2007 15:56 · Личное сообщение · #7 |
|
Создано: 24 июля 2007 21:24 · Личное сообщение · #8 |
|
Создано: 24 июля 2007 21:25 · Личное сообщение · #9 |
|
Создано: 25 июля 2007 02:22 · Поправил: El_Diablo · Личное сообщение · #10 |
|
Создано: 25 июля 2007 20:36 · Личное сообщение · #11 El_Diablo мне влом писать пошаговое выполнение и поэтому я пишу покороче и придираться не надо ты посмотри мои сорцы там стоит в dll обработчик .if reason == DLL_PROCESS_ATTACH в старе такой же в длл стоит он дальше проверяет на наличие отладчика намного более крутыми методами чем я в своей проге это главная фишка стара (с dll) он определяет олли в момент загрузки обычно длл грузится LoadLibrary а тут в отличие от обычных длл создает свой поток который не видит отладчик вопрос как его прибить если его удастся прибить то мы облегчим себе участь в исследовании стара а если не удастся то можно написать новый прот с этой фишкой кстати проверки айса даже когда в системе стар не работает под айсом он его детектит как минимум тремя методами первый IsDebugPresent второй GetModuleHandleA с параметрами \.\NTICE \.\WINICE \.\SICE кстати на wasm.ru про эти фишки написано но они не катят т.е. сырцы которые там выложены про \.\NTICE \.\WINICE \.\SICE не катят сам проверял а у стара катят плюс ко всему к этому ещё одна проверка сайса которую я не могу определить почему разработчики стара боятся айса да потому что только в нем можно стар побороть нужно ещё разобраться как стар инты хучит кстати в последней которая у меня есть версия стара 4,50 длл действительно на нулувом кольце сидит и олли пасует думайте как его побороть водиночку не справиться ![]() |
|
Создано: 25 июля 2007 22:53 · Личное сообщение · #12 |
|
Создано: 26 июля 2007 16:21 · Личное сообщение · #13 |
|
Создано: 26 июля 2007 17:33 · Поправил: Amok · Личное сообщение · #14 GodFather Раз ICE детектится, попрбуй дебажить другим отладчиком нулевого кольца, например сиськой [url=http://sysersoft.com/download/download.php ]http://sysersoft.com/download/download.php [/url] Правда он ещё относительно молодой отладчик, поэтому частенько бсодит, запускать лучше под виртуальной машиной, например VMWare. ![]() |
|
Создано: 28 июля 2007 18:15 · Личное сообщение · #15 |
|
Создано: 28 июля 2007 19:03 · Личное сообщение · #16 |
|
Создано: 28 июля 2007 23:16 · Поправил: huckfuck · Личное сообщение · #17 Мой метод дампа StarForce 3.xx на OEP: 1. Запускаем игру, жмём ALT+TAB,запускаем OllyDbg, аттачимся к игре и ищем OEP, выходим из отладчика 2. Делаем лоадер, который будет патчить 2 первых байта OEP на EB FE (т.е. зациклит игру) - имхо лучше использовать DUP 3. Запускаем лоадер, если игра не грузится, но висит в диспетчере задач, всё ОК, игра зациклена и можно переходить к следующему шагу. Если игра грузится, значит, лоадер надо переделать (изменить задержки, перенести место патча дальше от OEP, например, до первого CALL и патчить начало этого CALL'a) 4. Запускаем отладчик и аттачимся к зацикленному процессу, нажимаем F2, восстанавливаем пропатченные байты и дампим процесс 5. Запускаем ImpRec, восстанавливаем импорт (если попадаются эмулированные старфорсом функции, необходимо привести их в читаемый вид, убирая весь бессмысленный мусорный код и ища этот код в Olly в той dll-ке, в которой ImpRec не смог их распознать, правда, код для kernel.dll можно искать и в ntdll.dll) 6. Фиксим дамп ImpRec'ом Таким образом, например, распаковывается демо-версия Brothers In Arms: Earned In Blood ![]() |
|
Создано: 31 июля 2007 22:09 · Личное сообщение · #18 |
|
Создано: 03 августа 2007 12:09 · Личное сообщение · #19 huckfuck 5. Запускаем ImpRec, восстанавливаем импорт (если попадаются эмулированные старфорсом функции, необходимо привести их в читаемый вид, убирая весь бессмысленный мусорный код и ища этот код в Olly в той dll-ке, в которой ImpRec не смог их распознать, правда, код для kernel.dll можно искать и в ntdll.dll) Вот это не верно, все функции из одной билиотеки, это имперек иногда ошибается по автотрайсе. ![]() |
|
Создано: 07 августа 2007 20:22 · Личное сообщение · #20 |
|
Создано: 08 августа 2007 06:43 · Поправил: Faza · Личное сообщение · #21 |
|
Создано: 08 августа 2007 09:33 · Личное сообщение · #22 кстати OEP я правильно нашел и импорт тоже (to Faza) решил я восстанавливать импорт и наткнулся на прикольную технику засирания 0061A000 . F4EADC77 DD ADVAPI32.RegCreateKeyExA 0061A004 . 1BC4DE77 DD ADVAPI32.RegOpenKeyA 0061A008 . 8378DC77 DD ADVAPI32.RegQueryValueExA 0061A00C . F06BDC77 DD ADVAPI32.RegCloseKey 0061A010 . AE130701 DD 010713AE <- перешел сюда 0061A014 . 4ACFDD77 DD ADVAPI32.RegEnumValueA 0061A018 . C1C8DE77 DD ADVAPI32.RegEnumKeyExA 0061A01C . E7EBDC77 DD ADVAPI32.RegSetValueExA 010713AE ^E9 A1FFFFFF JMP 01071354 <- перешел сюда 01071354 8BFF MOV EDI,EDI 01071356 53 PUSH EBX 01071357 8BDD MOV EBX,EBP 01071359 871C24 XCHG DWORD PTR SS:[ESP],EBX 0107135C 8BEC MOV EBP,ESP 0107135E 50 PUSH EAX 0107135F 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C] 01071362 870424 XCHG DWORD PTR SS:[ESP],EAX 01071365 51 PUSH ECX 01071366 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] 01071369 870C24 XCHG DWORD PTR SS:[ESP],ECX 0107136C 8D6424 FC LEA ESP,DWORD PTR SS:[ESP-4] 01071370 C70424 02000100 MOV DWORD PTR SS:[ESP],10002 ; UNICODE "::=::" 01071377 E8 00000000 CALL 0107137C 0107137C 870424 XCHG DWORD PTR SS:[ESP],EAX 0107137F 8D40 0F LEA EAX,DWORD PTR DS:[EAX+F] 01071382 870424 XCHG DWORD PTR SS:[ESP],EAX 01071385 68 EAD4DE77 PUSH 77DED4EA <- а это переход интересно куда 0107138A C3 RETN 77DED4EA FF25 1460E377 JMP DWORD PTR DS:[77E36014] ; ADVAPI32.77DED4F5 странно нет API по такому адресу пролистаю отладчик чуть выше 77DED4C9 > 8BFF MOV EDI,EDI 77DED4CB 55 PUSH EBP 77DED4CC 8BEC MOV EBP,ESP 77DED4CE FF75 0C PUSH DWORD PTR SS:[EBP+C] 77DED4D1 FF75 08 PUSH DWORD PTR SS:[EBP+8] 77DED4D4 68 02000100 PUSH 10002 ; UNICODE "::=::" 77DED4D9 E8 0C000000 CALL ADVAPI32.77DED4EA стар типа спер кусок системной длл 77DED4DE 0FB6C0 MOVZX EAX,AL 77DED4E1 5D POP EBP 77DED4E2 C2 0800 RETN 8 вписываю 77DED4C9 вместо 010713AE 0061A010 . C9D4DE77 DD ADVAPI32.GetUserNameA но это легкий пример сложный далее возьмем 0061A05C . 516EF177 DD GDI32.CreateCompatibleBitmap 0061A060 . C59FF177 DD GDI32.GetDIBits 0061A064 . 3B6AF177 DD GDI32.DeleteObject 0061A068 . 105EF177 DD GDI32.CreateCompatibleDC 0061A06C . C06DF177 DD GDI32.BitBlt 0061A070 . 1E03ED00 DD 00ED031E <- переходим сюда 0061A074 . A66CF177 DD GDI32.DeleteDC 0061A078 . A059F177 DD GDI32.SelectObject 00ED031E 68 B5B84A08 PUSH 84AB8B5 00ED0323 -E9 D85C1368 JMP PROTEKT.#1 сколько тут переходов ничего себе как импорт засрат 00ED029A 68 4CF1B060 PUSH 60B0F14C 00ED029F -E9 5C5D1368 JMP PROTEKT.#1 00ED02A4 90 NOP 00ED02A5 90 NOP 00ED02A6 68 35C4FF2A PUSH 2AFFC435 00ED02AB -E9 505D1368 JMP PROTEKT.#1 00ED02B0 90 NOP 00ED02B1 90 NOP 00ED02B2 68 66400306 PUSH 6034066 00ED02B7 -E9 445D1368 JMP PROTEKT.#1 00ED02BC 90 NOP 00ED02BD 90 NOP 00ED02BE 68 33B014F0 PUSH F014B033 00ED02C3 -E9 385D1368 JMP PROTEKT.#1 00ED02C8 90 NOP 00ED02C9 90 NOP 00ED02CA 68 FF4A62BE PUSH BE624AFF 00ED02CF -E9 2C5D1368 JMP PROTEKT.#1 00ED02D4 90 NOP 00ED02D5 90 NOP 00ED02D6 68 429AB4B1 PUSH B1B49A42 00ED02DB -E9 205D1368 JMP PROTEKT.#1 00ED02E0 90 NOP 00ED02E1 90 NOP 00ED02E2 68 64C77F04 PUSH 47FC764 00ED02E7 -E9 145D1368 JMP PROTEKT.#1 00ED02EC 90 NOP 00ED02ED 90 NOP 00ED02EE 68 3684E4DE PUSH DEE48436 00ED02F3 -E9 085D1368 JMP PROTEKT.#1 00ED02F8 90 NOP 00ED02F9 90 NOP 00ED02FA 68 4083FE46 PUSH 46FE8340 00ED02FF -E9 FC5C1368 JMP PROTEKT.#1 и т.д. переходим на PROTEKT.#1 (69006000) а это чё за интерпретатор может кто-нибудь объяснить 69006000 > $ EB 14 JMP SHORT PROTEKT.69006016 69006002 $ EB 04 JMP SHORT PROTEKT.69006008 69006004 . E8 F0 29 00 ASCII "ир)",0 69006008 > 50 PUSH EAX 69006009 . 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4] 6900600D . 874424 08 XCHG DWORD PTR SS:[ESP+8],EAX 69006011 . 894424 04 MOV DWORD PTR SS:[ESP+4],EAX 69006015 . 58 POP EAX 69006016 > 60 PUSHAD 69006017 . 9C PUSHFD 69006018 . FC CLD 69006019 . E8 00000000 CALL PROTEKT.6900601E 6900601E $ 5E POP ESI 6900601F . 8B56 E6 MOV EDX,DWORD PTR DS:[ESI-1A] 69006022 . 8D5416 E2 LEA EDX,DWORD PTR DS:[ESI+EDX-1E] 69006026 . 8B02 MOV EAX,DWORD PTR DS:[EDX] 69006028 . B9 00100000 MOV ECX,1000 6900602D . 3BC1 CMP EAX,ECX 6900602F . 76 0B JBE SHORT PROTEKT.6900603C 69006031 > 2BE1 SUB ESP,ECX 69006033 . 2BC1 SUB EAX,ECX 69006035 . 850424 TEST DWORD PTR SS:[ESP],EAX 69006038 . 3BC1 CMP EAX,ECX 6900603A .^77 F5 JA SHORT PROTEKT.69006031 6900603C > 2BE0 SUB ESP,EAX 6900603E . 8B0424 MOV EAX,DWORD PTR SS:[ESP] 69006041 . 8BFC MOV EDI,ESP 69006043 . 57 PUSH EDI 69006044 . 56 PUSH ESI 69006045 . 8BF2 MOV ESI,EDX 69006047 . 8B0A MOV ECX,DWORD PTR DS:[EDX] 69006049 . C1E9 02 SHR ECX,2 6900604C . F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS> 6900604E . 5E POP ESI 6900604F . 5F POP EDI 69006050 . 893F MOV DWORD PTR DS:[EDI],EDI 69006052 . 8D87 00040000 LEA EAX,DWORD PTR DS:[EDI+400] 69006058 . 8947 04 MOV DWORD PTR DS:[EDI+4],EAX 6900605B . 8D5E E2 LEA EBX,DWORD PTR DS:[ESI-1E] 6900605E . 895F 08 MOV DWORD PTR DS:[EDI+8],EBX 69006061 . 015F 1C ADD DWORD PTR DS:[EDI+1C],EBX 69006064 . 035F 14 ADD EBX,DWORD PTR DS:[EDI+14] 69006067 . FFE3 JMP EBX кто-нибудь встеречался с таким засиранием импорта? и как его обойти? в олле не могу трассировать инты старом перехвачены ![]() |
|
Создано: 08 августа 2007 22:48 · Поправил: huckfuck · Личное сообщение · #23 В экзешнике демки "Смерть шпионам" (стар 4.7) нашёл байты выхода из ВМ: 00AFAA92 8D47 70 LEA EAX,DWORD PTR DS:[EDI+70] 00AFAA95 C7C2 D8A51D00 MOV EDX,1DA5D8 00AFAA9B E8 00000000 CALL PROTECT.00AFAAA0 00AFAAA0 59 POP ECX 00AFAAA1 3391 8074ECFF XOR EDX,DWORD PTR DS:[ECX+FFEC7480] 00AFAAA7 01FA ADD EDX,EDI 00AFAAA9 8B12 MOV EDX,DWORD PTR DS:[EDX] 00AFAAAB 8910 MOV DWORD PTR DS:[EAX],EDX 00AFAAAD FF67 70 JMP DWORD PTR DS:[EDI+70] // 009EA67C 009EA67C 58 POP EAX 009EA67D 03E0 ADD ESP,EAX 009EA67F 9D POPFD 009EA680 61 POPAD 009EA681 C3 RETN // здесь выход из колла, прыгающего в ВМ, или на ОЕП Может, кому-нибудь пригодится Искать их надо в protect.dll ![]() |
|
Создано: 09 августа 2007 05:22 · Личное сообщение · #24 |
|
Создано: 09 августа 2007 10:52 · Личное сообщение · #25 Faza то есть кароче можно вообще вырезать импорт типа 00ED031E 68 B5B84A08 PUSH 84AB8B5 00ED0323 -E9 D85C1368 JMP PROTEKT.#1 из 0061A05C . 516EF177 DD GDI32.CreateCompatibleBitmap 0061A060 . C59FF177 DD GDI32.GetDIBits 0061A064 . 3B6AF177 DD GDI32.DeleteObject 0061A068 . 105EF177 DD GDI32.CreateCompatibleDC 0061A06C . C06DF177 DD GDI32.BitBlt 0061A070 . 1E03ED00 DD 00ED031E <- это можно вырезать? 0061A074 . A66CF177 DD GDI32.DeleteDC 0061A078 . A059F177 DD GDI32.SelectObject я правильно понял но тогда придется и из EXE эту хрень вырезать у меня OEP 005C5869 > $ 6A 60 PUSH 60 005C586B . 68 A8CD6200 PUSH dumped_.0062CDA8 005C5870 . E8 671B0000 CALL dumped_.005C73DC 005C5875 . BF 94000000 MOV EDI,94 005C587A . 8BC7 MOV EAX,EDI 005C587C . E8 BFDAFFFF CALL dumped_.005C3340 005C5881 . 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP 005C5884 . 8BF4 MOV ESI,ESP 005C5886 . 893E MOV DWORD PTR DS:[ESI],EDI 005C5888 . 56 PUSH ESI ; /pVersionInformation 005C5889 . FF15 10A16100 CALL DWORD PTR DS:[61A110] ; \GetVersionExA 005C588F . 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10] 005C5892 . 890D 04E39500 MOV DWORD PTR DS:[95E304],ECX 005C5898 . 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4] 005C589B . A3 10E39500 MOV DWORD PTR DS:[95E310],EAX 005C58A0 . 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8] 005C58A3 . 8915 14E39500 MOV DWORD PTR DS:[95E314],EDX 005C58A9 . 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C] 005C58AC . 81E6 FF7F0000 AND ESI,7FFF 005C58B2 . 8935 08E39500 MOV DWORD PTR DS:[95E308],ESI 005C58B8 . 83F9 02 CMP ECX,2 005C58BB . 74 0C JE SHORT dumped_.005C58C9 005C58BD . 81CE 00800000 OR ESI,8000 005C58C3 . 8935 08E39500 MOV DWORD PTR DS:[95E308],ESI 005C58C9 > C1E0 08 SHL EAX,8 005C58CC . 03C2 ADD EAX,EDX 005C58CE . A3 0CE39500 MOV DWORD PTR DS:[95E30C],EAX 005C58D3 . 33F6 XOR ESI,ESI 005C58D5 . 56 PUSH ESI ; /pModule => NULL 005C58D6 . 8B3D 48A16100 MOV EDI,DWORD PTR DS:[61A148] ; |kernel32.GetModuleHandleA 005C58DC . FFD7 CALL EDI ; \GetModuleHandleA т.е я дамп снял но не трассируя программу в отладчике интересно вообще это возможно дело в том что в exe идут вызовы старовских функций и проверяется результат их выполнения НЕ ВЕРИШЬ Faza сам посмотри godfather.jino-net.ru/TheIOfTheDragon.rar ![]() |
|
Создано: 10 августа 2007 07:45 · Личное сообщение · #26 То что выложил просит диска, а пока проверка диска не пройдет стар не распакует прогу, те OEP ты не увидишь А импорт на прот можешь вырезать, OEP Вроде правельно , только вот понять не могу почему у тебя выход на ВМ в импорте оказался... обычно он по другому распологается , но у тебя и версия старая 3 так что там я не знаю. ![]() |
|
Создано: 10 августа 2007 22:09 · Личное сообщение · #27 с этой штукой запускается? если что приводы выруби ![]() ![]() |
|
Создано: 11 августа 2007 10:15 · Поправил: huckfuck · Личное сообщение · #28 GodFather пишет: Найдя OEP в старе я принялся руками восстанавливать импорт зайдя во внутрь функции я встретился с куском кода 0105048E 68 35C4FF2A PUSH 2AFFC435 01050493 -E9 685BFB67 JMP PROTEKT.#1 ну и как дальше импорт восстанавливать когда вызов идёт вовнутрь своеобразного интерпретатора? Просто делаешь New origin here на место вызова функции импорта, дальше открываешь Memory map, находишь .text нужной dll-ки, нажимаешь F2, нажимаешь F9, брякнешься в dll-ке, смотришь, что за функция, восстанавливаешь в ImpRec, повторяешь, пока не восстановишь все функции импорта ![]() |
|
Создано: 11 августа 2007 21:34 · Личное сообщение · #29 |
|
Создано: 11 августа 2007 22:41 · Личное сообщение · #30 |
|
Создано: 13 августа 2007 22:19 · Личное сообщение · #31 решил я этот вызов вм перекопировать с точности с указанными адресами а также две команды push-jmp# чтобы можно было дебажить в другую прогу в итоге вышло jmp ebx идет в какую-то левую память в адрес D2350d0c наверно в результате работы проги в стек ложатся какие-то данные а ф-ция их читает и формируется адрес перехода т.е банальное копирование кода ни к чему не приводит даже если адреса команд в памяти сохранить прежними ![]() |
<< . 1 . 2 . 3 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Star Force Forever |