Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Пишем keygen для Alteros Viewer 2.0

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Автор: EGOiST[TSRh] <egoist_tsrh@rbcmail.ru>

Сегодня наша задача состоит в том, чтобы вычислить алгоритм генерации года, а затем написать keygen для этой проги. Имеем :

target : Alteros Viewer v2.0 (build 2007)
tools : SoftICE, Masm32 version 7

Ну что, поехали потихонечку....
Загружаем таргет, заходим в регистрилку, смотрим, что нужно ввести.. Требуют ввести имя и регистрационный код.
Далее вводим любое имя и код(например 147258369).
Заходим в SoftICE(Ctrl+D), и пишем там :
s d lffffffff "<введённый вами код>"(обязательно в кавычках) SoftICE нам отвечает :
Pattern found at xxxx:xxxxxxxx (xxxxxxxx), где xxxxxxxx- это адрес, по которому находится наш код.
Ставим брякпоинт на чтение/запись по этому адресу :
bpmb xxxxxxxx rw
Нажимаем F5, затем жмём кнопочку "Register", и снова вываливаемся в SoftICE...
Жмем F12 пока не вернёмся в модуль Alteros.exe(у меня было 7 раз). Жмём F10 пока не увидим такое место :

 ______________cut here________________
 :004B19BA 837DF000 cmp dword ptr [ebp-10], 00000000
 :004B19BE 0F840E010000 je 004B1AD2
 :004B19C4 8D55F4 lea edx, dword ptr [ebp-0C]
 :004B19C7 8B8304040000 mov eax, dword ptr [ebx+00000404]
 :004B19CD E8BA32F8FF call 00434C8C
 :004B19D2 8B45F4 mov eax, dword ptr [ebp-0C]
 :004B19D5 E86E6EF5FF call 00408848
 :004B19DA 8945EC mov dword ptr [ebp-14], eax
 :004B19DD DB45EC fild dword ptr [ebp-14]
 :004B19E0 E8DB0FF5FF call 004029C0
 :004B19E5 8945F8 mov dword ptr [ebp-08], eax
 :004B19E8 8D55FC lea edx, dword ptr [ebp-04]
 :004B19EB 8B8300040000 mov eax, dword ptr [ebx+00000400]
 :004B19F1 E89632F8FF call 00434C8C
 ______________cut here_________________
 
 Мы вывалились на адрес - :004B19D2, по F10 проходим
 дальше, до следующего места :
 
 ______________cut here_________________
 :004B1A17 8975EC mov dword ptr [ebp-14], esi
 :004B1A1A DB45EC fild dword ptr [ebp-14]
 :004B1A1D E89E0FF5FF call 004029C0
 :004B1A22 69C007020000 imul eax, 00000207
 :004B1A28 05FE1C0200 add eax, 00021CFE
 :004B1A2D 8BF0 mov esi, eax
 :004B1A2F 3B75F8 cmp esi, dword ptr [ebp-08]
 :004B1A32 7572 jne 004B1AA6
 :004B1A34 A1649C4E00 mov eax, dword ptr [004E9C64]
 :004B1A39 C60001 mov byte ptr [eax], 01
 ______________cut here_________________
 
 
По адресу - :004B1A1D идёт процедура, которая складывает ASCII код каждого символа нашего имени, и возвращает общую сумму... Далее получившееся число( у меня 404h) умножается на 207h(h - hex) и прибавляется 21CFEh, а уже потом сравнивает получившееся значение с числом, введёным нами, в 16-ричном исчислении. Если хотите узнать код соответствующий вашему имени, просто переведите число из esi в 10-ричную систему исчисления, и получите ваш код...
Итак, кратко наш алгоритм :
  • складываем ASCII код каждого символа имени;
  • умножаем получившееся на 207h;
  • прибавляем 21CFEh;
  • переводим в 10-ричную систему исчисления.
Теперь наша задача заключается в том, чтобы написать keygen на ассемблере. Не буду всё подробно описывать, а просто дам исходники :
 
 ____________begin of keygen.asm__________
 ..486
 ..model flat, stdcall
 option casemap :none
 
 include \masm32\include\windows.inc
 include \masm32\include\user32.inc
 include \masm32\include\kernel32.inc
 include \masm32\include\gdi32.inc
 include \masm32\include\masm32.inc
 
 includelib \masm32\lib\user32.lib
 includelib \masm32\lib\kernel32.lib
 includelib \masm32\lib\gdi32.lib
 includelib \masm32\lib\masm32.lib
 
 szText Macro Name, Text:VARARG
 LOCAL lbl
 jmp lbl
 Name db Text,0
 lbl:
 ENDM
 
 WndProc PROTO :DWORD, :DWORD, :DWORD, :DWORD
 Edit1Proc PROTO :DWORD, :DWORD, :DWORD, :DWORD
 
 ..data
 w1 db " TSRh | TeaM",13,10
 db "-<->- Proudly Presents -<->-",13,10,13,10
 db " KeygeN FoR :",13,10
 db "Alteros Viewer v2.0 (build 2007)",13,10,13,10
 db "(c)2001 by EGOiST[TSRh]",13,10
 db "Web : http://www.ego1st.cjb.net/",13,10
 db "Mail : egoist_tsrh@rbcmail.ru",0
 w2 db "About...",0
 a db "Hey!",0
 b db "Did you forgot something?",0
 b1 db "String must be 10 symbols long!",0
 hWnd dd 0
 hEdit1 dd 0
 hEdit2 dd 0
 hButn1 dd 0
 hButn2 dd 0
 hButn3 dd 0
 hInstance dd 0
 hIcon dd 0
 lpfnEdit1Proc dd 0
 dlgname db "TESTWIN",0
 fMtStrinG db "%lu",0
 
 ..code
 
 start:
 
 invoke GetModuleHandle, NULL
 mov hInstance, eax
 invoke DialogBoxParam, hInstance, ADDR dlgname,0,ADDR WndProc,0
 invoke ExitProcess,eax
 
 WndProc proc hWin :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD
 
 LOCAL Lon :DWORD
 LOCAL SerB[64] :BYTE
 LOCAL NameB[64] :BYTE
 pusha
 ..if uMsg == WM_INITDIALOG
 
 mov eax, hWin
 mov hWnd, eax
 
 szText dlgTitle,"KeygeN FoR Alteros Viewer v2.0 (build 2007)"
 invoke SendMessage,hWin,WM_SETTEXT,0,ADDR dlgTitle
 
 invoke LoadIcon,hInstance,200
 mov hIcon, eax
 
 invoke SendMessage,hWin,WM_SETICON,1,hIcon
 
 invoke GetDlgItem,hWin,100
 mov hEdit1, eax
 
 invoke SetWindowLong,hEdit1,GWL_WNDPROC,Edit1Proc
 mov lpfnEdit1Proc, eax
 
 invoke GetDlgItem,hWin,101
 mov hEdit2, eax
 
 invoke GetDlgItem,hWin,1000
 mov hButn1, eax
 
 invoke GetDlgItem,hWin,1001
 mov hButn2, eax
 invoke GetDlgItem,hWin,1002
 mov hButn3, eax
 
 ..elseif uMsg == WM_COMMAND
 ..if wParam == 1002
 invoke MessageBox,0,ADDR w1,ADDR w2,MB_OK
 ..endif
 ..if wParam == 1000
 
 ;--------------GENERATOR begin------------------
 
 invoke GetWindowText,hEdit1,ADDR NameB,40 ;EditBox1 text puting in NameB
 
 lea eax,NameB
 xor esi,esi
 xor edx,edx
 _gen:
 cmp byte ptr[eax],00
 jz _endgen
 mov dl,byte ptr[eax]
 inc eax
 add esi,edx
 jmp _gen
 _endgen:
 imul esi,esi,207h
 add esi,21CFEh
 mov Lon,esi
 invoke dwtoa,Lon,ADDR SerB
 
 ;----------------GENERATOR end------------------------
 
 jmp _cool
 _cool:
 invoke SetWindowText,hEdit2,ADDR SerB
 jmp _end
 
 _short: invoke MessageBox,0,ADDR b,ADDR a,MB_OK
 
 _end:
 ..elseif wParam == 1001
 jmp GetOutaHere
 
 ..endif
 
 ..elseif uMsg == WM_CLOSE
 GetOutaHere:
 invoke EndDialog,hWnd,0
 
 ..endif
 popa
 xor eax, eax
 ret
 
 WndProc endp
 
 Edit1Proc proc hCtl :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD
 
 LOCAL tl:DWORD
 LOCAL testBuffer[16]:BYTE
 
 ..if uMsg == WM_CHAR
 
 ..if wParam == 8
 jmp @F
 ..endif
 
 invoke GetWindowText,hCtl,ADDR testBuffer,16
 invoke lnstr,ADDR testBuffer
 
 ..if eax >=100 ;Not min 100 symbols
 xor eax, eax
 ret
 ..endif
 
 @@:
 
 ..endif
 
 invoke CallWindowProc,lpfnEdit1Proc,hCtl,uMsg,wParam,lParam
 
 ret
 
 Edit1Proc endp
 
 end start
 ___________end of keygen.asm_____________
 
 
 И ещё, естественно, файл с окошками и кнопками:
 
 
 __________begin of rsrc.rc_________________
 
 #include "\masm32\include\resource.h"
 
 TESTWIN DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 10, 10, 146, 52, 0
 STYLE 0X0004 | DS_CENTER | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_POPUP
 EXSTYLE WS_EX_TOOLWINDOW
 CAPTION "DIALOG"
 FONT 8, "MS Sans Serif", 700, 0 /*FALSE*/
 
 BEGIN
 EDITTEXT 100,1,11,90,13, ES_AUTOHSCROLL | ES_MULTILINE
 EDITTEXT 101,1,26,90,13, ES_AUTOHSCROLL | ES_READONLY
 CTEXT "Enter your name please :",20,4,1,81,8,SS_LEFT, , 0
 CTEXT "(c)2001 by EGOiST[TSRh]",20,0,41,91,9,WS_DISABLED
 DEFPUSHBUTTON "Gen...", 1000, 96,2,47,15, BS_FLAT
 DEFPUSHBUTTON "Exit... ", 1001, 96,34,47,15, BS_FLAT
 DEFPUSHBUTTON "About..." , 1002, 96,18,47,15, BS_FLAT
 END
 
 200 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "MY.ICO"
 
 ____________end of rsrc.rc_________________
 
 
Меняете всё на ваше усмотрение...
Keygen.asm и rsrc.rc введём в QEdit из Masm32 v7.
Вот и всё =/:0

p.s. ну всё это, конечно, for purpose only!!! ;-)
и распространяется только с моего разрешения...
!!!за все последствия я ничего не несу!!!
Writer : EGOiST[TSRh] <egoist_tsrh@rbcmail.ru>


Обсуждение статьи: Пишем keygen для Alteros Viewer 2.0 >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS