Сейчас на форуме: (+6 невидимых) |
eXeL@B —› Протекторы —› SafeDisc 4.1 |
. 1 . 2 . 3 . 4 . >> |
Посл.ответ | Сообщение |
|
Создано: 15 сентября 2005 10:07 · Личное сообщение · #1 |
|
Создано: 15 сентября 2005 10:38 · Личное сообщение · #2 Bit-hack В версиях вплоть до 3.20 ОЕР видно невооруженным глазом, я грузил в OllyDbg, прыжек в другую секцию и есть ОЕР, антидебаг обошел своеобразно в SoftICE, зайди на ветку http://www.exelab.ru/f/action=vthread&forum=2&topic=2087&p age=3 ----- Research is my purpose |
|
Создано: 15 сентября 2005 14:57 · Личное сообщение · #3 |
|
Создано: 15 сентября 2005 15:31 · Поправил: Error_Log · Личное сообщение · #4 |
|
Создано: 15 сентября 2005 16:37 · Личное сообщение · #5 |
|
Создано: 15 сентября 2005 19:13 · Личное сообщение · #6 |
|
Создано: 15 сентября 2005 20:53 · Личное сообщение · #7 Bit-hack Глянь статью про третий SD - там в принципе изложены некоторые основы восстановления наномитов в SD, но не принимай всё,что там написано,за эталон - тут возможны различные варианты организации этого защитного механизма. Далее чем и как ты собираешься распаковывать? Т.к. я использовал SoftIce и так сказать писал инлайн-патч (в принципе как и описывается в известных статьях). И,кстати,хотелось бы узнать,что ты распаковываешь. ----- the Power of Reversing team |
|
Создано: 16 сентября 2005 06:33 · Личное сообщение · #8 |
|
Создано: 16 сентября 2005 23:05 · Личное сообщение · #9 |
|
Создано: 19 сентября 2005 02:18 · Личное сообщение · #10 |
|
Создано: 19 сентября 2005 02:21 · Личное сообщение · #11 Bit-hack, я ломал айсом... Фишка в том, что процесс циклился перед переходом на ОЕП и дальше запускался айс с айсэкстом. Фича в том, что второй раз игра уже не запускалась - палила отладчик... Чтобы исправить эту гадость - использовался патченный драйвер сэйфдиска. С ним и полностью упротекченным айсэкстом (!protect on для всех опций) игра запускалась. Автоматизировалось в моем случае достаточно просто... Находились феньки вида CC C3 CC CC и более динные типа CC и несколько байтов мусора. Вторые феньки восстанавливались тупым выполнением кода по этому адресу и процесс-отладчик восстанавливал байтики, а с первым случаем я досконально не разобрался, но по виду кода практически всегда получалось правильно восстановить верные байты. |
|
Создано: 19 сентября 2005 02:47 · Личное сообщение · #12 |
|
Создано: 19 сентября 2005 06:23 · Личное сообщение · #13 |
|
Создано: 19 сентября 2005 08:15 · Личное сообщение · #14 MoonShiner пишет: использовался патченный драйвер сэйфдиска ... Поподробнеее.... Где ты и что патчил? Я нашёл в драйвере табличку с адресами функций, выполняющих анти-отладку. Там этих функций около 8. На эти функции переходит джамп с регистровой адресацией+XX(вроде так). А эта функций с джампами вызывается примерно таким кодом: call Func test eax, eax jz XXX Что патчить? Все функции по отдельности или как? Я в дровах не силён, по этому не могу разобраться, что к чему... А теперь немного про наномиты. Наномиты там реализованы как и в арме, без дровов и всяких фишек. Есть отладчик, называется он ~e5.0001 весит 73 кило, у него есть длл, зовётся ~df394b.tmp, весит мег с копейками. В темпе создаются папки такого вида: ~e5.0001.dir.0000 ~e5.0001.dir.0001 ~e5.0001.dir.0002 ~e5.0001.dir.0003 Всего этих папок 4. В них лежат фалы сэйфдиска. Видать они юзаются для запуска. В длл ~df394b.tmp есть функции с ОЧЕНЬ интересными названиями - CC2CDifferenceFile::CreateDifferenceFile, CKeyBasic::GetKeyData, CModuleMonitor::IsEntryChecksumOkay, CModuleMonitor::IsModuleChecksumOkay, CAltAsc::SetupInterruptHandler... Дак вот, отладка производится в длл с помощью обычного цикла WaitForDebugEvent... После вызова идут кучи call`ов, джампов, в главном call`е производится WriteProcessMemory, для того, чтобы найти работу с таблицей наномитов надо весь этот код перерыть Я в одиночку это не осилю, т.к. там действительно очень много кода В принципе можно юзать и твой способ, но как мне кажется, он не совсем идеален, в идеале надо пропатчить цикл отладки, чтобы он сам по своей табличке всё повтыкал наместа. Твоему способу уже поставлен надёжный заслон: SD перестал юзать int 3, а теперь там мусор (хотя даже в четвёртой версии я его не встретил, но в другом топике сказано про это). Кто хочет со мной поковрять эту функцию, как я понимаю, она во всех версиях практически одинакова. Или есть другой способ - захучить WaitProcessMemory и возврощать заместо DEBUG_EVENT свою DEBUG_EVENT, при это с каждой интерацией возвращать адрес отладочного события+1. ИЛИ есть более действенный способ - создать список из всех адресов наномитов, загнать список в отладочную длл и написать код, который будет бежать по списку и выдоавть эту инфу заместо WaitForDebugEvent. Последний способ более действенный и правильный, его надо только реализовать (но не будет работать, если заместо int 3 будет мусор). Кто хочет написать код для построения списка адресов наномитов? |
|
Создано: 19 сентября 2005 08:36 · Личное сообщение · #15 |
|
Создано: 19 сентября 2005 08:50 · Личное сообщение · #16 |
|
Создано: 19 сентября 2005 10:40 · Личное сообщение · #17 Error_Log пишет: А как ты с наномитами боролся ? ...по-разному ,т.к. в SD (версии 3.10.20) используются различные варианты кражи оригинальных байт. К примеру,минимальная длина наномита должна быть 2 байта, т.е. какая-нибудь двухбайтовая команда. Соответственно в коде необходимо делать упор на поиск двухбайтовой связки CC CC,но... как тут уже заметили,в SD стали активно применяться т.н. "грязные" наномиты,например: CC 00CC CC ...это на самом деле команды: TEST EAX, EAX JZ ... Или такой вариант: CC CC CC 05 CC CC ...это будет: TEST ECX, ECX MOV ECX, EAX JNZ ... Как видно из примеров,те две инструкции CC становится искать неэффективно.Можно применить следующий код: mov eax, 00401000 cmp word ptr [eax], CCCC je @TEST @TEST: cmp byte ptr [eax-02], CC je @GoBack @GoBack: sub eax, 2 ...этот код отлично работает на указанных выше примерах,но имеет несколько недостатков, т.к. иногда могут попастся такие наномиты: CC 0D -> какая-нибудь двухбайтовая команда. Как вылавливать последние,я не знаю. Важным с моей точки зрения,является предварительное удаление фальш-наномитов,т.к. они мешают поиску настоящих наномитов. В SD инструкции CC,являющиеся наномитами,восстанавливаются после второго выполнения этих команд. Также встречается некоторое разнообразие,например: SGDT ESI SGDT EDI SGDT ESP SIDT EDX UD2 ...это всё либо трёх-, либо шестибайтовые спёртые команды.И если эти варианты восстанавливаются сами сразу после их выполнения,то следующий вариант необходимо немного модифицировать,чтобы восстановить,иначе всё может вывалиться в трубу: 0F01C9 MWAIT 0F01C8 MONITOR ...а именно заменяем третий байт на опкод CA - получается команда SIDT EDX, которая сама прекрасно выполняется и восстанавливается. Ну и в конце концов,не говоря уже о процедуре SD №2, которая тоже является неким подобием наномитов и которую я,кстати,тоже толком не знаю,как можно эффективно восстанавливать. ----- the Power of Reversing team |
|
Создано: 19 сентября 2005 20:53 · Личное сообщение · #18 DillerInc пишет: минимальная длина наномита должна быть 2 байта Я кажись и 1-о байтовые видел. Насколько я понимаю, ты использовал немного модифицированный способ из статьи. В случае с мусорными командами у меня есть 2 предложения: 1. Запатчить отладчик, чтобы написал всё сам (эффективно, но сложно) 2. Написать длл, юзающую движок дизасма и составить список применяемых комманд для наномитов, после чего загрузить библу и ехать по коду в поисках наномитов. Это модифицированный способ из статьи. Error_Log пишет: Как вариант, можно попробовать оставить приклеенной к исполняемому файлу секцию отладчика SD В смысле оставить секции загрузчика? Толку-то от них Там весь код закриптован, а если ты посчитал, что именно в одной из секций происходит дебаг, я огорчу, он производится в другом файле, который проверяет и CRC EP и ещё что-то, так что его ты работать не заставишь на распакованном ехе. Вощм, мне надо юзать способ с табличкой наномитов и патчинга отладчика. |
|
Создано: 20 сентября 2005 01:43 · Личное сообщение · #19 Кажись понял, чего у меня отладчик палится с подменненой таблицей векторов прерываний. В общем, после загрузки SoftICE посмотрел content DRx, обратил внимание DR7=00000400; DR6=FFFF0FF0; при таких раскладах достаточно подгрузить на время декриптовки оригинальную таблицу векторов прерываний, и отладчик не попалится. Но стоит в отладчике хоть раз установить BPM не важно на что, при вводе команды cpu наблюдаю такое:в DR0-DR3 прописываются бряки, а DR7=30000700; DR6=FFFF4FF4; Вот теперь даже с оригинальной IDT будет обнаружен отладчик, даже если затереть бряки. Значения DR7 и DR6 после не меняются, спасает только ребут. Надо пропатчить это так, чтобы небыло палева отладчика через DRx, тогда, возможно, можно будет решить проблему необходимости ребута системы двумя bat-файлами, которые на время декриптовки будут подменять IDT на оригинальную, а потом загружать IDT для SoftICE (я в общем так и делал). Пробовал патчить драйвер SECDRV.SYS, но, кажись, дело это гиблое, все равно что бороду по волоску выскубывать; сегодня вечером еще попробую пропатчить SoftICE. Утилита для IDT у меня есть, если надо приаттачу. ЗЫ: если кто знает, подскажите для чего SoftICE юзает DR7 и откуда там это постоянное число. ----- Research is my purpose |
|
Создано: 20 сентября 2005 04:55 · Личное сообщение · #20 Bit-hack пишет: Я кажись и 1-о байтовые видел ...возможно,но в Call Of Duty я с такими не встречался. Bit-hack пишет: Насколько я понимаю, ты использовал немного модифицированный способ из статьи ...конечно.Пришлось подстраиваться под разного рода сюрпризы.Ещё раз повторяю: то,что описывается в статье про NFSU2, - это решение очень простого варианта третей версии. ----- the Power of Reversing team |
|
Создано: 20 сентября 2005 12:19 · Личное сообщение · #21 Error_Log пишет: для чего SoftICE юзает DR7 и откуда там это постоянное число ...значит,у Айрапетяна написано: "Регистр управления отладкой (DR7) разрешает или запрещает брейкпоинты и задает условия для их срабатывания". "Если отладчика в памяти нет,то данный регистр содержит значение 400h.В противном случае значение будет другим". ----- the Power of Reversing team |
|
Создано: 22 сентября 2005 01:40 · Личное сообщение · #22 DillerInc, сенк за Айрапетяна. Пропатчил SoftICE и решилась проблема с необходимостью перезагрузки. Теперь катит 2 bat-файла, один грузит игру, второй грузит IDT для SoftICE. Как показала практика, значение 400h в DR7 может быть и с загруженным SoftICE, если не ставить бряки. Далее иструкцией типа (400h | 3xxh) это значение устанавливается SoftICE-ом в 7xxh. SafeDisk такого не прощает... В общем патчить надо NTICE.SYS в 4-х местах. Побочных эффектов не выявленно. Если кому надо пропатченный драйвер САЙСА можно куда-то выложить, или на мыло. ...теперь можно приступать к наномитам ----- Research is my purpose |
|
Создано: 22 сентября 2005 03:15 · Личное сообщение · #23 |
|
Создано: 22 сентября 2005 06:07 · Личное сообщение · #24 |
|
Создано: 22 сентября 2005 08:37 · Личное сообщение · #25 |
|
Создано: 22 сентября 2005 09:46 · Личное сообщение · #26 |
|
Создано: 22 сентября 2005 10:12 · Личное сообщение · #27 .text:00047111 sub_47111 proc near ; CODE XREF: sub_46CF9+10Ep .text:00047111 ; sub_47001+3Cp ... .text:00047111 push ebx .text:00047112 mov ebx, dr7 .text:00047115 or al, al .text:00047117 jz short loc_47138 .text:00047119 cmp al, 2 .text:0004711B jz short loc_47151 .text:0004711D ja short loc_4716A .text:0004711F and ebx, 0FF0FFFF3h .text:00047125 shl edx, 14h .text:00047128 or ebx, edx .text:0004712A or ebx, 0Ch ;БЫЛО 30Сh .text:00047130 mov dr1, esi .text:00047133 mov dr7, ebx .text:00047136 jmp short loc_47181 .text:00047138 ; ---------------------------------------------------------------------- ----- .text:00047138 .text:00047138 loc_47138: ; CODE XREF: sub_47111+6j .text:00047138 and ebx, 0FFF0FFFCh .text:0004713E shl edx, 10h .text:00047141 or ebx, edx .text:00047143 or ebx, 3 ;БЫЛО 303h .text:00047149 mov dr0, esi .text:0004714C mov dr7, ebx .text:0004714F jmp short loc_47181 .text:00047151 ; ---------------------------------------------------------------------- ----- .text:00047151 .text:00047151 loc_47151: ; CODE XREF: sub_47111+Aj .text:00047151 and ebx, 0F0FFFFCFh .text:00047157 shl edx, 18h .text:0004715A or ebx, edx .text:0004715C or ebx, 30h ;БЫЛО 330h .text:00047162 mov dr2, esi .text:00047165 mov dr7, ebx .text:00047168 jmp short loc_47181 .text:0004716A ; ---------------------------------------------------------------------- ----- .text:0004716A .text:0004716A loc_4716A: ; CODE XREF: sub_47111+Cj .text:0004716A and ebx, 0FFFFF3Fh .text:00047170 shl edx, 1Ch .text:00047173 or ebx, edx .text:00047175 or ebx, 0C0h ;БЫЛО 3С0h .text:0004717B mov dr3, esi .text:0004717E mov dr7, ebx После этого нужно открыть файл в LordPE PE Editor и нажать ? возле надписи Checksum, сохранить изменения. ----- Research is my purpose |
|
Создано: 22 сентября 2005 10:36 · Личное сообщение · #28 Error_Log Дык,это что-ли: Detection from SafeDisc ...которое уже кстати обсуждалось тут... ----- the Power of Reversing team |
|
Создано: 22 сентября 2005 10:55 · Личное сообщение · #29 |
|
Создано: 22 сентября 2005 11:17 · Личное сообщение · #30 |
. 1 . 2 . 3 . 4 . >> |
eXeL@B —› Протекторы —› SafeDisc 4.1 |