.elseif eax==WM_CLOSE invoke DestroyWindow,hWin .elseif uMsg==WM_DESTROY invoke PostQuitMessage,NULL .else invoke DefWindowProc,hWin,uMsg,wParam,lParam ret .endif xor eax,eax ret Wnd
Trang 1push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,IDM_MENU
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 CreateDialogParam,hInstance,IDD_DIALOG,NULL,addr WndProc,NULL 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 hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax==WM_INITDIALOG
push hWin
pop hWnd
.elseif eax==WM_COMMAND
mov eax,wParam
and eax,0FFFFh
if eax==IDM_FILE_EXIT
invoke SendMessage,hWin,WM_CLOSE,0,0
elseif eax==IDM_HELP_ABOUT
invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL
endif
; elseif eax==WM_SIZE
Trang 2.elseif eax==WM_CLOSE
invoke DestroyWindow,hWin
.elseif uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
end start
Để nhúng nhạc vào Delphi bạn cần sử dụng thư viện MMSystem.dcu trong phần khai báo của main form! Sau đó bạn mở một trình soạn thảo tạo một file
keygenmusic.rc có nội dung:
KeygenMusic Wave "LoveStory.wav"
Sau đó chép file brcc32.exe,rw32core.dll trong thư mục bin của Delphi, chạy dòng lệnh :
C:\keygen\brcc32.exe keygenmusic.rc để biên dịch ra file RES
Tiếp đó chép dòng {$R keygenmusic.RES} vào sau dòng {$R *.dfm}
Trong thủ tục form load! Bạn chèn dòng này vào
PlaySound(PChar('KeygenMusic'), hInstance,snd_Sync or snd_Resource);
Enjoy!
Hacnho(REA)
How to keygen Ap PDF Stamp
Quote:
Soft: Ap PDF Stamp 2.2.0
HomePage: http://www.adultpdf.com
Protection: ASPack 2.12 -> Alexey Solodovnikov
Tools: OllyDbg 1.10; Peid 0.93; AspackDie 1.41
Trang 3Cracker: Ha Viet Hung (hvh0904)
Tôi chỉ là một tay gà mờ trong lĩnh vực Assembler nhưng hehe, lại có soft nó có cơ chế tạo key quá gà nên tôi cũng đành phải KeyGen nó OK Bắt tay vào làm thịt thằng này (Các soft trong cùng trang này làm tương tự):
Chạy thử thấy nó bắn nag đòi đăng ký Đăng ký thử bằng your mail và điền số bạn thích, nó bắn nag báo lỗi Nhận thấy cái này rất giống MessageBox OK Thoát Dùng Peid kiểm tra thấy soft này được pack bằng ASPack 2.12 -> Alexey
Solodovnikov Tiến hành unpack bằng tay hoặc dùng AspackDie để unpack nó Ở đây tôi dùng AspackDie cho nhanh Chạy thử file unpacked thấy nó hoạt động tốt Vậy là xong công việc chuẩn bị
Load file đã unpack lên bằng OllyDbg Như lúc đầu ta đã nhận xét là chương trình
sử dụng hàm MessageBox để bắn thông báo lỗi Do đó RightClick chọn Search for > All intermodular calls Một bảng liệt kê hiện ra, tìm hàm MessageBoxA và RightClick chọn "Set breakpoint on every call to MessageBoxA".Xong, nhấn F9
để run Trong quá trình run có thể có lỗi Exception Cứ nhấn Shift-F9 cho đến khi chương trình run hoàn toàn Điền YourMail và SerialNumber bạn thích vào phần đăng ký Ở đây tôi điền: E-mail: hbb506ilikeuhehe@yahoo.com.vn; SerialNumber: 09041984-05061985.Nhấn OK, Olly dừng tại hàm MessageBoxA:
Code:
00410DFF | E8 50A60E00 CALL unpacked.004FB454
00410E04 | 50 PUSH EAX ; |hOwner
00410E05 | E8 E6021600 CALL <JMP.&USER32.MessageBoxA>
->Dừng tại đây
00410E0A | FF4F 1C DEC DWORD PTR DS:[EDI+1C]
00410E0D | 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
Kéo lên phía trên một chút thấy lệnh nhảy có điều kiện qua hàm MessageBox này: Code:
00410DB4 |> 8D56 1E LEA EDX,DWORD PTR DS:[ESI+1E]
00410DB7 |> 8BC3 MOV EAX,EBX
00410DB9 | E8 FE070000 CALL unpacked.004115BC
00410DBE | 84C0 TEST AL,AL
00410DC0 | 75 76 JNZ SHORT unpacked.00410E38 ->nhảy qua nag báo lỗi
00410DC2 | 66:C747 10 2C0>MOV WORD PTR DS:[EDI+10],2C
Trang 400410DC8 | 8D56 1F LEA EDX,DWORD PTR DS:[ESI+1F]
phía trên lệnh nhảy này có một hàm call, đây là hàm check serial Lệnh nhảy sẽ được thực thi nếu AL=1 Do đó, nếu thông tin đăng ký đúng hàm này sẽ trả về AL=1 ngược lại AL=0
Lần lên đầu đoạn này tại 00410D30 và set breakpoint tại đó
Code:
00410D2F 90 NOP
00410D30 / 55 PUSH EBP ->breakpoint here
00410D31 | 8BEC MOV EBP,ESP
00410D33 | 83C4 B8 ADD ESP,-48
00410D36 | 53 PUSH EBX
Xong nhấn F9 để run, nhấn OK và nhấn OK lần nữa để đăng ký lại Olly sẽ dừng tại 00410D30
Dùng F8 trace cho đến hàm call đã nói ở trên (00410DB9) Nhấn F7 để vào hàm ta
sẽ ở đây:
Code:
004115BC /$ 56 PUSH ESI
004115BD | 8BF2 MOV ESI,EDX
004115BF | 85F6 TEST ESI,ESI
004115C1 | 75 04 JNZ SHORT unpacked.004115C7
004115C3 | 33C0 XOR EAX,EAX
004115C5 | 5E POP ESI
004115C6 | C3 RETN
ESI chứa chuỗi Serial mà chúng ta đã điền Nếu chuỗi này rỗng, lệnh nhảy sẽ không thực hiện và sẽ XOR EAX,EAX (AL=0) rồi quay về Vì đã điền Serial nên
sẽ nhảy đến đoạn này:
Code:
004115C7 |> 803E 00 CMP BYTE PTR DS:[ESI],0
004115CA | 75 04 JNZ SHORT unpacked.004115D0
004115CC | 33C0 XOR EAX,EAX
004115CE | 5E POP ESI
004115CF | C3 RETN
Ở đây sẽ kiểm tra ký tự đầu có phải là ký tự NUL không Nếu phải thì XOR
EAX,EAX (AL=0) và quay về Ký tự đầu của tôi là 0 (30) nên sẽ nhảy đến:
Trang 5Code:
004115D0 |> 56 PUSH ESI
004115D1 | E8 26BE1300 CALL unpacked.0054D3FC
004115D6 | 59 POP ECX
004115D7 | 83F8 10 CMP EAX,10
004115DA | 74 04 JE SHORT unpacked.004115E0
004115DC | 33C0 XOR EAX,EAX
004115DE | 5E POP ESI
004115DF | C3 RETN
Ở đây so sánh chiều dài chuỗi Serial của chúng ta với 10 (hệ 16) tức là 16 (hệ 10) Nếu không bằng thì XOR EAX,EAX (AL=0) Vì ở đây số Serial của tôi là 17 (hệ 10) tức là 11 (hệ 16) nên sẽ không nhảy Các bạn có thể nhấn F9 rồi đăng ký lại với
số ký tự là 16 và lại lần vào lệnh call cho chắc ăn nhưng trong trường hợp này là không cần thiết Tại sao? Vì cơ chế tạo key của chương trình này quá gà mà hehe Mặc dù nó không nhảy nhưng tôi cứ patch cho nó nhảy Đổi 74 tại 004115DA thành EB và chúng ta sẽ nhảy đến đây:
Code:
004115E0 |> 33D2 XOR EDX,EDX
004115E2 | 8BC6 MOV EAX,ESI
004115E4 |> 0FBE08 /MOVSX ECX,BYTE PTR DS:[EAX]
004115E7 | 83F9 41 |CMP ECX,41
004115EA | 7C 05 |JL SHORT unpacked.004115F1 ->NOP lệnh này lại
004115EC | 83F9 5A |CMP ECX,5A
004115EF | 7E 04 |JLE SHORT unpacked.004115F5 ->JMP lệnh này
004115F1 |> 33C0 |XOR EAX,EAX
004115F3 | 5E |POP ESI
004115F4 | C3 |RETN
004115F5 |> 42 |INC EDX
004115F6 | 40 |INC EAX
004115F7 | 83FA 10 |CMP EDX,10
004115FA |.^7C E8 \JL SHORT unpacked.004115E4
Từ 004115E4 đến 004115FA là vòng lặp trong đó ta thấy có lệnh XOR EAX,EAX Chắc các bạn cũng đã biết là chúng ta phải tránh nó rồi Vòng lặp này sẽ đưa từng
ký tự trong chuỗi SerialNumber vào để kiểm tra và buộc chúng phải nằm trong đoạn [41 5A] tức là [A Z] Nếu các ký tự của các bạn không thỏa mãn điều kiện của nó thì các bạn cứ patch cho nó thỏa mãn Cụ thể ở đây là patch lệnh nhảy JL và
Trang 6lệnh nhảy JLE Miễn sao nó nhảy qua lệnh XOR EAX,EAX Kiểm tra xem đã hết 16 ký tự chưa Nếu đã hết thì thực hiện tiếp: Code: