* Possible StringData Ref from Data Obj ->"FamilyKeyLogger" | :00403501 8B0D08514000 mov ecx, dword ptr [00405108] :00403507 51 push ecx chú ý tại 004034D6© nó cho biết có một lệnh nhảy có điều kiện đến cái nag, nhấn shift+F12 điền vào địa chỉ này OK bạn sẻ đến đây: :004034C9 FF1578104000 Call dword ptr [00401078] :004034CF E895E8FFFF call 00401D69 :004034D4 85C0 test eax, eax :004034D6 7427 je 004034FF nhảy đến nag nếu =0 :004034D8 6A00 push 00000000 * Possible StringData Ref from Data Obj ->"FamilyKeyLogger" | :004034DA A108514000 mov eax, dword ptr [00405108] :004034DF 50 push eax * Possible StringData Ref from Data Obj ->"Thank you for registration!" | :004034E0 8B0D4C514000 mov ecx, dword ptr [0040514C] như vậy đều cần thiết là cái lệnh nhảy đó phải đứng im, tuy nhiên điều cần làm là tìm key chớ không phải patch, và nếu bạn patch thì cho dù co lên cái câu "Thank you for registration" bạn cũng vẫn bị đòi đăng ký ở lần sau, các soft bây giờ nó đểu lắm, patch nag là xưa rồi,Okie bạn hãy nhìn lên trước cái lệnh nhảy sẽ có lệnh call 00401D69, chính lệnh call này sẽ gọi một hàm , và hàm này quyết định xem số key của bạn đúng hay sai. Vậy hãy di chuyển đến đó và click vào nút Call , bạn sẽ đến một nơi nào đó trong chương trình , hãy kéo xuống một đoạn nữa đến chỗ sau: :00401E4B 8D95F8FDFFFF lea edx, dword ptr [ebp+FFFFFDF8] chuyển key bạn nhập vào edx :00401E51 52 push edx * Reference To: KERNEL32.lstrlenA, Ord:0308h hàm này cho chiều dài của chuỗi ban nhập | :00401E52 FF159C104000 Call dword ptr [0040109C] :00401E58 83F81D cmp eax, 0000001D so sánh số ký tự với 1D(hex)=29(Dec) :00401E5B 7407 je 00401E64 nhảy nếu bằng :00401E5D 33C0 xor eax, eax set cho eax=0 ( nguyên nhân dẫn đến cái nag) :00401E5F E942040000 jmp 004022A6 như vậy số ký tự bạn nhập vào phải bằng 29, tất nhiên nếu nhìn vào W32dasm thì không thể thấy chính xác các phép toán thực hiện như thế nào vì nó không thể hiện được giá trị của register hay address tại thời điểm chạy đến đoan mã này, nhưng bạn cần suy đoán để tìm ra thôi, ví dụ như tại sao nhìn vào lea edx, dword ptr [ebp+FFFFFDF8] lại biết là nó chuyển reg của mình nhập vào edx, cái này thì không ai có thể bày cho bạn được mà bạn phải crack nhiều , chịu khó quan sát và kinh nghiệm sẽ cho bạn biết chỗ cần tìm. Đối với người mới bắt đầu có thể xài soft-ice để kiểm chứng lại cái đoạn tôi nói ở trên, do crack này hơi dài tôi chỉ nói sơ trong SI như sau: set BP trong SI là getdlgitemtextA xong press F5 trở về lại màn hình đăng ký, nhấn OK bạn sẽ trở lại màn hình của SI, nhấn F12 để trở về vị trí vừa gọi hàm Getdlgitemtexta, trace down bằng F10 , thêm một luu ý nữa nếu gặp các hàm API thì cứ việc nhấn F10, bạn có thể biết nó là hàm API khi trước đó có phần Kernell32.dll hay User32., bởi vì bạn không cần biết nội dung của hàm đó, nếu muốn biết thì tốtnhất là tìm các tut về hàm API, còn nếu gặp các lệnh call đến các địa chỉ như Call 004xxxxxx thì các bạn làm ơn trace bằng F8 để vào xem cái hàm đó nó làm gì nếu không sẽ trace qua cái đoạn code cần tìm. Bạn trce bằng F10 đến khi gặp hàm [Kernel32!sleep], ngay bên dưới nó sẽ có một lệnh Call, trace bằng F8 vào lệnh call này bạn sẽ đến đoạn mã cần tìm tương ứng bên W32dasm. lưu ý đối với những người mới cài và sử dụng SI:để set breakpoint cho các hàm API trong Kernek32.dll và User32.dll cần phải mở Winice.dat bằng Notepad và bỏ dấu ";" trước các lệnh sau EXP=c:\windows\system\kernel32.dll EXP=c:\windows\system\user32.dll Rồi khởi động lại. Trở lại với W32Dasm, nói chung nhiệm vụ của bạn là phải làm sao cho nó đừng nhảy tới chỗ xor eax,eax mà lèo lái sao cho nó đến chỗ mov eax,00000001 thì soft sẽ đăng ký thành công, tất nhiên bạn có thể patch nhưng như vậy thì cũng phải sử cả chục cái lệnh nhảy chớ không ít đâu,bây giờ giả sử bạn đã nhập đủ 29 ký tự thì sẽ đến vị trí sau: :00401E64 0FBE85FCFDFFFF movsx eax, byte ptr [ebp+FFFFFDFC] :00401E6B 83C00A add eax, 0000000A cộng kt thứ 5 với A :00401E6E 83F837 cmp eax, 00000037 so sánh với 37 :00401E71 7E07 jle 00401E7A nhảy nếu nhỏ hơn :00401E73 33C0 xor eax, eax :00401E75 E92C040000 jmp 004022A6 Bạn hãy nhớ byte ptr[ebp+FFFFFDF8] là ký tự đầu tiên, nên byte ptr [ebp+FFFFFDFC] là ký tự thứ 5 Bạn thấy đó dưới cái jle nó lăm lăm cái xor eax,eax chui vào đó là tiêu luôn, vạy nên ký tự của bạn có mã ASCII hệ 16 sau khi cộng với 5 phải <= 37, (kí tự thứ 5<=2D) Bạn hãy dò đến các phần tiếp theo nó sẽ kiểm tra các ký tự thứ 10([ebp+FFFFFE01], ký tự thứ 15([ebp+FFFFFE06]) ký tự thứ 20 tất cả nó đều có điểm chung là phải nhỏ hơn hoặc bằng 2D hãy tìm đến vị trí tiếp theo: :00401ED2 0FBE95FCFDFFFF movsx edx, byte ptr [ebp+FFFFFDFC] ký tụ thứ 5 vào edx :00401ED9 0FBE8501FEFFFF movsx eax, byte ptr [ebp+FFFFFE01] ký tự thứ 10 vào eax :00401EE0 3BD0 cmp edx, eax ktthứ 5 phải bằng kt thứ 10 :00401EE2 7572 jne 00401F56 :00401EE4 0FBE8DFCFDFFFF movsx ecx, byte ptr [ebp+FFFFFDFC] ký tự thứ 5 vào ecx :00401EEB 0FBE9506FEFFFF movsx edx, byte ptr [ebp+FFFFFE06] ký tự thứ 20 edx :00401EF2 3BCA cmp ecx, edx KTthứ 5 phải = KTthứ 20 :00401EF4 7560 jne 00401F56 :00401EF6 0FBE85FCFDFFFF movsx eax, byte ptr [ebp+FFFFFDFC] ký tự thứ 5 :00401EFD 0FBE8D10FEFFFF movsx ecx, byte ptr [ebp+FFFFFE10] ký tự thứ 25 :00401F04 3BC1 cmp eax, ecx :00401F06 754E jne 00401F56 :00401F08 0FBE95FCFDFFFF movsx edx, byte ptr [ebp+FFFFFDFC] :00401F0F 83FA2D cmp edx, 0000002D ký tự thứ 5 phải bằng 2D :00401F12 7442 je 00401F56 như vậy bạn có thể hình dung sơ là số đăng ký sẽ như sau:XXXX-XXXX-XXXX- XXXX-XXXX tiếp theo hãy tìm hiểu chỗ này: :00401F56 0FBE85F8FDFFFF movsx eax, byte ptr [ebp+FFFFFDF8] ký tự thứ 1 :00401F5D 83F846 cmp eax, 00000046 so sánh với 46 :00401F60 7566 jne 00401FC8 :00401F62 0FBE8DF9FDFFFF movsx ecx, byte ptr [ebp+FFFFFDF9] :00401F69 83F945 cmp ecx, 00000045 :00401F6C 755A jne 00401FC8 :00401F6E 0FBE95FAFDFFFF movsx edx, byte ptr [ebp+FFFFFDFA] . :00 401 E52 FF159C 104 000 Call dword ptr [00 4 01 0 9C] :00 401 E58 83F81D cmp eax, 00 000 01D so sánh số ký tự với 1D(hex)=29(Dec) :00 401 E5B 7 407 je 00 401 E64 nhảy nếu bằng :00 401 E5D 33C0 xor. :00 403 4C9 FF157 8 10 400 0 Call dword ptr [00 4 01 0 78] :00 403 4CF E895E8FFFF call 00 401 D69 :00 403 4D4 85C0 test eax, eax :00 403 4D6 7427 je 00 403 4FF nhảy đến nag nếu =0 :00 403 4D8 6A 00 push. thứ 1 :00 401 F5D 83F846 cmp eax, 00 000 046 so sánh với 46 :00 401 F 60 7566 jne 00 401 FC8 :00 401 F62 0FBE8DF9FDFFFF movsx ecx, byte ptr [ebp+FFFFFDF9] :00 401 F69 83F945 cmp ecx, 00 000 045