Туториал по взлому 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.0051D3460051D2F7 |. 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 и программа будет вечно считать себя зарегистрированной.
После пропатчивания программы можно сделать патч с помощью тпе (о этом я рассказывал в предыдущих статьях так что не буду повторяться)
Программа взломана, патч создан...