S/N, zjištění správného sériového čísla, vytvoření keygenu
UPOZORNĚNÍ: TENTO DOKUMENT SLOUŽÍ POUZE KE STUDIJNÍM ÚČELŮM. AUTOR NENESE ŽÁDNOU ZODPOVĚDNOST ZA JEHO ZNEUŽITÍ

Soubor Serial3.zip

Jako vždy si crackme nejprve spustíme a prohlédneme. Tentokrát již bude sériové číslo počítáno jinak, než za pomocí zadaného jména, ale jak vidíme, tak bude pravděpodobně generováno pomocí sériového čísla svazku některého z logickcýh disků. Získání sériového čísla svazku se provádí pomocí API GetVolumeInformation.
Načteme crackme do debuggeru a skočíme na začátek funkce GetVolumeInformationA (CTRL + G), na začátek této funkce dáme breakpoint a program spustíme (F9). Debugger zastaví běh programu, podíváme se do zásobníku, odkud byla API volána a dozvíme se, že z adresy 0040118D, odstraníme break point a skočíme na uvedenou adresu. Před námi je nyní tento kód:

0040117E PUSH EAX;lpMaxFilenameLength
0040117F PUSH 00405030;lpVolumeSerialNumber
00401184 PUSH 0;MaxVolumeNameSize = 0
00401186 PUSH 0;VolumeNameBuffer
00401188 PUSH 004050E4;RootPathName = "C:\"
0040118D CALL GetVolumeInformationA
00401193 MOV EDI,EAX;EDI = návratová hodnota API
00401195 TEST EDI,EDI;EDI = 0 ?
00401197 JE SHORT 004011BE;pokud ano, došlo k chybě, konec
00401199 MOV EAX,DWORD PTR [405030];EAX = sériové číslo svazku
0040119E PUSH EAX;3. číselná hodnota
0040119F PUSH 004050DC;2. ukazatel na string "%08X"
004011A4 PUSH ESI;1. ukazatel na zásobník
004011A5 CALL 00401320;zavolání neznámé funkce