crackme #09 のkeygen
eagle0wlさんのcrackme #09のkeygen(キージェネレーター)を書いた。
初めてまともにアセンブラを使ったが理解が曖昧なので結構苦労した。
eagle0wlさんのkeygen template #03を使わせて貰った。
チュートリアルはいつか書く。
ソースコードの必要な部分だけ示す。
.data _00403183 db 18 dup(?) _004031E8 db "S1AC4QM5EGOU8IKZRG6WXPD7NT9BV2HJ", 0 CRK9 db "CRK9-", 0 WndProc proc hWin :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD .if uMsg == WM_COMMAND .if wParam == IDC_GENERATE invoke GetDlgItemTextA, hWin, IDC_USERNAME, offset szNameBuf, 100h .if eax != 0 invoke GenerateKey, offset szNameBuf, offset szSerialBuf .else invoke lstrcpy, offset szSerialBuf, offset szNameError .endif invoke SetDlgItemTextA, hWin, IDC_SERIAL, offset szSerialBuf GenerateKey proc lpNameBuf :DWORD, lpSerialBuf :DWORD xor eax, eax mov esi, lpNameBuf @@: cmp byte ptr [esi],0 je @f movsx ecx,byte ptr [esi] xor ecx,3DCB7C5Bh add ecx,6FD76EF5h rol ecx,7 add eax,ecx inc esi jmp @b @@: mov esi, offset _00403183 add esi, 16 push eax mov ecx, 8 @@: mov ebx,eax and ebx,0Fh movsx edx,byte ptr [ebx+_004031E8] mov byte ptr [esi],dl dec esi;inc esi shr eax,4 dec ecx je @f jmp @b @@: mov byte ptr [esi],2Dh pop eax rol eax,0Dh xor eax,3DCB7C5Bh rol eax,7 mov ecx,8 @@: mov ebx,eax and ebx,0Fh add ebx,10h movsx edx,byte ptr [ebx+_004031E8] dec esi ; inc esi mov byte ptr [esi],dl shr eax,4 dec ecx je @f jmp @b @@: invoke lstrcpy, lpSerialBuf, addr CRK9 invoke lstrcat, lpSerialBuf, addr _00403183 ret GenerateKey endp