Русский / Russian English / Английский

Сейчас на форуме: rmn, user99 (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Протекторы —› SafeDisc 4.1
. 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение


Ранг: 303.7 (мудрец)
Статус: Участник
tPORt Manager

Создано: 15 сентября 2005 10:07 New!
Цитата · Личное сообщение · #1

Кто что может сказать? Я даже дебаггером проехаться не смог (NtQueryInformationProcess обхожу руками). Алкохол не катит. Как его снимать первый вопрос (хотябы до ОЕР дойти, бряк на переход jmp OEP не катит, т.к. анти-дебаг), ну а если не кто не знает, то как его эмулить?.

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 15 сентября 2005 10:38 New!
Цитата · Личное сообщение · #2

Bit-hack
В версиях вплоть до 3.20 ОЕР видно невооруженным глазом, я грузил в OllyDbg, прыжек в другую секцию и есть ОЕР, антидебаг обошел своеобразно в SoftICE, зайди на ветку
http://www.exelab.ru/f/index.php?action=vthread&forum=2&topic=2087&p age=3


Ранг: 303.7 (мудрец)
Статус: Участник
tPORt Manager

Создано: 15 сентября 2005 14:57 New!
Цитата · Личное сообщение · #3

Прокотило, сенк. Но там замуты с наномитами, щас что-нибудь попробую А вообще, не мог бы ты поделиться сорсом для востановления наномитов, если у тебя конечно он есть (не из статьи).

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 15 сентября 2005 15:31 · Поправил: Error_Log New!
Цитата · Личное сообщение · #4

Это к DillerInc, он третим занимался SafeDisk-ом, а я только 2.51, там наномитов небыло, зато замуты с восстановлением импорта.

Ранг: 186.8 (ветеран)
Статус: Участник

Создано: 15 сентября 2005 16:37 New!
Цитата · Личное сообщение · #5

Bit-hack, наномиты длиннее 4-х байтов восстанавливаются прямо в коде, а не эмулируются...


Ранг: 303.7 (мудрец)
Статус: Участник
tPORt Manager

Создано: 15 сентября 2005 19:13 New!
Цитата · Личное сообщение · #6

MoonShiner
Я знаю, но это надобы автоматизировать А вот как? Точнее, мне интересно, что похукано, что нельзя приатачиться к процессу олей? А, MoonShiner?


Ранг: 283.6 (наставник)
Статус: Участник
Author of GeTaOEP

Создано: 15 сентября 2005 20:53 New!
Цитата · Личное сообщение · #7

Bit-hack
Глянь статью про третий SD - там в принципе изложены некоторые основы восстановления наномитов в SD, но не принимай всё,что там написано,за эталон - тут возможны различные варианты организации этого защитного механизма.
Далее чем и как ты собираешься распаковывать? Т.к. я использовал SoftIce и так сказать писал инлайн-патч (в принципе как и описывается в известных статьях).
И,кстати,хотелось бы узнать,что ты распаковываешь.


Ранг: 303.7 (мудрец)
Статус: Участник
tPORt Manager

Создано: 16 сентября 2005 06:33 New!
Цитата · Личное сообщение · #8

Я распаковываю THE SETTLERS — Наследие Королей.


Ранг: 283.6 (наставник)
Статус: Участник
Author of GeTaOEP

Создано: 16 сентября 2005 23:05 New!
Цитата · Личное сообщение · #9

Bit-hack пишет:
THE SETTLERS — Наследие Королей

...если умудрюсь достать оригинальный диск,то надо будет глянуть,что там за тема.
А так спрашивай тут,если что будет не ясно с распаковкой - постараюсь помочь .


Ранг: 303.7 (мудрец)
Статус: Участник
tPORt Manager

Создано: 19 сентября 2005 02:18 New!
Цитата · Личное сообщение · #10

Гы, засплейсил я WriteProcessMemory для отладчика, он мне такой лог выдал.... Вощм, кажись наномиты проще восстанавливать путём патча отладчика СФ. Хотя технология пока не известна

Ранг: 186.8 (ветеран)
Статус: Участник

Создано: 19 сентября 2005 02:21 New!
Цитата · Личное сообщение · #11

Bit-hack, я ломал айсом... Фишка в том, что процесс циклился перед переходом на ОЕП и дальше запускался айс с айсэкстом. Фича в том, что второй раз игра уже не запускалась - палила отладчик... Чтобы исправить эту гадость - использовался патченный драйвер сэйфдиска. С ним и полностью упротекченным айсэкстом (!protect on для всех опций) игра запускалась. Автоматизировалось в моем случае достаточно просто... Находились феньки вида CC C3 CC CC и более динные типа CC и несколько байтов мусора. Вторые феньки восстанавливались тупым выполнением кода по этому адресу и процесс-отладчик восстанавливал байтики, а с первым случаем я досконально не разобрался, но по виду кода практически всегда получалось правильно восстановить верные байты.

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 19 сентября 2005 02:47 New!
Цитата · Личное сообщение · #12

MoonShiner пишет:
Вторые феньки восстанавливались тупым выполнением кода по этому адресу

В версии 3.20 они восстанавливаются, но не после первого выполнения, т. е если этот код выполняется часто.

Ранг: 186.8 (ветеран)
Статус: Участник

Создано: 19 сентября 2005 06:23 New!
Цитата · Личное сообщение · #13

Error_Log, не знал... Мне в руки только 3.10 попадал.


Ранг: 303.7 (мудрец)
Статус: Участник
tPORt Manager

Создано: 19 сентября 2005 08:15 New!
Цитата · Личное сообщение · #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 будет мусор). Кто хочет написать код для построения списка адресов наномитов?

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 19 сентября 2005 08:36 New!
Цитата · Личное сообщение · #15

Bit-hack
Как вариант, можно попробовать оставить приклеенной к исполняемому файлу секцию отладчика SD, и ничего не восстанавливать, может в твоем случае это будет проще, хотя и не очень красиво. Вопрос будет только в том, как заставить это все работать...

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 19 сентября 2005 08:50 New!
Цитата · Личное сообщение · #16

...хотя судя по твоему описанию не проще.
DillerInc
А как ты с наномитами боролся ?


Ранг: 283.6 (наставник)
Статус: Участник
Author of GeTaOEP

Создано: 19 сентября 2005 10:40 New!
Цитата · Личное сообщение · #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, которая тоже является неким подобием наномитов и которую я,кстати,тоже толком не знаю,как можно эффективно восстанавливать.


Ранг: 303.7 (мудрец)
Статус: Участник
tPORt Manager

Создано: 19 сентября 2005 20:53 New!
Цитата · Личное сообщение · #18

DillerInc пишет:
минимальная длина наномита должна быть 2 байта

Я кажись и 1-о байтовые видел. Насколько я понимаю, ты использовал немного модифицированный способ из статьи. В случае с мусорными командами у меня есть 2 предложения:
1. Запатчить отладчик, чтобы написал всё сам (эффективно, но сложно)
2. Написать длл, юзающую движок дизасма и составить список применяемых комманд для наномитов, после чего загрузить библу и ехать по коду в поисках наномитов. Это модифицированный способ из статьи.
Error_Log пишет:
Как вариант, можно попробовать оставить приклеенной к исполняемому файлу секцию отладчика SD

В смысле оставить секции загрузчика? Толку-то от них Там весь код закриптован, а если ты посчитал, что именно в одной из секций происходит дебаг, я огорчу, он производится в другом файле, который проверяет и CRC EP и ещё что-то, так что его ты работать не заставишь на распакованном ехе.

Вощм, мне надо юзать способ с табличкой наномитов и патчинга отладчика.

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 20 сентября 2005 01:43 New!
Цитата · Личное сообщение · #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 и откуда там это постоянное число.


Ранг: 283.6 (наставник)
Статус: Участник
Author of GeTaOEP

Создано: 20 сентября 2005 04:55 New!
Цитата · Личное сообщение · #20

Bit-hack пишет:
Я кажись и 1-о байтовые видел

...возможно,но в Call Of Duty я с такими не встречался.
Bit-hack пишет:
Насколько я понимаю, ты использовал немного модифицированный способ из статьи

...конечно.Пришлось подстраиваться под разного рода сюрпризы.Ещё раз повторяю: то,что описывается в статье про NFSU2, - это решение очень простого варианта третей версии.


Ранг: 283.6 (наставник)
Статус: Участник
Author of GeTaOEP

Создано: 20 сентября 2005 12:19 New!
Цитата · Личное сообщение · #21

Error_Log пишет:
для чего SoftICE юзает DR7 и откуда там это постоянное число

...значит,у Айрапетяна написано:
"Регистр управления отладкой (DR7) разрешает или запрещает брейкпоинты и задает условия для их срабатывания".
"Если отладчика в памяти нет,то данный регистр содержит значение 400h.В противном случае значение будет другим".

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 22 сентября 2005 01:40 New!
Цитата · Личное сообщение · #22

DillerInc, сенк за Айрапетяна.
Пропатчил SoftICE и решилась проблема с необходимостью перезагрузки. Теперь катит 2 bat-файла, один грузит игру, второй грузит IDT для SoftICE. Как показала практика, значение 400h в DR7 может быть и с загруженным SoftICE, если не ставить бряки. Далее иструкцией типа (400h | 3xxh) это значение устанавливается SoftICE-ом в 7xxh. SafeDisk такого не прощает... В общем патчить надо NTICE.SYS в 4-х местах. Побочных эффектов не выявленно. Если кому надо пропатченный драйвер САЙСА можно куда-то выложить, или на мыло.
...теперь можно приступать к наномитам


Ранг: 303.7 (мудрец)
Статус: Участник
tPORt Manager

Создано: 22 сентября 2005 03:15 New!
Цитата · Личное сообщение · #23

Error_Log пишет:
Если кому надо пропатченный драйвер САЙСА можно куда-то выложить, или на мыло.

Мля, напиши патчер, основанный на сингатурках, тебе многие спасибо скажут! Если чё, я готов к сотруднечеству.

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

Создано: 22 сентября 2005 06:07 New!
Цитата · Личное сообщение · #24

To Error_Log: скинь плыз на nexus-2002@yandex.ru

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 22 сентября 2005 08:37 New!
Цитата · Личное сообщение · #25

Прошу потестить патч, все вопросы - в личку.

{ Атач доступен только для участников форума }

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

Создано: 22 сентября 2005 09:46 New!
Цитата · Личное сообщение · #26

Error_Log ты бы мог подробно описать, что там в айсе патчил? У меня айс DS 4.3.2

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 22 сентября 2005 10:12 New!
Цитата · Личное сообщение · #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, сохранить изменения.


Ранг: 283.6 (наставник)
Статус: Участник
Author of GeTaOEP

Создано: 22 сентября 2005 10:36 New!
Цитата · Личное сообщение · #28

Error_Log
Дык,это что-ли:
Detection from SafeDisc
...которое уже кстати обсуждалось тут...

Ранг: 228.7 (наставник)
Статус: Участник
malware research

Создано: 22 сентября 2005 10:55 New!
Цитата · Личное сообщение · #29

DillerInc
угу, и еще патч от типа такого: \\.\NTICE, который исправил проблему с детектом SoftICE-а Армадиллой. А у тебя не получилось, скорее всего, из-за того, что ты не пофиксил cheksum.


Ранг: 283.6 (наставник)
Статус: Участник
Author of GeTaOEP

Создано: 22 сентября 2005 11:17 New!
Цитата · Личное сообщение · #30

Error_Log пишет:
из-за того, что ты не пофиксил cheksum

...наверное.Надо будет попробовать.
. 1 . 2 . 3 . 4 . >>
 eXeL@B —› Протекторы —› SafeDisc 4.1

Видеокурс ВЗЛОМ