Взлом Defrag Professional Version 10

Discussion in 'Реверсинг' started by 0x0c0de, 20 Aug 2007.

  1. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    Взлом 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]
     
    #1 0x0c0de, 20 Aug 2007
    Last edited: 20 Aug 2007
    4 people like this.
  2. GoreMaster

    GoreMaster Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    119
    Likes Received:
    32
    Reputations:
    4
    Жду статей по закейгениваю...мы все уже поняли,что патчить ты умеешь =)
     
  3. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    GoreMaster, ok)))))). Хотите закейгенивание, будет закейгенивание.
     
  4. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    зачем править в hiew,если правится легко и без напрягов в олли? то, что ты правишь, не исправляет лоадер при смене базы загрузки, а сталобыть и олли не будет ругацо. hex-редакторы использовали во времена windasm и softice ;)
     
  5. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    И правда так удобней....... Чет я туплю(((((
     
    #5 0x0c0de, 22 Aug 2007
    Last edited: 22 Aug 2007
    1 person likes this.
  6. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    лучше расписывай алгоритмы ;) проверки, как находишь проверки, етц
    зы:вот када допешу вм, будем что расписывать ;)
     
    1 person likes this.
  7. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    Хорошо.. Хотя я канешн старалась максимально подробно расписать..
    ЗЫ Спс за конструктивную критику)
     
  8. Hellsp@wn

    Hellsp@wn Elder - Старейшина

    Joined:
    29 Apr 2007
    Messages:
    401
    Likes Received:
    153
    Reputations:
    48
    хех, что то все цели у тя слишком лёгкие, не айс это =))
    возьми чтонить посложнее =)

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

    EB_FE New Member

    Joined:
    10 Aug 2007
    Messages:
    12
    Likes Received:
    4
    Reputations:
    5
    0x0c0de
    )))
    У проги
    O&O Defrag 8.5 Build 1788 Professional

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

    Там тоже Wizard: рег. код, триал или купить..
     
    #9 EB_FE, 22 Aug 2007
    Last edited: 22 Aug 2007
  10. GoreMaster

    GoreMaster Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    119
    Likes Received:
    32
    Reputations:
    4
    Жесть...хотя вроде есть тутор для третиё версии стара,но все равно ИМХО круто для нее такое..
    если не ошибаюсь ядерная штука =)
    лучше бы посоветовал фемиду снять =)
     
  11. 0x0c0de

    0x0c0de Elder - Старейшина

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

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

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

    гы)))))). Во занятие! Снимать в 10 версии приглючившевшийся сумасшедшему детектору несуществующий старфорс))))).
     
    #11 0x0c0de, 23 Aug 2007
    Last edited: 23 Aug 2007
    1 person likes this.
  12. EB_FE

    EB_FE New Member

    Joined:
    10 Aug 2007
    Messages:
    12
    Likes Received:
    4
    Reputations:
    5
    0x0c0de
    Вот выложил EXE.

    http://ifolder.ru/3082453

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

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

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

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    Скоро надо будет переименовывать тему из взлом десятой версии в распаковку восьмой.
    Как вы там говорите? Старфорс? Ну ладно.. Я по поводу этого сказать ниче не могу - у меня не детектирует. Может и старфорс.

    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
    Вопрос исчерпан.
     
    #13 0x0c0de, 24 Aug 2007
    Last edited: 24 Aug 2007
  14. Hellsp@wn

    Hellsp@wn Elder - Старейшина

    Joined:
    29 Apr 2007
    Messages:
    401
    Likes Received:
    153
    Reputations:
    48
    поробуй Protection ID 5.2c или 6.0 (если найдёшь) он всякое г типа старфорса
    должен сдетектить....
     
    2 people like this.
  15. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    Усе, переборола свою аццкую лень. Довела до конца.....

    Файл тут.
    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

    А теперь, следственный эксперимент. Смотрим на энтри поинт и видим, что сигнатурами старфорса тут не пахнет. Ну надо ж было так дизинформировать общественность!=\ Где вы там старфорс нашли я НЕ ПОНИМАЮ. Мож это прот собственного сочинения)))))))
     
    #15 0x0c0de, 24 Aug 2007
    Last edited: 24 Aug 2007
    2 people like this.