Взлом Defrag Professional Version 10 [Инструменты] OllyDbg – отладчик Restorator – редактор ресурсов Hiew – хекс редактор. [Интро] Итак, попалась мне эта программа. Стандартные средства Windows по проведению дефрагментации меня в принципе устраивали, но вроде как попробовать что-то альтернативное хотелось (зачем?). Запустила прогу, а она говорит, что у меня 30 дней триала. И через эти 30 дней меня лишат всех благ данного продукта. Такой расклад меня категорически не устраивал…. Что ж… будем исправлять. [Crack it!] Итак, что мы видим. Программа просит регистрации. Причем просит следующим образом. У нас есть Registration Wizard. Поясняю что это значит. То есть прохождение каждого шага регистрации сопровождается нажатием кнопки “Next”, ну и при успешном завершении “Finish”. По моим наблюдениям в подобного рода программах процедура проверки введенных данных находится в непосредственной близости от вызова функции GetParent (хотя не факт, но это было возможной зацепкой)… Загружаю программу в Olly и вижу такой старт-ап Code: 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 … Не нахожу в нем ничего похожего на начало нормального гуи приложения. Ладно, посмотрим что у нас по джампу Code: 004776BF ^ E9 17FEFFFF JMP oodcnt.004774DB Хы))) И обнаруживаю с++ старт-ап))) Code: 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” и … Попадаем сюда Code: 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 Code: 026957B5 E8 E6E8FFFF CALL oorwiz.026940A0 Там проверяются введенные данные. Если какое-то из полей пусто или введены неверные данные– функция проверки возвращает FALSE (0), если же все хорошо – в eax 1 (заветное TRUE). Довольно стандартно). Теперь вывод: меняем тут (проверка возвращенного значения). Code: 026957BA 85C0 TEST EAX,EAX 026957BC 75 6C JNZ SHORT oorwiz.0269582A Теперь патч. Захожу в hiew и вижу совсем другую ImageBase (10000000)… Что ж. Вполне справедливо. Cнова гружу файл в Olly…. На этот раз я вижу ту же библиотеку, но опять по другому адресу. Поэтому все пришлось выполнить по новой( Code: 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]
зачем править в hiew,если правится легко и без напрягов в олли? то, что ты правишь, не исправляет лоадер при смене базы загрузки, а сталобыть и олли не будет ругацо. hex-редакторы использовали во времена windasm и softice
лучше расписывай алгоритмы проверки, как находишь проверки, етц зы:вот када допешу вм, будем что расписывать
хех, что то все цели у тя слишком лёгкие, не айс это =)) возьми чтонить посложнее =) з.ы. советую AutoDebug любую версию... я в своё время несколько дней просидел над этой прогой...
0x0c0de ))) У проги O&O Defrag 8.5 Build 1788 Professional Защита StarForce V3.X DLL -> StarForce Copy Protection System Там тоже Wizard: рег. код, триал или купить..
Жесть...хотя вроде есть тутор для третиё версии стара,но все равно ИМХО круто для нее такое.. если не ошибаюсь ядерная штука =) лучше бы посоветовал фемиду снять =)
EB_FE, пост не в тему. Во-первых. Рассматривается НЕ 8-я версия, а 10. Во вторых. Основная библиотека, которая и подвергнецц0 патчу, в 10 версии ничем не запакована (а нет, если бы она старфорсом была пакована, я бы это умолчала, тихо бы сняла старфорс и продолжила взлом=))))), то же относится к основному исполняемому модулю. Модулей (по крайней мере в 10 версии) в каталоге полно.. После твоего поста они подверглись тщательному Multi-scan -y и скану по отдельности следующими детекторами: PEID DiE ProtectionID Все они удивленно на меня посмотрели ("ты ч0 параноик?"))))) ну и сказали, что ниче пакованого нет. Тем более старфорса. Ну я думаю. Мож сигнатуры какие глючные? энтропию посчитала. "Not packed". В общем хз. С другой стороны, как я уже имела дело с 10 версией. Хотя я не врубаю если там правда был старфорс, то нахрена его в поздних версиях убирать?!!!! В общем имя файла, запротекченного старфорсом + имя детектора в студию. А сам небось Starforce и Фемидочку за 5 минут снимаешь) Про последний Execryptor я вообще молчу (да даж стыдно его как-то в такой компании упоминать). Он тебе и вовсе на один зуб, ты его уже давно исследовал, написал уже все нужные скрипты и распаковываешь его в полностью автоматическом режиме, однако никому об этом не говоришь)))))). Ps если это и правд0 так, то, канешн, приношу свои извинения, однако в случае если сам не имеешь достаточных познаний говорить подобные фразы неуместно (ибо когда сам не знаешь, говорить что другие не могут (вот эт самое нехорошее - оценка способностей) и не знают - имхо верх дебилизма (даж клавиатура не печатает))......=\ А что я? Я даж за тутор пока не бралась=\ Ибо пока у меня Экзекриптор и Армадилла не доломанные (а у тебя доломанные?)))))). Если сам не умеешь-редиска ты, нехороший человек) гы)))))). Во занятие! Снимать в 10 версии приглючившевшийся сумасшедшему детектору несуществующий старфорс))))).
0x0c0de Вот выложил EXE. http://ifolder.ru/3082453 Инструметы те же юзал PEID 094 DiE_0.62 Если надо, могу потом всю прогу выложить. 9 МБ весит. P.S. убери меня из игнор листа ))
Скоро надо будет переименовывать тему из взлом десятой версии в распаковку восьмой. Как вы там говорите? Старфорс? Ну ладно.. Я по поводу этого сказать ниче не могу - у меня не детектирует. Может и старфорс. Code: 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] энтри поинт. старфорс никогда не видела. вы уж извините. Только не особо агрессивный он для старфорса (точнее вообще не агрессивный). Опять же. Мануалов я не читала. Мда. Импорт я восстановила с помощью следующего самопального скрипта Code: 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 Импорт весь изгажен (ну почти весь..... и скрипт это учитывает), все адреса указывают на выделенную память, но есть одна закономерность. Имеют вид Code: 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 нашла Code: 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 Вопрос исчерпан.
Усе, переборола свою аццкую лень. Довела до конца..... Файл тут. 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 А теперь, следственный эксперимент. Смотрим на энтри поинт и видим, что сигнатурами старфорса тут не пахнет. Ну надо ж было так дизинформировать общественность!=\ Где вы там старфорс нашли я НЕ ПОНИМАЮ. Мож это прот собственного сочинения)))))))