Zoom Icon

Creare Keygen Originali

From UIC

Creare Keygen originali

Contents


Infos
Author: §-Death_Reaver-§
Email: death.reaver@leonardo.it
Website: deathreaver.altervista.org
Date: 28/06/2005 (dd/mm/yyyy)
Level: Luck and skills are required
Language: Italian Image:Flag_Italian.gif
Comments:



Introduction

Ristrutturato il 2/01/2007

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!!



Tools

Masm v8

Un buon IDE

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


Link e Riferimenti

Creatore Regioni
Sorgente


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)

Image:Death_acid.jpg

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 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


Note Finali

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


Disclaimer

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.