[ Пишем keygen для Alteros Viewer v2.0 ]Сегодня наша задача состоит в том, чтобы вычислить алгоритм генерации года, а затем написать keygen для этой проги. Имеем :
target : Alteros Viewer v2.0 (build 2007)
Ну что, поехали потихонечку.... ______________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-ричную систему исчисления, и получите ваш код... Итак, кратко наш алгоритм :
____________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!!! ;-) via e-mail : egoist_tsrh@rbcmail.ru Date : 24.12.2001 22:24:35
|