special

This webpage has been robot translated, sorry for typos if any. To view the original content of the page, simply replace the translation subdomain with www in the address bar or use this link.

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

Дата створення/оновлення: 25.05.2018

';>