Như vậy chúng ta biết rằng Name nhập vô phải bằng 44 ký tự có 4 ký tự "-" có dạng XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX trong đó X là những ký tự chữ, không được phép là số Nếu na
Trang 1Đây chính là nguyên đoạn mã dùng để mã hoá và kiểm tra Name và Reg Code Như vậy chúng ta biết rằng Name nhập vô phải bằng 44 ký tự (có 4 ký tự "-") có dạng
XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX (trong
đó X là những ký tự chữ, không được phép là số)
Nếu name nhập vô ít hơn thì nó cũng jump đến nag "Wrong Registration Code!"
Do chỉ cần tìm số Reg code thôi, nên chúng ta tạm dừng ở đây! Nhắc lại phần SI, sau khi nhấn F11, bạn sẽ ở đây:
001B:73DE6414 0FF1594B5E673 Call [User 32! GetwindowtextA]
001B:73DE641A mov ecx, (ebp+10)
001B:73DE641FD push FF
001B:73DE641F E852C0FEF7 Call 77DD2476
Okie, khi tới đây, các bạn nhấn F8 để trace into, các bạn sẽ thấy như sau:
001B: 73DD2476 56 Push ESI
001B: 73DD2477 8BF1 Mov ESI, ECX
001B: 73DD2489 E820000000 Call 73DD249E
-
Tiếp tục nhấn F10 để trace down nhẹ nhàng tới khi bạn gặp đoạn code tương tự như sau:
001B: 77D48000 6A0C Push 0C
001B: 77D48002 680051D977 Push 77D95100
Trang 2001B: 77D48007 E89DB9FFFF Call 77D439A9
001B: 77D4800C Mov EDI, [EBP+0C]
Hé hé, gần kết thúc rồi bạn ạ Ngay tại dòng Call 77D439A9 bạn nhấn F8 để trace into, xong bạn sẽ ở ngay đây:
001B: 77D439A9 68BFEDD677 Push 77D6EDBF
001B: 77D439AE 64A100000000 Mov EAX, FS:[00000000]
001B: 77D439B4 50 Push EAX
001B: 77D439B5 64892500000000 Mov FS:[00000000], ESP
Okie, ngay tại dòng 001B: 77D439AE 64A100000000 Mov EAX, FS:[00000000], bạn hãy đánh lệnh D EAX Điều gì xảy ra, Wow, hào quang chói lọi Hãy nhìn sang cột DATA của SI, bạn sẽ thấy một dòng text string có các chữ số dạng
XXXXXXXX- Hãy dịch chuyển con trỏ cuộn màn hình DATA xuống bạn sẽ thấy được số Registration Code của mình Ở đây hacnho được một số là :
XXXXXXXX-VVVVVVVV-JJJJJJJJ-AAAAAAAA-ZZZZZZZZ
Đây chính là số Reg Code của bạn, hãy ghi vào giấy và đăng ký lại thử xem It's now registered
User Name: hacnho
Trang 3Registration Code:
XXXXXXXX-VVVVVVVV-JJJJJJJJ-AAAAAAAA-ZZZZZZZZ
PS: Một số RegCode tham khảo:
GYEBDOGC-NFLIKVNJ-KEQBJOKE-XPVSUFXT-ISMBBOII
ABCDEFGH-BCDEFGH-ABEJQZKX-GHIJKLMN-ABIBMVIF
III Kết luận
Tut đến đây là END Hẹn gặp trong tut sau
Xem html ở đây:
http://vncracking.host.sk/huongdan/Flash_Keeper%20_ver_3_0_hacnho_tut.htm
Posted by: MinhHuyen Dec 1 2003, 09:41 AM
Hôm nay cũng rỗi rãi nên thử crack chương trình đã được Hacnho crack một cách thành công mỹ mãn này nhưng dùng cách tiếp cận cổ điển và công cụ cổ điển Theo quan điểm phương Đông theo tư tưởng chính danh của Khổng tử: vua cho ra vua, tôi cho ra tôi ai cũng tu thân tề gia trị
quốc tất có ngày bình được thiên hạ Đó là cách tiếp cận của Hacnho Bắt đầu từ GetWindowTextA rồi cứ thế tiếp tục theo các lệnh jne để rồi có ngày bình được thiên hạ nghĩa là đi từ gốc đến ngọn Cách này tuy
chậm nhưng chắc
Tuy vậy, theo quan điểm phương Tây, cách tiếp cận hoàn toàn khác hẳn Chúng ta xác định mục đích cuối cùng trước và sau đấy sẽ làm đủ mọi cách để có thể đạt được mục tiêu đó Người anh có câu: The end justifies the means là như vậy Trong tình huống này, mục tiêu của chúng ta là có được màn hình Xin chúc mừng hay tránh cái hộp thoại: "Số serial bạn
nhập vào sai rồi"
Trang 4Áp dụng cách tiếp cận này, chúng ta sẽ sử dụng công cụ kinh điển
WinDisassembler Vào String Resources và search thử chuỗi Wrong Registration Code, chúng ta sẽ rơi vào 2 điểm
CODE
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042140C(C)
|
:0042142C 83F82C cmp eax, 0000002C
:0042142F 7D20 jge 00421451
:00421431 6A00 push 00000000
:00421433 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"Wrong Registration Code!"
|
:00421435 68C0054600 push 004605C0
Như HacNho đã phân tích, nếu bạn cuộn lên một chút thì cạn bạn sẽ thấy eax chứa độ dài của chuỗi serial mà chúng ta nhập vào Và độ dài tối thiểu của chuỗi này phải là 42 (2Ch)
Tiếp tục tìm chuỗi Wrong Registration Code, chúng ta lại rơi vào địa chỉ sau:
Trang 5CODE
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00421468(C)
|
:004214A7 6A00 push 00000000
:004214A9 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"Wrong Registration
Code!"
|
:004214AB 68C0054600 push 004605C0
Cũng cuộn lên một chút tới địa chỉ 421468 chúng ta thấy :
CODE
:0042145E E86D880100 call 00439CD0
:00421463 83C404 add esp, 00000004
:00421466 85C0 test eax, eax
:00421468 743D je 004214A7
Như vậy, lệnh call 439CD0 chắc chắn là hàm kiểm tra serial number và giá trị trả eax =0 sẽ là sai còn khác 0 chắc là đúng Nếu thử trace vào lệnh
Trang 6call này thì nghi ngờ của chúng ta càng được khẳng định vì có 2 reference đến lệnh này Một cái là để kiểm tra serial chúng ta nhập vào còn một cái
là để kiểm tra tình trạng license ở đầu chương trình Nếu muốn crack thì chúng ta chỉ cần đơn giản sửa các lệnh ở 439CD0 thành mov eax,1 ret là xong
Nhưng chẳng phải hacnho nói với chúng ta là có thể tìm được số serial thật hay sao ? Vậy thì tại sao chúng ta không thử nhỉ Lần này chúng ta vẫn có hai lựa chọn, một là từ địa chỉ 439CD0 chúng ta cuộn dần xuống
để tìm các lệnh jump có điều kiện Hoặc là cách thứ hai : tìm theo mục đích Vậy mục đích của chúng ta là gì ? Phải rồi : tìm đoạn mã mov eax,1 ret và xor eax,eax ret Khi tìm được chúng, chúng ta sẽ dò dần lên để tìm lệnh jump có điều kiện Và chúng ta nhanh chóng tìm được :
CODE
:00439F7F 8B44244C mov eax, dword ptr [esp+4C]
:00439F83 8B4C2408 mov ecx, dword ptr [esp+08]
:00439F87 50 push eax
:00439F88 51 push ecx
* Reference To: MSVCRT._mbscmp, Ord:0159h
|
:00439F89 FF15C8DA4400 Call dword ptr [0044DAC8]
:00439F8F 83C408 add esp, 00000008
:00439F92 C644244405 mov [esp+44], 05
:00439F97 85C0 test eax, eax
:00439F99 8D4C2408 lea ecx, dword ptr [esp+08]
:00439F9D 7571 jne 0043A010
Trang 7Vâng không cần phải đủ giỏi tiếng anh để biết mbs là Multi byte String chúng ta cũng có thể nhận thấy cmp là viết tắt của từ compare Nếu đúng vậy thì eax và ecx sẽ chứa số serial của chúng ta và số serial đúng Nhưng cái nào là số đúng ? (Nếu muốn crack thì có thể chúng ta đổi lệnh push ecx thành push eax chắc là được )
Nhưng chúng ta muốn fish serial giống Hacnho cơ mà ? Vậy thì chúng ta chỉ cần đơn giản là Load FlashKeeper trong WinDasm, Goto địa chỉ
439F87 và F2 để đặt break point Sau đó, khi WinDasm break, chỉ cần xem giá trị ở địa chỉ eax và ecx là sẽ nhận thấy ngay số serial mình cần Sau khi tôi chạy thử thì thấy ecx có vẻ chứa số serial thật
Hee hê, troong thế mà mất thời gian phết Định múa rìu qua mắt HacNho một tí nhưng tới lúc xong mới biết mình dại Thôi lần sau xin chừa