Creare Keygen Originali

Data

by "Death_Reaver"

 

28/06/2005

UIC's Home Page

Published by Quequero

Ma qua sotto che ci va?

Mitico! :)

Ci stanno sempre i soliti 4 puntini….

....

Home page (se presente):NADA

E-mail: [email protected]

Nick, UIN, canale IRC/EFnet frequentato

....

Difficoltà

( )NewBies (*)Intermedio (*)Avanzato ( )Master

 

RegionCreator
Sorgenti

Introduzione

Mentre guardavo alcuni esempi di programmazione in asm esempi ho visto qualcosa di interessante: c’era un programma in cui la finestra non era la solita scatola rettangolare ma era a forma di faccia con tanto di orecchie e capelli. Dopo aver esaminato il codice ho capito che quella tecnica doveva essere usata per qualcosa di più… un keygen!!

(per 0x87k: spero che questo tutorial ti possa aiutare J)

Tools usati

MASM32 v.8 sp1 (nella sezione tools)

Un buon IDE

Un programma per la grafica, basta che salvi in bitmap (e chi non lo fa?)

Notizie sul programma

Creeremo la base di un Keygen che però non sarà racchiuso da una semplice finestra, ma da una macchia da acido!

Essay

Bene Iniziamo:

Per prima cosa dobbiamo creare un’immagine (in questo caso una macchia da acido) e salvarla in bitmap. Però bisogna stare attenti a crearla, infatti una volta finita, bisogna colorare la sfondo con un colore uniforme MOLTO DIVERSO da i colori usati nel disegno.

Per esempio io ho creato un’ immagine 250x250 senza sfondo, ho disegnato e successivamente cambiato lo sfondo: (Ho messo anche dei segnaposto per le edit e per il pulsante)

 
 

Questo è il mio risultato. Come vedete ho usato il rosso come sfondo poiché non compariva minimamente nel disegno. Ora salviamo in bitmap e prepariamoci al prossimo passo. Il nostro obiettivo è di avere una finestra di quella forma: ma come si fa? Il segreto è nelle cosiddette “region” che sono tipi di risorse che ci fanno sapere da un’immagine quale “parte” prendere.

Per creare una region ci viene in aiuto un piccolo tool (trovato insieme all’emulatore del GBA): RegionCreator. Questo a partire da un’immagine e da un colore da escludere crea il file .rgn relativo all’immagine scelta. Quindi avviamo il RegionCreator, carichiamo l’immagine, scegliamo il colore mettendo i valori in decimale nei box RGB (nel mio caso metto il valore 255 a red) e diamo l’ok. (ATTENZIONE: non cancellate l’immagine! Ci serve ancora)

Ora viene la parte più lunga: il codice.

include Death_Reaver.inc                   ;il mio include file,contiene le direttive (.486, model etc.), gli ;include e le librerie

.data

   ClassName db "MainWinClass",0

   AppName  db "UIC",0

   tipo db "RGN",0        ;nome classe region

   nomeres db "regione",0      ;nome associato alla region

   btnclass db "BUTTON",0

   ics db "X",0             ;testo per il pulsante di chiusura

.const

sfondo equ 401           ;ID della bitmap

.data?

   hInstance dd ?

   CommandLine dd ?

   hbmp dd ?        ;handle della bitmap

   hrgn dd ?        ;handle della region

   hrr dd ?         ;ID della region

   siz dd ?         ;variabile per conservare la grandezza dell’immagine

   hbutton dd ?     ;handle del pulsante

.code

start:

      invoke GetModuleHandle, NULL

      mov    hInstance,eax

      invoke GetCommandLine

      mov    CommandLine,eax

      invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT

      invoke ExitProcess,eax

WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD

      LOCAL wc:WNDCLASSEX

      LOCAL msg:MSG

      LOCAL hwnd:HWND

      mov   wc.cbSize,SIZEOF WNDCLASSEX

      mov   wc.style, CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW

      mov   wc.lpfnWndProc, OFFSET WndProc

      mov   wc.cbClsExtra,NULL

      mov   wc.cbWndExtra,NULL

      push  hInstance

      pop   wc.hInstance

      invoke LoadBitmap,hInst,401                  ;Carichiamo la bitmap

      invoke CreatePatternBrush,eax                

      mov   wc.hbrBackground,eax                     ;e  mettiamo come sfondo

      mov   wc.lpszMenuName,NULL

      mov   wc.lpszClassName,OFFSET ClassName

      invoke LoadIcon,NULL,IDI_APPLICATION

      mov   wc.hIcon,eax

      mov   wc.hIconSm,eax

      invoke LoadCursor,NULL,IDC_ARROW

      mov   wc.hCursor,eax

      invoke RegisterClassEx, addr wc

      INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\       ;creiamo una finestra col solo stile WS_POPUP

           WS_POPUP,CW_USEDEFAULT,\

           CW_USEDEFAULT,250,250,NULL,NULL,\

           hInst,NULL

      mov   hwnd,eax

     INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR ics,\       ;creiamo una il pulsante di chiusura

           WS_CHILD or WS_VISIBLE or BS_FLAT,197,\

           45,18,18,hwnd,NULL,\

           hInst,NULL

      mov   hbutton,eax

      invoke ShowWindow, hwnd,SW_SHOWNORMAL

      invoke UpdateWindow, hwnd

      .WHILE TRUE

            invoke GetMessage, ADDR msg,NULL,0,0

            .BREAK .IF (!eax)

            invoke TranslateMessage, ADDR msg

            invoke DispatchMessage, ADDR msg

      .ENDW

      mov     eax,msg.wParam

      ret

WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

      .if uMsg==WM_DESTROY

            invoke PostQuitMessage,NULL

      .elseif uMsg==WM_CREATE

            invoke FindResource,hInstance,ADDR nomeres,ADDR tipo       ;Cerchiamo la region

            mov hrr,eax       ;ne depositiamo la posizione per uso futuro

            invoke LoadResource,hInstance,eax        ;la carichiamo nel programma

            mov hrgn,eax                  ;salviamo l’handle

            invoke SizeofResource,hInstance,hrr     ;prendiamo la grandezza della region

            mov siz,eax                ;e la salviamo

            invoke LockResource,hrgn       ;blocchiamo la region in memoria

            invoke ExtCreateRegion,NULL,siz,eax    ;creiamo la regione da quella salvata in memoria

            invoke SetWindowRgn,hWnd,eax,TRUE     ;la applichiamo alla finestra

           INVOKE CreateWindowEx,NULL,ADDR btnclass,ADDR ics,\      

                   WS_VISIBLE or WS_PUSHBUTTON or WS_CHILD,125,\

                   125,18,18,hwnd,NULL,hInst,NULL

           mov   hbutton,eax

          ;########################################################

          ;qui inserite il codice per creare le varie edit e button

          ;########################################################

      .elseif uMsg==WM_COMMAND

           Mov eax,wParam

           Mov edx,lParam

           Cmp edx,hbutton

           Jnz Fine

           Shr eax,10h

           Cmp ax,BN_CLICKED

           Jnz Fine

           Invoke SendMessage,hwnd,WM_DESTROY,0,0

           Fine:

      .elseif uMsg==WM_LBUTTONDOWN

            invoke SendMessage,hWnd,WM_NCLBUTTONDOWN,HTCAPTION,lParam    ;IMPORTANTE: facciamo si che quando si

      .else                                                              ;trascina, la finestra pensi che il ;puntatore

            invoke DefWindowProc,hWnd,uMsg,wParam,lParam                ;del mouse sia sulla caption, in modo da

            ret                                                          ;muovere la finestra

      .endif

      xor eax,eax

      ret

WndProc endp

end start

E dopo il codice ecco il file di risorse:

regione RGN "sfondo.rgn"

401 BITMAP "sfondo.bmp"

Ora assemblate ed eseguite: belloooooo!

Se volete a questo punto potete inserire i vari controlli che vi servono e il codice del keygen

                                                                                                      DEATH_REAVER

Note finali

Ringrazio e saluto tutti e ricordate……… MAI PIU’ KEYGEN NORMALI (sembra una pubblicità)

Disclaimer

Vorrei ricordare che il software va comprato e  non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento è stato scritto per invogliare il consumatore a registrare legalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo che ogni sviluppatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.

Reversiamo al solo scopo informativo e per migliorare la nostra conoscenza del linguaggio Assembly.

Se usate il mio suorce, mi dovete mandare € 512 per utilizzo J