This page has been robot translated, sorry for typos if any. Original content here.

Туториал по взлому QSetup Composer 7

Туториал по взлому QSetup Composer 7 (by rel4nium)

Инструменты:

PEiD
Upx_mod
KWdsm
OlyDGB
Hiew
t.p.e

Для начала определим, чем запакована наша жертва, для этого запустим PEiD:
UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
Теперь нам потребуется анпакер для UPX, самому упиксу это не по зубам, так что будем использовать Upx_mod, для распаковки нас просто нужно запустить Upx_mod так:
unp1_24.exe -d QSetup.exe
Так программа распакована, все остальные операции мы будем проводить над распакованным exe-шником, размером 1,69. Теперь нам нужно посмотреть какие виды защиты используются в программе:


Итак у нас 3 способа защиты, теперь нам нужно найти эти фразы/слова в дизасэмблере, запускаем KWdsm. Определимся, что будем искать:
1) Illegal Registration Code!
2) Unregistered Copy(DEMO)
3) QSetup Composer(DEMO)
Итак после того, как найдены эти фразы, и найдены ближние функции (я всегда ищу ближние переходы функции, т.е je, jne, jmp;):
Illegal Registration Code! - jne 0051D4FB
Unregistered Copy - jmp 0051D369
QSetup Composer - jne 0051DBA8
Ещё раз поясню, мы искали опорные точки для взлома, т.е если нам не удастся найти ошибку по функции, то мы будем использовать найденные с помощью DASM'a.Танцуем дальше, запускаем олли. Просто для интереса попробуем найти по функции:
bpx MessageBoxA
и нечего не находим, следовательно не зря мы искали фразы в дасме).Фраза нумбер один:
0051D4DF |. 75 1A JNZ SHORT QSetup.0051D4FB
Эта функция нам не интересна так как её предназначение вывести:
0051D510 |. BA 70D65100 MOV EDX,QSetup.0051D670 ; ASCII "You must have ADMINISTRATOR rights to Register !"
=> мы исследуем код выше:
0051D47A  |. 84DB           TEST BL,BL
0051D47C     74 57          JE SHORT QSetup.0051D4D5 
0051D47E  |. E8 25B2FBFF    CALL QSetup.004D86A8
0051D483  |. 84C0           TEST AL,AL
0051D485     74 0D          JE SHORT QSetup.0051D494 
0051D487  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
0051D48A  |. BA 80D55100    MOV EDX,QSetup.0051D580                  ;  ASCII "QSetup PRO Registered OK!"
0051D48F  |. E8 0077EEFF    CALL QSetup.00404B94
0051D494  |> E8 A7B1FBFF    CALL QSetup.004D8640
0051D499  |. 84C0           TEST AL,AL
0051D49B  |. 74 0D          JE SHORT QSetup.0051D4AA
0051D49D  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
0051D4A0  |. BA A4D55100    MOV EDX,QSetup.0051D5A4                  ;  ASCII "QSetup LITE Registered OK!"
0051D4A5  |. E8 EA76EEFF    CALL QSetup.00404B94
0051D4AA  |> 68 C8D55100    PUSH QSetup.0051D5C8                     ;  ASCII "|&OK|&Cancel|&Yes|&No|&Abort|&Retry|&Ignore|"
0051D4AF  |. 6A 00          PUSH 0
0051D4B1  |. 8D45 F8        LEA EAX,DWORD PTR SS:[EBP-8]
0051D4B4  |. 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
0051D4B7  |. BA 00D65100    MOV EDX,QSetup.0051D600                  ;  ASCII "Congratulations

" 0051D4BC |. E8 4779EEFF CALL QSetup.00404E08 0051D4C1 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 0051D4C4 |. B9 28D65100 MOV ECX,QSetup.0051D628 ; ASCII "Attention" 0051D4C9 |. B8 01000000 MOV EAX,1 0051D4CE |. E8 39B1F7FF CALL QSetup.0049860C 0051D4D3 |. EB 61 JMP SHORT QSetup.0051D536 0051D4D5 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 0051D4D8 |. E8 2BACFBFF CALL QSetup.004D8108 0051D4DD |. 84C0 TEST AL,AL 0051D4DF 75 1A JNZ SHORT QSetup.0051D4FB 0051D4E1 |. 68 C8D55100 PUSH QSetup.0051D5C8 ; ASCII "|&OK|&Cancel|&Yes|&No|&Abort|&Retry|&Ignore|" 0051D4E6 |. 6A 00 PUSH 0 0051D4E8 |. B9 3CD65100 MOV ECX,QSetup.0051D63C ; ASCII "Error" 0051D4ED |. BA 4CD65100 MOV EDX,QSetup.0051D64C ; ASCII "Illegal Registration Code !"

Не знаю как вас, но меня заинтересовали строки:
0051D47C     74 57          JE SHORT QSetup.0051D4D5
0051D485     74 0D          JE SHORT QSetup.0051D494
Разберёмся куда они ведут, как видиv, что в 1 место, а именно:
0051D4D5  |> 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
Можно понять, что этот переход идёт к фразе Illegal Registration Code !
Изменим сразу 2 перехода, так как если мы изменим 1, то никакого эффекта не будет:
0051D47C     74 57          JNE SHORT QSetup.0051D4D5
0051D485     74 0D          JNE SHORT QSetup.0051D494
Итак, изменив выводы функций, получим:
QSetup PRO Registered OK!
Но радоваться рано, так как 2 другие защиты не взломаны, и если даже мы будем видеть весёлое окно о том, что программа зарегистрирована, это будет не так, так как 2 другие надписи на месте.
Займёмся ими, на очереди jmp 0051D369, не будем медлить и сразу же обратим внимание на код выше этой функции:
0051D2F3  |. 84C0           TEST AL,AL
0051D2F5  |. 74 4F          JE SHORT QSetup.0051D346
0051D2F7  |. E8 ACB3FBFF    CALL QSetup.004D86A8
0051D2FC  |. 84C0           TEST AL,AL
0051D2FE  |. 74 0D          JE SHORT QSetup.0051D30D
0051D300  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
0051D303  |. BA 94D35100    MOV EDX,QSetup.0051D394                  ;  ASCII "Registered Copy (PRO)"
0051D308  |. E8 8778EEFF    CALL QSetup.00404B94
0051D30D  |> E8 2EB3FBFF    CALL QSetup.004D8640
0051D312  |. 84C0           TEST AL,AL
0051D314  |. 74 0D          JE SHORT QSetup.0051D323
0051D316  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
0051D319  |. BA B4D35100    MOV EDX,QSetup.0051D3B4                  ;  ASCII "Registered Copy (LITE)"
0051D31E  |. E8 7178EEFF    CALL QSetup.00404B94
0051D323  |> 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
0051D326  |. 8B83 DC060000  MOV EAX,DWORD PTR DS:[EBX+6DC]
0051D32C  |. E8 6379F5FF    CALL QSetup.00474C94
0051D331  |. 8B83 DC060000  MOV EAX,DWORD PTR DS:[EBX+6DC]
0051D337  |. 8B40 68        MOV EAX,DWORD PTR DS:[EAX+68]
0051D33A  |. BA 180000FF    MOV EDX,FF000018
0051D33F  |. E8 989CF0FF    CALL QSetup.00426FDC
0051D344  |. EB 23          JMP SHORT QSetup.0051D369
0051D346  |> BA D4D35100    MOV EDX,QSetup.0051D3D4                  ;  ASCII " Unregistered Copy (DEMO)"
Видим типичную защиту, но уже проще, эта функция JE SHORT QSetup.0051D346, если введённый СН будет не верен, выведет нам окно: Unregistered Copy (DEMO), и т.д.Поэтому изменим функции на:
0051D2F5     75 4F          JNZ SHORT QSetup.0051D346
0051D2FE     75 0D          JNZ SHORT QSetup.0051D30D
Теперь уже 2 простых алгоритма защиты программы взломано, остался один. Идем на найденную функцию в дасме: jne 0051DBA8.Смотрим код в совокупности, он отвечает за то, чтобы вывести в окне программы DEMO:
0051DBCB  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
0051DBCE  |. BA C4DC5100    MOV EDX,QSetup.0051DCC4                  ;  ASCII "QSetup Composer "
0051DBD3  |. E8 3072EEFF    CALL QSetup.00404E08
0051DBD8  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
0051DBDB  |. A1 40E25400    MOV EAX,DWORD PTR DS:[54E240]
0051DBE0  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
И ей безразлична петля идущая раньше:
0051DBA8  |> 6A 00          /PUSH 0
0051DBAA  |. 6A 00          |PUSH 0
0051DBAC  |. 49             |DEC ECX
0051DBAD  |.^75 F9          \JNZ SHORT QSetup.0051DBA8
Всё идёт к тому, что есть ещё какой-то алгоритм проверки который мы не заметили. Теперь нам нужно опять открыть программу в дасме.После открытия опять же ищем фразу QSetup Composer и сразу же бросается в глаза:
0051DBC3 |. E8 48ABFBFF CALL QSetup.004D8710
Выполним этот call, просто путём нажатия на кнопку call в панели инструментов.
Оказываемся тут:
004D8710  /$ 53             PUSH EBX
004D8711  |. 8BD8           MOV EBX,EAX
004D8713  |. 8BC3           MOV EAX,EBX
004D8715  |. BA 54874D00    MOV EDX,QSetup.004D8754                  ;  ASCII "DEMO"
004D871A  |. E8 31C4F2FF    CALL QSetup.00404B50
004D871F  |. E8 84FFFFFF    CALL QSetup.004D86A8
004D8724  |. 84C0           TEST AL,AL
004D8726  |. 74 0C          JE SHORT QSetup.004D8734
004D8728  |. 8BC3           MOV EAX,EBX
004D872A  |. BA 64874D00    MOV EDX,QSetup.004D8764                  ;  ASCII "PRO"
004D872F  |. E8 1CC4F2FF    CALL QSetup.00404B50
004D8734  |> E8 07FFFFFF    CALL QSetup.004D8640
004D8739  |. 84C0           TEST AL,AL
004D873B  |. 74 0C          JE SHORT QSetup.004D8749
004D873D  |. 8BC3           MOV EAX,EBX
004D873F  |. BA 70874D00    MOV EDX,QSetup.004D8770                  ;  ASCII "LITE"
004D8744  |. E8 07C4F2FF    CALL QSetup.00404B50
004D8749  |> 5B             POP EBX
004D874A  \. C3             RETN
Опять же знакомая конструкция защиты, и теперь только остаётся изменить JE 004D8734 на JNE 004D8734 и программе в верхнем окне пишет PRO ).Вот и вся простая защита. Теперь нам осталось только пропатчить программу, можно с помощю hiew 'a.Патчить нужно функции по адресам:
0051D47C, 0051D485, 0051D2F5, 0051D2FE, 004D8726 все je нужно сменить на jne и программа будет вечно считать себя зарегистрированной.
После пропатчивания программы можно сделать патч с помощью тпе (о этом я рассказывал в предыдущих статьях так что не буду повторяться)
Программа взломана, патч создан...