Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Реверсинг (https://forum.antichat.xyz/forumdisplay.php?f=94)
-   -   Взлом Defrag Professional Version 10 (https://forum.antichat.xyz/showthread.php?t=47191)

0x0c0de 20.08.2007 20:56

Взлом Defrag Professional Version 10
 
Взлом Defrag Professional Version 10
[Инструменты]
OllyDbg – отладчик
Restorator – редактор ресурсов
Hiew – хекс редактор.

[Интро]
Итак, попалась мне эта программа. Стандартные средства Windows по проведению дефрагментации меня в принципе устраивали, но вроде как попробовать что-то альтернативное хотелось (зачем?). Запустила прогу, а она говорит, что у меня 30 дней триала. И через эти 30 дней меня лишат всех благ данного продукта. Такой расклад меня категорически не устраивал…. Что ж… будем исправлять.

[Crack it!]
Итак, что мы видим. Программа просит регистрации. Причем просит следующим образом. У нас есть Registration Wizard. Поясняю что это значит. То есть прохождение каждого шага регистрации сопровождается нажатием кнопки “Next”, ну и при успешном завершении “Finish”. По моим наблюдениям в подобного рода программах процедура проверки введенных данных находится в непосредственной близости от вызова функции GetParent (хотя не факт, но это было возможной зацепкой)…
Загружаю программу в Olly и вижу такой старт-ап

Код:

004776BA o>  E8 E59F0000                CALL oodcnt.004816A4
004776BF  ^ E9 17FEFFFF                JMP oodcnt.004774DB
004776C4    55                          PUSH EBP
004776C5    8BEC                        MOV EBP,ESP

Мало похоже на стандартный(( . Быстро посчитала энропию в PeID, тот сказал “Not Packed”. Это радует). Тогда будем изучать … Первый call … Не нахожу в нем ничего похожего на начало нормального гуи приложения. Ладно, посмотрим что у нас по джампу

Код:

004776BF  ^ E9 17FEFFFF                JMP oodcnt.004774DB
Хы))) И обнаруживаю с++ старт-ап)))

Код:

004774DB    6A 60                      PUSH 60
004774DD    68 08F85F00                PUSH oodcnt.005FF808
004774E2    E8 9D7D0000                CALL oodcnt.0047F284
004774E7    8365 FC 00                  AND DWORD PTR SS:[EBP-4],0
004774EB    8D45 90                    LEA EAX,DWORD PTR SS:[EBP-70]
004774EE    50                          PUSH EAX
004774EF    FF15 98E35A00              CALL DWORD PTR DS:[<&KERNEL32.GetStartupInfoW>]      ; kernel32.GetStartupInfoW
004774F5    C745 FC FEFFFFFF            MOV DWORD PTR SS:[EBP-4],-2

Классно)). Но что тогда делает первый call? Ладно, оставим его. Запускаем, программа показывает экран приветствия, порывается потребовать регистрацию, показывает окно, и…… выбрасывая исключение, завершается… Неужели антиоладка? Причем я перепробовала все имеющиеся плагины с максимальными функциями… Но программа упорно не хотела работать под отладчиком. Тогда я вспомнила про этот странный call на entry point.. Антиотладка? Проверяю….. Занопила его и в hiew…. программа заработала под Олей на ура)).
По поводу защиты у меня была идея с GetParent, и я стала ее опробовать. Однако, убив час-полтора, я поняла, что процедура, отвечающая за вывод злого диалога и регистрацию спрятана совсем не в главном модуле…. В директории с программой лежало много длл. Мое внимание привлекла dll oorwiz.dll (с комментарием O&O Registration Wizard) … Однако, просмотрев ресурсы в Restorator, я ничего интересного не нашла… Тогда будем проверять все библиотеки подряд….. Но это не принесло желаемого результата… В одной библиотеке был намек на диалог регистрации, но…. Ссылок на него я не нашла в исполняемом модуле и oorwiz. Это плохо. Тогда я стала присматриваться к защите. Когда триал еще не окончен есть три варианта действий.

*Enter registration code – ввести код
* Continue with unregistered version - юзать триал
* Buy now! – купить (не рассматривается)


Можно выбирать один из пунктов и нажать “Next”. Есть вариант нажать “Cancel”, но тогда вне зависимости от выбранного пункта высвечивается сообщение “Are you sure you want to end the registration process?”. Причем похоже на MessageBox… Если нажмем “Yes” программа завершится. Так. У нас опять есть зацепка… MessageBox… В Olly Dbg ставим точку останова на данную функцию. Сначала я поставила бряк на ASCII версию функи, но когда это не сработало, поставила на Unicode-вариант… И не ошиблась. Но адрес возврата из функции не соответствовал нашему исполняемому модулю, а соответствовал некой библиотеке. Этой библиотекой оказалась уже однажды попавшая под подозрение oorwiz… Тогда теперь будем снова проверять GetParent). Но уже в либе. Итак, ставим точки останова… Выбираем пункт “Enter registration code”… жмем “Next”.. брякаемся на GetParent в первый раз. Но это не тот вызов. Нам нужен вызов, который будет после ввода невалидного ключа. Пропускаем…. Вводим код, имя и название компании (или ничего не вводим)))… “Next” и … Попадаем сюда

Код:

0269578B    50                          PUSH EAX
0269578C    8B87 A0030000              MOV EAX,DWORD PTR DS:[EDI+3A0]
02695792    50                          PUSH EAX
02695793    51                          PUSH ECX
02695794    B9 48EB7002                MOV ECX,oorwiz.0270EB48
02695799    E8 82E3FFFF                CALL oorwiz.02693B20
0269579E    8B57 20                    MOV EDX,DWORD PTR DS:[EDI+20]
026957A1    52                          PUSH EDX
026957A2    FF15 68476F02              CALL DWORD PTR DS:[<&USER32.GetParent>]              ; USER32.GetParent
026957A8    50                          PUSH EAX
026957A9    E8 AE7E0100                CALL oorwiz.026AD65C
026957AE    B9 48EB7002                MOV ECX,oorwiz.0270EB48
026957B3    8BF0                        MOV ESI,EAX
026957B5    E8 E6E8FFFF                CALL oorwiz.026940A0
026957BA    85C0                        TEST EAX,EAX
026957BC    75 6C                      JNZ SHORT oorwiz.0269582A
026957BE    3986 90130000              CMP DWORD PTR DS:[ESI+1390],EAX
026957C4    74 18                      JE SHORT oorwiz.026957DE
026957C6    8D86 30090000              LEA EAX,DWORD PTR DS:[ESI+930]

Вот… Гипотеза почти готова превратиться в научный факт). Первый call после GetParent никакого отношения к защитному механизму не имеет. Все интересные манипуляции начинают проводится во втором call

Код:

026957B5    E8 E6E8FFFF                CALL oorwiz.026940A0
Там проверяются введенные данные. Если какое-то из полей пусто или введены неверные данные– функция проверки возвращает FALSE (0), если же все хорошо – в eax 1 (заветное TRUE). Довольно стандартно).
Теперь вывод: меняем тут (проверка возвращенного значения).

Код:

026957BA    85C0                        TEST EAX,EAX
026957BC    75 6C                      JNZ SHORT oorwiz.0269582A

Теперь патч. Захожу в hiew и вижу совсем другую ImageBase (10000000)… Что ж. Вполне справедливо.
Cнова гружу файл в Olly…. На этот раз я вижу ту же библиотеку, но опять по другому адресу. Поэтому все пришлось выполнить по новой(

Код:

020857BA    .  85C0                      TEST EAX,EAX
Мне надо было узнать смещение этого кода. Смотрим в Executable modules (Alt+E) в OllyDbg и ImageBase oorwiz.dll. А она (ImageBase) равна 02080000. Значит смещение относительно ImageBase 57BA. Теперь снова идем в hiew. И пишем полученный путем недолгих расчетов виртуальный адрес (10000000+57BA=100057BA). И меняем следующим образом. Джампы я править не люблю. Люблю править значения. Поэтому вместо test eax,eax пишу inc eax/nop. Перезапускаю.. Теперь программе все равно какой код введен, все равно для нее он правильный). И пользоваться можно после испытательного срока.

[The end]

GoreMaster 20.08.2007 23:08

Жду статей по закейгениваю...мы все уже поняли,что патчить ты умеешь =)

0x0c0de 20.08.2007 23:17

GoreMaster, ok)))))). Хотите закейгенивание, будет закейгенивание.

Ra$cal 22.08.2007 10:35

зачем править в hiew,если правится легко и без напрягов в олли? то, что ты правишь, не исправляет лоадер при смене базы загрузки, а сталобыть и олли не будет ругацо. hex-редакторы использовали во времена windasm и softice ;)

0x0c0de 22.08.2007 10:53

И правда так удобней....... Чет я туплю(((((

Ra$cal 22.08.2007 11:01

лучше расписывай алгоритмы ;) проверки, как находишь проверки, етц
зы:вот када допешу вм, будем что расписывать ;)

0x0c0de 22.08.2007 11:07

Хорошо.. Хотя я канешн старалась максимально подробно расписать..
ЗЫ Спс за конструктивную критику)

Hellsp@wn 22.08.2007 11:24

хех, что то все цели у тя слишком лёгкие, не айс это =))
возьми чтонить посложнее =)

з.ы. советую AutoDebug любую версию... я в своё время несколько дней просидел над этой прогой...

EB_FE 22.08.2007 23:52

0x0c0de
)))
У проги
O&O Defrag 8.5 Build 1788 Professional

Защита
StarForce V3.X DLL -> StarForce Copy Protection System

Там тоже Wizard: рег. код, триал или купить..

GoreMaster 22.08.2007 23:56

Цитата:

StarForce V3.X DLL -> StarForce Copy Protection System
Жесть...хотя вроде есть тутор для третиё версии стара,но все равно ИМХО круто для нее такое..
если не ошибаюсь ядерная штука =)
лучше бы посоветовал фемиду снять =)

0x0c0de 23.08.2007 08:35

EB_FE, пост не в тему. Во-первых. Рассматривается НЕ 8-я версия, а 10. Во вторых. Основная библиотека, которая и подвергнецц0 патчу, в 10 версии ничем не запакована (а нет, если бы она старфорсом была пакована, я бы это умолчала, тихо бы сняла старфорс и продолжила взлом=))))), то же относится к основному исполняемому модулю. Модулей (по крайней мере в 10 версии) в каталоге полно.. После твоего поста они подверглись тщательному Multi-scan -y и скану по отдельности следующими детекторами:
PEID
DiE
ProtectionID

Все они удивленно на меня посмотрели ("ты ч0 параноик?"))))) ну и сказали, что ниче пакованого нет. Тем более старфорса. Ну я думаю. Мож сигнатуры какие глючные? энтропию посчитала. "Not packed". В общем хз. С другой стороны, как я уже имела дело с 10 версией. Хотя я не врубаю если там правда был старфорс, то нахрена его в поздних версиях убирать?!!!! В общем имя файла, запротекченного старфорсом + имя детектора в студию.

Цитата:

Жесть...хотя вроде есть тутор для третиё версии стара,но все равно ИМХО круто для нее такое..
А сам небось Starforce и Фемидочку за 5 минут снимаешь) Про последний Execryptor я вообще молчу (да даж стыдно его как-то в такой компании упоминать). Он тебе и вовсе на один зуб, ты его уже давно исследовал, написал уже все нужные скрипты и распаковываешь его в полностью автоматическом режиме, однако никому об этом не говоришь)))))). Ps если это и правд0 так, то, канешн, приношу свои извинения, однако в случае если сам не имеешь достаточных познаний говорить подобные фразы неуместно (ибо когда сам не знаешь, говорить что другие не могут (вот эт самое нехорошее - оценка способностей) и не знают - имхо верх дебилизма (даж клавиатура не печатает))......=\ А что я? Я даж за тутор пока не бралась=\ Ибо пока у меня Экзекриптор и Армадилла не доломанные (а у тебя доломанные?)))))). Если сам не умеешь-редиска ты, нехороший человек)

Цитата:

лучше бы посоветовал фемиду снять =)
гы)))))). Во занятие! Снимать в 10 версии приглючившевшийся сумасшедшему детектору несуществующий старфорс))))).

EB_FE 23.08.2007 09:26

0x0c0de
Вот выложил EXE.

http://ifolder.ru/3082453

Инструметы те же юзал
PEID 094
DiE_0.62

Если надо, могу потом всю прогу выложить. 9 МБ весит.

P.S. убери меня из игнор листа ))

0x0c0de 24.08.2007 09:49

Скоро надо будет переименовывать тему из взлом десятой версии в распаковку восьмой.
Как вы там говорите? Старфорс? Ну ладно.. Я по поводу этого сказать ниче не могу - у меня не детектирует. Может и старфорс.

Код:

005A40E7 o>  68 CCDC19A4                PUSH A419DCCC
005A40EC    68 3323265C                PUSH 5C262333
005A40F1    60                          PUSHAD
005A40F2    8D4424 24                  LEA EAX,DWORD PTR SS:[ESP+24]
005A40F6    8B48 FC                    MOV ECX,DWORD PTR DS:[EAX-4]
005A40F9    F7D9                        NEG ECX
005A40FB    2908                        SUB DWORD PTR DS:[EAX],ECX
005A40FD    FF00                        INC DWORD PTR DS:[EAX]
005A40FF    8B00                        MOV EAX,DWORD PTR DS:[EAX]
005A4101    40                          INC EAX
005A4102    05 E7401A00                ADD EAX,1A40E7
005A4107    97                          XCHG EAX,EDI
005A4108    B0 EB                      MOV AL,0EB
005A410A    AA                          STOS BYTE PTR ES:[EDI]

энтри поинт. старфорс никогда не видела. вы уж извините.
Только не особо агрессивный он для старфорса (точнее вообще не агрессивный). Опять же. Мануалов я не читала.
Мда. Импорт я восстановила с помощью следующего самопального скрипта

Код:

var iat_begin
var iat_end
var element
var iat_end_
var retaddr

ask "Input iat begin"
mov iat_begin,$RESULT
cmp iat_begin,0
je fin

ask "Input iat end"
mov iat_end,$RESULT
mov iat_end_,$RESULT
cmp iat_end,0
je fin
mov element,iat_begin
mov eip,[element]

start:
findop eip,#C3#
mov retaddr,$RESULT
bphws retaddr,"x"
run
mov [element],[esp]
add esp,4
add element,4
cmp element,iat_end_
je fin
cmp [element],0
je add_
cmp [element],50000000
ja add_
mov eip,[element]
bphwc retaddr
jmp start

fin:
msg "Done"
ret

add_:
add element,4
cmp element,iat_end_
je fin
mov eip,[element]
bphwc retaddr
jmp start

Импорт весь изгажен (ну почти весь..... и скрипт это учитывает), все адреса указывают на выделенную память, но есть одна закономерность. Имеют вид

Код:

00BA0000    50                          PUSH EAX
00BA0001    50                          PUSH EAX
00BA0002    B8 4A195D09                MOV EAX,95D194A
00BA0007    870424                      XCHG DWORD PTR SS:[ESP],EAX
00BA000A    C10424 06                  ROL DWORD PTR SS:[ESP],6
00BA000E    B8 BF299A20                MOV EAX,209A29BF
00BA0013    310424                      XOR DWORD PTR SS:[ESP],EAX
00BA0016    58                          POP EAX
00BA0017    870424                      XCHG DWORD PTR SS:[ESP],EAX
00BA001A    C3                          RETN

То есть очередной переходник. Доходим до рет, а этот самый рет используется для передачи управления функции. Но вы, конечно, это все уже знаете и, читая мою писанину усмехаетесь. Однако ж продолжу. Из этого следует что. Мне надо найти опкод команды рет это делает findop eip,#C3# . Потом поставить на него хардвар на исполнение
mov retaddr,$RESULT
bphws retaddr,"x"
Потом дойти до рет это у нас run... Остановицц0, забрать с верхушки стека правильный адрес и положить его в таблицу. Ну то, что я изначально запрашиваю адрес начала таблицы и адрес конца - про это вообще не говорю. Это ясно. Ну и хардвар убираем, увеличиваем адреса и идем дальше... Причем... Если встречаем 0 в таблице-перескакиваем, или правильный адрес... это у нас
cmp [element],0
je add_
cmp [element],50000000
ja add_
mov eip,[element]

Почему 50000000? Я намекаю на адрес системной библиотеки. Ну ладно. Вроде там скрипт элементарный.

OEP нашла

Код:

00469103    6A 60                      PUSH 60
00469105    68 30795700                PUSH dumped__.00577930
0046910A    E8 45720000                CALL dumped__.00470354
0046910F    8365 FC 00                  AND DWORD PTR SS:[EBP-4],0
00469113    8D45 90                    LEA EAX,DWORD PTR SS:[EBP-70]
00469116    50                          PUSH EAX
00469117    FF15 38A45A00              CALL DWORD PTR DS:[<&kernel32.GetStartupInfoW>]      ; kernel32.GetStartupInfoW
0046911D    C745 FC FEFFFFFF            MOV DWORD PTR SS:[EBP-4],-2
00469124    BF 94000000                MOV EDI,94
00469129    57                          PUSH EDI
0046912A    6A 00                      PUSH 0
0046912C    8B1D 3CA45A00              MOV EBX,DWORD PTR DS:[<&kernel32.GetProcessHeap>]    ; kernel32.GetProcessHeap
00469132    FFD3                        CALL EBX
00469134    50                          PUSH EAX
00469135    FF15 40A45A00              CALL DWORD PTR DS:[<&kernel32.HeapAlloc>]            ; ntdll.RtlAllocateHeap
0046913B    8BF0                        MOV ESI,EAX
0046913D    85F6                        TEST ESI,ESI

Естессно здесь уже все восстановлено. Единственное что там надо еще повозится с адресами, но это мне лень. Добавить секцию, сделать прививку (муторно очень)... Хотя мб я доделаю... Если доделаю, то выложу. Там несложно.
2EB_FE выкладывать ниче не надо ибо диз есть. Уж гугл-то юзать я умею. Только там не 9 метров, а 11. У меня не анлим, поэтому давайте по-человечески я постоянно десятки мегабайт трафика не могу выкачивать.
По поводу 10 версии. Я не больная (больная канешн, но не настолько). Там правда нет старфорса

Исполняемый файл. Смотрим и удивляемся.
http://slil.ru/24771918
Вопрос исчерпан.

Hellsp@wn 24.08.2007 12:31

поробуй Protection ID 5.2c или 6.0 (если найдёшь) он всякое г типа старфорса
должен сдетектить....

0x0c0de 24.08.2007 12:53

Усе, переборола свою аццкую лень. Довела до конца.....

Файл тут.
http://slil.ru/24772592

Tested : WinXP sp2

По поводу скрипта.... Когда он отработает 2-3 функции все равно надо будет вручную восстановить.

2Hellsp@wn ага .... Его юзала.... Говорит

[!] File appears to have no protection or is using an unknown protection

В общем ладно, но ИМХО это не старфорс=\ Или минимальный протект...

Щас поразбирала пеидовские сигнатуры))) И вот че нашла

[StarForce V3.X DLL -> StarForce Copy Protection System]
signature = E8 ?? ?? ?? ?? 00 00 00 00 00 00
ep_only = true

[StarForce ProActive 1.1 -> StarForce Technology]
signature = 68 ?? ?? ?? ?? FF 25 ?? ?? 57
ep_only = true

[StarForce 3.0 -> StarForce Technology]
signature = 68 ?? ?? ?? ?? FF 25 ?? ?? 63
ep_only = true

[StarForce V3.X -> StarForce Copy Protection System]
signature = 68 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? 00 00 00 00 00
ep_only = true

А теперь, следственный эксперимент. Смотрим на энтри поинт и видим, что сигнатурами старфорса тут не пахнет. Ну надо ж было так дизинформировать общественность!=\ Где вы там старфорс нашли я НЕ ПОНИМАЮ. Мож это прот собственного сочинения)))))))


Время: 04:04