Đăng Nhập

Vui lòng khai báo chính xác tên truy cập và mật khẩu!

Quên mật khẩu?

    Cách hack một phần mềm

      Tony Stark

      Giới tính : Nam

      Tuổi : 31

      Đến từ : Cần thơ

      Ngày Tham gia : 10/01/2012

      Tổng số bài gửi : 750

      #1

       Sun Apr 29, 2012 1:14 pm

      phần I:crack cơ bản


      Hiện này có rất nhiều phần mềm hay với những tính năng độc đáo, cac bạn chỉ cần lên mạng và tải chúng về hoặc mua một CD về và cài vào máy. Tuy nhiên với tình trạng internet bùng nổ và những phần mềm tràn nan như hiện này thì để kiếm cho mình một phần mềm vừa ý quả là không phải dễ

      Sau khi đã có một phần mềm vừa ý rồi thì một vấn đề khác cũng được đặt ra là: serial number. Nhà sản xuất cung cấp cho bạn hững phần mềm dùng thử trong một thời gian nhất định, sau khoảng thời gian này thì không sử dụng được phần mềm này nữa. Bạn phải liên hệ với nhà cung cấp mua một số Sn thì mới sử dụng tiếp được, giá tiền của những phần mềm này không phải rẻ. Mình nói vậy các bạn sẽ hỏi: Tại sao trên thị trường bán các phần mềm chỉ với giá 6000->9000 đ/cd ? Tất cả những phần mềm này đã được crack và sao chép ngay sau khi nó có mặt trên thị trường, thậm chí nó còn chưa có mặt trên thị trường nữa. Bây giờ mình sẽ hướng dẫn các bạn sử dụng những phần mềm này một cách miễn phí (hoặc ít nhất cũng chỉ phải trả cước internet thôi)

      Đầu tiên các bạn phải hiểu crack là gì? Crack là một từ nóng có nghĩa là bẻ gãy, bẻ gãy cái gi? Như đã nói ở trên, nhà sản xuất cung cấp cho bạn những phần mềm mà phải có Sn mới sử dụng được. Một phần mêm sau khi đã được crack thì không cần Sn vẫn sử dụng được

      Hiện nay có rất nhiều phần mềm phục vụ cho việc crack. Có thể sử dụng 1 hoặc 2,3 phần mềm kết hợp với nhau để crack, phổ biến hiện nay là Win32dasm, softice, frogice, Hview...và còn rất nhiều. Ngoài ra thì có thể tạo keygen, crackfile để crack phần mềm nào đó.

      Đây là bài viết dành cho newbie, những kiến thức bạn đọc được ở đây chỉ giúp các bạn nắm vững những kiến thức căn bản để có thể học những kiến thức cao hơn.

      Những công cụ bạn cần: Win32dasm, Hview (một số người dùng softice ). Trong các cách crack thì đây là cách đơn giản nhất, chính vì vậy mức độ thành công của nó không cao



      Đầu tiên bạn chạy chương trình cần crack, nếu chưong trình chưa được đăng ký thì nó sẽ hiện lên một Menu bắt bạn đăng ký, bạn hãy nhập đại vào đó một những dòng vô nghĩa rồi nhấn OK điều tất nhiên là nó sẽ thông báo Sn bị sai, điền quan trọng không phải là sai mà bạn hãy để ý đến câu thông báo, đại loại như là :"serial number is incorect" hay như Việt key là "mã số sai hoặc thiếu" bạn hãy nhớ dòng này.

      Chạy win32dasm chọn "Open file to Disassembler...", chọn file cần crack trên menu chọn String Data References. Mình xin dừng lại giải thích một chút chỗ này..nếu bạn nào từng học lập trình rồi thì dễ hiểu thôi. Nếu mà Sn bạn nhập vào mà giống với Sn của chương trình cần crack thì cho đăng ký bản quyền, nếu không (else) thì tới dòng thông báo "Sn is incorect"...Bây giờ bạn dùng W32dasm sửa nếu mà nhập sai thì cho đi tiếp nếu nhập đúng thì nói là "Sn is incorrect".

      Sau khi bạn mở menu String Data References , vào đó kiếm cái dòng hồi nãy mình bảo bạn nhớ đó "Sn is incorrect" và nhấn kép vào đó lúc này W32dasm đưa chúng ta đến chỗ thông báo chưa đăng ký, từ dòng này hãy dời con trỏ lên phía trên cho tới khi nào thấy dòng "je.." hoặc "jne" thì dừng lại. Còn nếu thấy dòng Reference... 0000 thì dừng tại đó vì bảng thông báo sẽ được gọi từ một bảng khác, nhấn Shift+F12 nhập vào địa chỉ sau Reference ->Enter lặp lại các bước như trên cho tới khi nào gặp dòng "je" hoặc "jne " thì dừng lại. Cuối cùng sau khi đã thấy dòng này rồi thì nhìn xuống thanh Status bar bạn sẽ thấy một chuỗi sau : "@Offset ..00" hãy nhới lấy chuỗi đó...bỏ chữ "h" (hex) ở cuối đi nhé.

      Tiếp theo đóng W32dasm lại mở Hiew ra, chọn file cần crack nhấn F4-> decode, F5 gõ vào chuỗi "0000..." bạn có được sau chuỗi "Offset..." đây chính là dòng quan trọng nhất bởi vì bạn có thể dùng dòng này để patch, Nhấn F3->F2 rồi sửa thành "jne" nếu nó là "je" hoặn thành "je" nếu nó là "jne" save (F9) lại và thoát ra ngoài và kiểm tra kết quả...bạn sẽ nhận được kết quả mong đợi đó.

      Chúc bạn may mắn.


      phần II:Crack Family Keylogger ver 2.53


      I. Giới thiệu



      Các bạn có thể tải Family Keylogger ver 2.53 từ trang [You must be registered and logged in to see this link.]



      II. Bắt tay vào crack



      Đây là một soft kiểm tra key không phức tạp nhưng lại rất dài dòng vậy nên nếu không tìm ra chô cần carck thì rất dễ nản , bây giờ hãy bắt đầu.



      Mở W32Dasm disasembler nó ra tìm cái nag invalid key trong Refs>String Data.



      Dbclick vào nó sẽ đưa bạn đến chỗ cái nag



      * Referenced by a (U)nconditional or ©onditional Jump at Address:



      |:004034D6©



      |



      :004034FF 6A00 push 00000000



      * 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 ba5n 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 873;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 0FBE95 FCFDFFFF 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]



      :00401F75 83FA46 cmp edx, 00000046



      :00401F78 754E jne 00401FC8



      :00401F7A 0FBE85FBFDFFFF movsx eax, byte ptr [ebp+FFFFFDFB]



      :00401F81 83F845 cmp eax, 00000045



      :00401F84 7542 jne 00401FC8



      cái thằng soft này quả là lắm chuyện tôi chỉ có thể nói vắn tắt thế này các ký tự từ 1 đến 4 , kt 1 phải khác 46 hoặc kt2 phải khác 45 hặc kt3 khác 46.. Có nghĩa là phải làm cho 1 trong bốn lệnh nhảy trên nhảy nếu không sẽ đến cái chỗ xor eax,eax.



      Tiếp theo sau khi nhảy sẽ đến đây:



      :00401FC8 0FBE8DF8FDFFFF movsx ecx, byte ptr [ebp+FFFFFDF8]



      :00401FCF 0FBE95FAFDFFFF movsx edx, byte ptr [ebp+FFFFFDFA]



      :00401FD6 3BCA cmp ecx, edx



      :00401FD8 0F858A000000 jne 00402068



      :00401FDE 0FBE85F9FDFFFF movsx eax, byte ptr [ebp+FFFFFDF9]



      :00401FE5 0FBE8DFBFDFFFF movsx ecx, byte ptr [ebp+FFFFFDFB]



      :00401FEC 3BC1 cmp eax, ecx



      :00401FEE 7578 jne 00402068



      :00401FF0 0FBE9511FEFFFF movsx edx, byte ptr [ebp+FFFFFE11]



      :00401FF7 0FBE8513FEFFFF movsx eax, byte ptr [ebp+FFFFFE13]



      :00401FFE 3BD0 cmp edx, eax



      :00402000 7566 jne 00402068



      :00402002 0FBE8D12FEFFFF movsx ecx, byte ptr [ebp+FFFFFE12]



      :00402009 0FBE9514FEFFFF movsx edx, byte ptr [ebp+FFFFFE14]



      :00402010 3BCA cmp ecx, edx



      :00402012 7554 jne 00402068



      :00402014 0FBE85FEFDFFFF movsx eax, byte ptr [ebp+FFFFFDFE]



      :0040201B 0FBE8DFFFDFFFF movsx ecx, byte ptr [ebp+FFFFFDFF]



      :00402022 3BC1 cmp eax, ecx



      :00402024 7542 jne 00402068



      cũng như trên bạn phải làm cho nó nhảy một trong các lệnh nhảy này, không là ra cái nag, còn mấy cái kt trên là ký tự thứ mấy thì chắc là bạn cũng nắm được cách tính rồi phải không?



      Đơn giản tôi lấy cái đầu tiên nó chuyển kt thứ nhất vào ecx và kt thứ 3 vào edx, và nó so edx với ecx vậy nếubạn muốn nó nhảy thì ký tự thứ nhất phải khác ký tự thứ 3.



      Bây giờ đến chô tiếp



      :00402068 0FBE9502FEFFFF movsx edx, byte ptr [ebp+FFFFFE02]



      :0040206F 83FA74 cmp edx, 00000074



      :00402072 755A jne 004020CE



      :00402074 0FBE8503FEFFFF movsx eax, byte ptr [ebp+FFFFFE03]



      :0040207B 83F853 cmp eax, 00000053



      :0040207E 754E jne 004020CE



      :00402080 0FBE8D04FEFFFF movsx ecx, byte ptr [ebp+FFFFFE04] kt thứ 12



      :00402087 83F952 cmp ecx, 00000052



      Đây nữa:



      :00402126 0FBE85FDFDFFFF movsx eax, byte ptr [ebp+FFFFFDFD] kt thứ 5



      :0040212D 83F854 cmp eax, 00000054



      :00402130 7424 je 00402156



      :00402132 0FBE8D02FEFFFF movsx ecx, byte ptr [ebp+FFFFFE02] kt thứ 10



      :00402139 83F954 cmp ecx, 00000054



      :0040213C 7418 je 00402156



      :0040213E 0FBE9507FEFFFF movsx edx, byte ptr [ebp+FFFFFE07] kt thứ 15



      :00402145 83FA54 cmp edx, 00000054



      :00402 148 740C je 00402156



      :0040214A 0FBE850CFEFFFF movsx eax, byte ptr [ebp+FFFFFE0C]



      :00402151 83F854 cmp eax, 00000054



      :00402154 7542 jne 00402198



      tuy nhiên chỗ này thì khác , mấy cái je mà nhảy là đến xor eax, eax vậy nên các ký tự phải thỏa điều kiện để không bằng cho đến chỗ jne 00402198



      Hy vọng là bạn đã hiểu được cách thức , hãy làm sao cho nó nhảy qua chô xor eax,eax đến được chỗ này là bạn thành công:



      :00402299 3BD0 cmp edx, eax



      :0040229B EB04 jmp 004022A1



      :0040229D 33C0 xor eax, eax



      :0040229F EB05 jmp 004022A6



      * Referenced by a (U)nconditional or ©onditional Jump at Address:



      |:0040229B(U)



      |



      :004022A1 B801000000 mov eax, 00000001



      để dễ cho các bạn tính toán tôi cho saün bảng như sau:



      byte ptr [ebp+FFFFFDF8] kt thứ 1



      byte ptr [ebp+FFFFFDF9] 2



      byte ptr [ebp+FFFFFDFA] 3



      byte ptr [ebp+FFFFFDFB] 4



      byte ptr [ebp+FFFFFDFC] 5



      byte ptr [ebp+FFFFFDFD] 6



      byte ptr [ebp+FFFFFDFE] 7



      byte ptr [ebp+FFFFFDFF] 8



      byte ptr [ebp+FFFFFE00] 9



      byte ptr [ebp+FFFFFE01] 10



      byte ptr [ebp+FFFFFE02] 11



      byte ptr [ebp+FFFFFE03] 12



      byte ptr [ebp+FFFFFE04] 13



      byte ptr [ebp+FFFFFE05] 14



      byte ptr [ebp+FFFFFE06] 15



      byte ptr [ebp+FFFFFE07] 16



      byte ptr [ebp+FFFFFE08] 17



      byte ptr [ebp+FFFFFE09] 18



      byte ptr [ebp+FFFFFE0A] 19



      byte ptr [ebp+FFFFFE0B] 20



      byte ptr [ebp+FFFFFE0C] 21



      byte ptr [ebp+FFFFFE0D] 22



      byte ptr [ebp+FFFFFE0E] 23



      byte ptr [ebp+FFFFFE0F] 24



      byte ptr [ebp+FFFFFE10] 25



      byte ptr [ebp+FFFFFE11] 26



      byte ptr [ebp+FFFFFE12] 27



      byte ptr [ebp+FFFFFE13] 28



      byte ptr [ebp+FFFFFE14] 29



      Ý tưởng của thuật toán này như sau:



      kt1+kt2=kt3+kt4 và kt1!=kt3 ví dụ như: EFFE, FEEF, 2112..vv



      Kt5=kt10=kt15=kt20=kt25="-"(2D hex) hay <=2D khi kt5!=kt20.



      Kt6, kt7 có mã ASCII>=7



      Kt7>=kt8



      Kt16=kt18!=kt17



      Mã ascii (Kt23)!=mã ascii (kt24)+1



      Kt26+kt29=kt27+kt28.

      phần III:Crack chương trình giới hạn thời gian sử dùng:

      Khi một chương trình được chạy hoặc thực hiện , nó sẽ duyệt qua một dãy các hàm và thủ tục. Thông thường chương trình sẽ sử lý 6 thủ tục ( procedure ) như sau:



      1.) GetSystemTime. ( Kiểm tra thời gian của hệ thống ).

      2.) Installed. (Kiểm tra rằng chương trình đã được cài đặt từ bao giờ ).

      3.) Expired. (Hiển thị thông báo quá hạn).

      4.) DaysLeft. (Hiển thị thông báo " you have % days left ").

      5.) Halt. (Thoát khỏi chương trình).

      6.) Main. (Vào chương trình chính).



      Dựa vào những thủ tục trên , ta có thể thấy rằng một chương trình quy định thời gian sử dụng sẽ được check giống như sau :



      00000001 : Gọi thời gian hệ thống.

      00000002 : Kiểm tra thời gian chương trình đã được cài đặt

      00000003 : Nếu hai thông số trên có giá trị lớn hơn 30 ngày thì

      00000004 : Gọi thông báo quá hạn

      00000005 : Nhảy đến phần Halt – Thóat chương trình

      00000006 : Ngòai ra

      00000007 : Tính số ngày còn lại

      00000008 : Trở về màn hình chính của chương trình



      Đây là một ví dụ thực tế



      Call 041829B0 (Gọi thời gian hệ thống)

      Call 0492832C (Thời gian cài đặt)

      Cmp Ax,Bx (Thực hiện lệnh If – Nếu )

      JL 04927435 (Chuyển đến hay không chuyển đến phần sử dụng chương trình – địa chỉ JL hay không, phụ thuộc vào giá trị của ax và bx )

      Call 04348234 (Hết hạn

      Jmp 0432833C (Thóat)

      ---Địa chỉ JL---

      Call 04583BC0 (Số ngày còn lại)

      Jmp 042392BC (Phần màn hình chính của chương trình )



      Nếu bạn nhìn đoạn mã trên, bạn sẽ nhận ra rằng cách chương trình thực hiện sẽ dựa trên giá trị của hai thanh Ax / Bx .

      Chúng ta sẽ nảy sinh một vấn đề, là làm sao xác định được đúng vị trí để patch bởi vì có rất nhiều lệnh so sánh trong chương trình đã được decompile .Ok bây giờ tôi sẽ chỉ cho các bạn cách để tìm đúng vị trí .



      Tìm đúng vị trí cần patch :



      Dựa vào đoạn mã ở trên , sẽ có hai trường hợp phát sinh .



      1> Khi bạn vẫn trong khoảng thời gian được dùng thử ( < 30 ngày etc.. tuỳ theo khoảng thời gian mà chương trình quy định ) Với trường hợp này chương trình sẽ kiểm tra như sau :



      GetSystemTime

      Installed

      Cmp ax,bx

      JL (Jump) <---- Chú ý vào đây

      DaysLeft

      Main



      2> Trường hợp chương trình quá hạn sử dụng :



      GetSystemTime

      Installed

      Cmp ax,bx

      JL ( No Jump ) <---- Chú ý vào đây

      Expired

      Halt



      ----------------------------------------



      Trong hai trường hợp, bạn thấy đoạn code từ đầu chương trình đến lệnh JL hoàn toàn giống nhau . Để crack một chương trình giới hạn thời gian, bạn phải thay đổi giá trị của ax / bx hoặc bắt chương trình thay đổi lệnh JL thành lệnh JMP (sơ đồ 1).

      Ok, chắc hẳn bạn đã cảm thấy hiểu những vấn đề chính rồi , bây giờ chuyển sang giai đoạn 2

      ------------------------------------------------------------

      Công cụ và những đòi hỏi cần thiết :

      SoftIce v3.23 hoặc mới hơn Symbol Loader.

      1 trình biên tập hex.

      Kiến thức cơ bản về ASM.

      ------------------------------------------------------------



      Đầu tiên , ta khởi động softice và sau tìm đến menu File và click vào " Open module " , sau đó chọn file mà bạn muốn crack. Sau đó tìm đến menu Module và click vào Load Module .

      Thông thường bạn sẽ gặp những thông báo, những thông báo này cho biết rằng bạn có lỗi trong quá trình dich symbol. Bạn hãy click vào nút Yes để tiếp tục loading file . Bạn có thể nhìn thấy hàng đống đoạn code như sau :

      FFFF INVALID

      FFFF INVALID

      FFFF INVALID

      FFFF INVALID

      FFFF INVALID

      v..v..v,.......

      Bạn không càn quan tâm đến điều này vì đây không phải là những đoạn thông báo lỗi, đơn giản là là nó thông báo những vùng nhớ mà softice không có thể các định được.



      ************************************

      Bước 1: Đóng Code Window .



      Bạn gõ " WC " trong softice. Chúng ta không cần quan tâm đến nó bây giờ.



      ************************************

      Bước 2: Thiết đặt breakpoint - GetSystemTime. ( Khu vực bị phá )



      Chúng ta cần phải đặt breakpoint GetSystemTime ( Đây là một trong số rất nhiều hàm API để trả lại giá trị ngày / giờ của hệ thống )

      Bạn set breakpoint bằng cách gõ : " BPX GetSystemTime "

      GetSystemTime Cũng chỉ là địa chỉ của hàm, bạn cũng có thể đặt breakpoint như sau " BPX 004234D" nếu như bạn biết được chính xác địa chỉ của hàm.

      Bạn cũng có thể cộng thêm một offset vào BPX , ví dụ "BPX GetSystemTime + 4 " như vậy softice sẽ dừng tại offset thứ 4 tính từ điểm bắt đầu của chức năng GetSystemTime.



      ************************************

      Bước 3 : Tiếp tục cho chương trình chạy :



      Bạn đã set breakpoint GetSystemTime xong , bây giờ là lúc để chương trình khởi động và chạy. Tất cả những điều bạn cần làm bây giờ là ấn Ctrl + D. Chương trình sẽ tiếp tục chạy và nó sẽ sử lý hàm GetSystemTime , khi đó Softice sẽ được khỏi động và dừng chương trình tại điểm bắt đầu của hàm. bạn sẽ nhin` thấy dòng chữ : “BPX due to KERNEL32!GetSystemTime” ---> chúng ta đã đến đúng điểm cần đến.



      ************************************



      Bước 4 : Thoát khỏi Hàm



      Bây giờ chúng ta đang ở điểm bắt đầu của hàm GetSystemTime. Tất cả những điều bạn cần làm bây giờ là ấn F11 một lần . Bây giờ là lúc mọi chuyện trở nên thú vị hơn rất nhiều.



      ************************************



      Bước 5 : Tìm ra mã đến khi gặp nag screen.



      Bạn chỉ cần ấn F10 đến khi gặp thông báo : “You have % day`s left” xuất hiện . Hãy chú ý rằng tất cả những dòng lệnh đã xử lý đều được hiển thị trong của sổ lệnh ( command window. Tất cả những thông tin này đều đang được đưa vào trong Bộ nhớ đệm của Softice.



      ************************************



      Bước 6 : Nhớ file Log.



      Khi nag screen xuất hiện, đây là lúc để bạn save file log đầu tiên. Bạn làm điều này bằng cách click vào softice symbol loader --> đến menu File và chọn '”Save softice history as...”. Lưu tập tin với tên Log1.txt .



      ************************************



      Bước 7 : Set lại thời gian của hệ thống và làm lại toàn bộ các bước trên.



      Mục đích của bước này là để tạo file Log2.txt. Lúc này bạn thiết lập lại ngày cho hệ thống đến quá thời gian sử dụng , như vậy sẽ có một thông báo rằng quá hạn cho phép sử dụng --> làm lại bước 6 khi bạn bắt gặp cái thông báo này nhưng nhớ lưu với tên Log2.txt.



      ************************************



      Bước 8 : So Sánh 2 file log:



      Sau khi bạn có 2 file log, điều bây giờ là bạn phải so sánh coi sự khac nhau của hai file này, dưới đây tôi sẽ cho bạn một ví dụ :

      LOG FILE 1. ( Khi bạn còn gặp thông báo You have x days left )

      ***********

      Break due to BPX KERNEL32!GetSystemTime (ET=33.15 milliseconds)

      Break due to G (ET=383.02 microseconds)

      015F:78026B90 663B0512870378 CMP AX,[78038712]

      015F:78026B97 756B JNZ 78026C04 (JUMP )

      015F:78026C04 8D8534FFFFFF LEA EAX,[EBP-00CC]

      015F:78026C0A 50 PUSH EAX

      015F:78026C0B FF1540D10278 CALL [KERNEL32!GetTimeZoneInformation]

      015F:78026C11 83F8FF CMP EAX,-01

      015F:78026C14 7430 JZ 78026C46 (NO JUMP)

      015F:78026C16 83F802 CMP EAX,02

      015F:78026C19 7527 JNZ 78026C42 (NO JUMP)

      015F:78026C1B 66837DCE00 CMP WORD PTR [EBP-32],00

      015F:78026C20 7420 JZ 78026C42 (NO JUMP)

      015F:78026C22 837DDC00 CMP DWORD PTR [EBP-24],00

      015F:78026C26 741A JZ 78026C42 (NO JUMP)

      015F:78026C28 6A01 PUSH 01

      015F:78026C2A 58 POP EAX

      015F:78026C2B 56 PUSH ESI

      015F:78026C2C 57 PUSH EDI

      015F:78026C2D 8D75E0 LEA ESI,[EBP-20]

      015F:78026C30 BF08870378 MOV EDI,78038708

      015F:78026C35 A5 MOVSD

      015F:78026C36 A5 MOVSD

      015F:78026C37 A5 MOVSD

      015F:78026C38 A5 MOVSD

      015F:78026C39 5F POP EDI

      015F:78026C3A A300870378 MOV [78038700],EAX

      015F:78026C3F 5E POP ESI

      015F:78026C40 EB90 JMP 78026CD2 (JUMP )

      015F:78026BD2 50 PUSH EAX

      015F:78026BD3 0FB745FC MOVZX EAX,WORD PTR [EBP-04]

      015F:78026BD7 50 PUSH EAX

      015F:78026BD8 0FB745FA MOVZX EAX,WORD PTR [EBP-06]

      015F:78026BDC 50 PUSH EAX

      015F:78026BDD 0FB745F8 MOVZX EAX,WORD PTR [EBP-08]

      015F:78026BE1 50 PUSH EAX

      015F:78026BE2 0FB745F6 MOVZX EAX,WORD PTR [EBP-0A]

      015F:78026BE6 50 PUSH EAX

      015F:78026BE7 0FB745F2 MOVZX EAX,WORD PTR [EBP-0E]

      015F:78026BEB 50 PUSH EAX

      015F:78026BEC 0FB745F0 MOVZX EAX,WORD PTR [EBP-10]

      015F:78026BF0 50 PUSH EAX

      015F:78026BF1 E8EE000000 CALL 78026CE4

      015F:78026BF6 8B4D08 MOV ECX,[EBP+08]

      015F:78026BF9 83C41C ADD ESP,1C

      015F:78026BFC 85C9 TEST ECX,ECX

      015F:78026BFE 7402 JZ 78026C02 (NO JUMP)

      015F:78026C00 8901 MOV [ECX],EAX

      015F:78026C02 C9 LEAVE

      015F:78026C03 C3 RET

      015F:300D2072 83C404 ADD ESP,04

      015F:300D2075 8D4C2410 LEA ECX,[ESP+10]

      015F:300D2079 51 PUSH ECX

      015F:300D207A FF15B4841030 CALL [301084B4]

      015F:300D2080 83C404 ADD ESP,04

      015F:300D2083 8BF0 MOV ESI,EAX

      015F:300D2085 8D54243C LEA EDX,[ESP+3C]

      015F:300D2089 B909000000 MOV ECX,00000009

      015F:300D208E 8D7C2418 LEA EDI,[ESP+18]

      015F:300D2092 8D442418 LEA EAX,[ESP+18]

      015F:300D2096 52 PUSH EDX

      015F:300D2097 50 PUSH EAX

      015F:300D2098 F3A5 REPZ MOVSD

      015F:300D209A E8E1FDFFFF CALL 300D1E80

      015F:300D209F 83C408 ADD ESP,08

      015F:300D20A2 85C0 TEST EAX,EAX

      015F:300D20A4 7E19 JLE 300D20BF (JUMP )

      015F:300D20BF 8D442460 LEA EAX,[ESP+60]

      015F:300D20C3 8D4C2418 LEA ECX,[ESP+18]

      015F:300D20C7 50 PUSH EAX

      015F:300D20C8 51 PUSH ECX

      015F:300D20C9 E8B2FDFFFF CALL 300D1E80

      015F:300D20CE 83C408 ADD ESP,08

      015F:300D20D1 85C0 TEST EAX,EAX

      015F:300D20D3 7E33 JLE 300D2108 (JUMP )

      015F:300D2108 6820D91630 PUSH 3016D920

      015F:300D210D E83EFCFFFF CALL 300D1D50

      015F:300D2112 83C404 ADD ESP,04

      015F:300D2115 85C0 TEST EAX,EAX

      015F:300D2117 7410 JZ 300D2129 (JUMP )

      015F:300D2129 391D20D91630 CMP [3016D920],EBX

      015F:300D212F 0F85D6010000 JNZ 300D230B (JUMP )

      015F:300D230B 6A4C PUSH 4C

      015F:300D230D 6824D91630 PUSH 3016D924

      015F:300D2312 E8E9F9FFFF CALL 300D1D00

      015F:300D2317 8B0D20D91630 MOV ECX,[3016D920]

      015F:300D231D 83C408 ADD ESP,08

      015F:300D2320 3BC1 CMP EAX,ECX

      015F:300D2322 0F841DFEFFFF JZ 300D2145 (JUMP )

      015F:300D2145 8D542418 LEA EDX,[ESP+18]

      015F:300D2149 6848D91630 PUSH 3016D948

      015F:300D214E 52 PUSH EDX

      015F:300D214F E82CFDFFFF CALL 300D1E80

      015F:300D2154 83C408 ADD ESP,08

      015F:300D2157 85C0 TEST EAX,EAX

      015F:300D2159 7D26 JGE 300D2181 (JUMP )

      015F:300D2181 803DA480163003 CMP BYTE PTR [301680A4],03

      015F:300D2188 0F876D010000 JA 300D22FB (NO JUMP)

      015F:300D218E 8BAC24D0000000 MOV EBP,[ESP+000000D0]

      015F:300D2195 C745009F8260100 MOV DWORD PTR [EBP+00],0001869F

      015F:300D219C A0A4801630 MOV AL,[301680A4]

      015F:300D21A1 A801 TEST AL,01

      015F:300D21A3 744B JZ 300D21F0 (NO JUMP)

      015F:300D21A5 33C0 XOR EAX,EAX

      015F:300D21A7 8D4C2418 LEA ECX,[ESP+18]

      015F:300D21AB A0A5801630 MOV AL,[301680A5]

      015F:300D21B0 51 PUSH ECX

      015F:300D21B1 6824D91630 PUSH 3016D924

      015F:300D21B6 8D3440 LEA ESI,[EAX*2+EAX]

      015F:300D21B9 C1E603 SHL ESI,03

      015F:300D21BC E85FFDFFFF CALL 300D1F20

      015F:300D21C1 83C408 ADD ESP,08

      015F:300D21C4 3BC3 CMP EAX,EBX

      015F:300D21C6 0F8C2F010000 JL 300D22FB (NO JUMP)

      015F:300D21CC 3BC6 CMP EAX,ESI

      015F:300D21CE 7C0A JL 300D21DA (NO JUMP)

      015F:300D21D0 BB04000000 MOV EBX,00000004

      015F:300D21D5 E9E6000000 JMP 300D22C0 (JUMP )

      015F:300D22C0 8B4500 MOV EAX,[EBP+00]

      015F:300D22C3 33C9 XOR ECX,ECX

      015F:300D22C5 8A0DA9801630 MOV CL,[301680A9]

      015F:300D22CB 3BC1 CMP EAX,ECX

      015F:300D22CD 7F05 JG 300D22D4 (JUMP )

      015F:300D22D4 6A4C PUSH 4C

      015F:300D22D6 6824D91630 PUSH 3016D924

      015F:300D22DB E820FAFFFF CALL 300D1D00

      015F:300D22E0 83C408 ADD ESP,08

      015F:300D22E3 A320D91630 MOV [3016D920],EAX

      015F:300D22E8 6820D91630 PUSH 3016D920

      015F:300D22ED E80EFBFFFF CALL 300D1E00

      015F:300D22F2 83C404 ADD ESP,04

      015F:300D22F5 85C0 TEST EAX,EAX

      015F:300D22F7 8BC3 MOV EAX,EBX

      015F:300D22F9 7505 JNZ 300D2300 (JUMP )

      015F:300D2300 5F POP EDI

      015F:300D2301 5E POP ESI

      015F:300D2302 5D POP EBP

      015F:300D2303 5B POP EBX

      015F:300D2304 81C4BC000000 ADD ESP,000000BC

      015F:300D230A C3 RET

      015F:3000ADB6 8BF0 MOV ESI,EAX

      015F:3000ADB8 83C404 ADD ESP,04

      015F:3000ADBB 8D46FF LEA EAX,[ESI-01]

      015F:3000ADBE 83F805 CMP EAX,05

      015F:3000ADC1 773D JA 3000AE00 (NO JUMP)





      LOG FILE 2. ( Khi chương trình đã hết hạn )

      ***********

      KERNEL32!GetSystemTime

      Break due to G (ET=380.57 microseconds)

      015F:78026B8C 668B45EA MOV AX,[EBP-16]

      015F:78026B90 663B0512870378 CMP AX,[78038712]

      015F:78026B97 756B JNZ 78026C04 (JUMP )

      015F:78026C04 8D8534FFFFFF LEA EAX,[EBP-00CC]

      015F:78026C0A 50 PUSH EAX

      015F:78026C0B FF1540D10278 CALL [KERNEL32!GetTimeZoneInformation]

      015F:78026C11 83F8FF CMP EAX,-01

      015F:78026C14 7430 JZ 78026C46 (NO JUMP)

      015F:78026C16 83F802 CMP EAX,02

      015F:78026C19 7527 JNZ 78026C42 (NO JUMP)

      015F:78026C1B 66837DCE00 CMP WORD PTR [EBP-32],00

      015F:78026C20 7420 JZ 78026C42 (NO JUMP)

      015F:78026C22 837DDC00 CMP DWORD PTR [EBP-24],00

      015F:78026C26 741A JZ 78026C42 (NO JUMP)

      015F:78026C28 6A01 PUSH 01

      015F:78026C2A 58 POP EAX

      015F:78026C2B 56 PUSH ESI

      015F:78026C2C 57 PUSH EDI

      015F:78026C2D 8D75E0 LEA ESI,[EBP-20]

      015F:78026C30 BF08870378 MOV EDI,78038708

      015F:78026C35 A5 MOVSD

      015F:78026C36 A5 MOVSD

      015F:78026C37 A5 MOVSD

      015F:78026C38 A5 MOVSD

      015F:78026C39 5F POP EDI

      015F:78026C3A A300870378 MOV [78038700],EAX

      015F:78026C3F 5E POP ESI

      015F:78026C40 EB90 JMP 78026CD2 (JUMP )

      015F:78026BD2 50 PUSH EAX

      015F:78026BD3 0FB745FC MOVZX EAX,WORD PTR [EBP-04]

      015F:78026BD7 50 PUSH EAX

      015F:78026BD8 0FB745FA MOVZX EAX,WORD PTR [EBP-06]

      015F:78026BDC 50 PUSH EAX

      015F:78026BDD 0FB745F8 MOVZX EAX,WORD PTR [EBP-08]

      015F:78026BE1 50 PUSH EAX

      015F:78026BE2 0FB745F6 MOVZX EAX,WORD PTR [EBP-0A]

      015F:78026BE6 50 PUSH EAX

      015F:78026BE7 0FB745F2 MOVZX EAX,WORD PTR [EBP-0E]

      015F:78026BEB 50 PUSH EAX

      015F:78026BEC 0FB745F0 MOVZX EAX,WORD PTR [EBP-10]

      015F:78026BF0 50 PUSH EAX

      015F:78026BF1 E8EE000000 CALL 78026CE4

      015F:78026BF6 8B4D08 MOV ECX,[EBP+08]

      015F:78026BF9 83C41C ADD ESP,1C

      015F:78026BFC 85C9 TEST ECX,ECX

      015F:78026BFE 7402 JZ 78026C02 (NO JUMP)

      015F:78026C00 8901 MOV [ECX],EAX

      015F:78026C02 C9 LEAVE

      015F:78026C03 C3 RET

      015F:300D2072 83C404 ADD ESP,04

      015F:300D2075 8D4C2410 LEA ECX,[ESP+10]

      015F:300D2079 51 PUSH ECX

      015F:300D207A FF15B4841030 CALL [301084B4]

      015F:300D2080 83C404 ADD ESP,04

      015F:300D2083 8BF0 MOV ESI,EAX

      015F:300D2085 8D54243C LEA EDX,[ESP+3C]

      015F:300D2089 B909000000 MOV ECX,00000009

      015F:300D208E 8D7C2418 LEA EDI,[ESP+18]

      015F:300D2092 8D442418 LEA EAX,[ESP+18]

      015F:300D2096 52 PUSH EDX

      015F:300D2097 50 PUSH EAX

      015F:300D2098 F3A5 REPZ MOVSD

      015F:300D209A E8E1FDFFFF CALL 300D1E80

      015F:300D209F 83C408 ADD ESP,08

      015F:300D20A2 85C0 TEST EAX,EAX

      015F:300D20A4 7E19 JLE 300D20BF (JUMP )

      015F:300D20BF 8D442460 LEA EAX,[ESP+60]

      015F:300D20C3 8D4C2418 LEA ECX,[ESP+18]

      015F:300D20C7 50 PUSH EAX

      015F:300D20C8 51 PUSH ECX

      015F:300D20C9 E8B2FDFFFF CALL 300D1E80

      015F:300D20CE 83C408 ADD ESP,08

      015F:300D20D1 85C0 TEST EAX,EAX

      015F:300D20D3 7E33 JLE 300D2108 (JUMP )

      015F:300D2108 6820D91630 PUSH 3016D920

      015F:300D210D E83EFCFFFF CALL 300D1D50

      015F:300D2112 83C404 ADD ESP,04

      015F:300D2115 85C0 TEST EAX,EAX

      015F:300D2117 7410 JZ 300D2129 (JUMP )

      015F:300D2129 391D20D916230 CMP [3016D920],EBX

      015F:300D212F 0F85D6010000 JNZ 300D230B (JUMP )

      015F:300D230B 6A4C PUSH 4C

      015F:300D230D 6824D91630 PUSH 3016D924

      015F:300D2312 E8E9F9FFFF CALL 300D1D00

      015F:300D2317 8B0D20D91630 MOV ECX,[3016D920]

      015F:300D231D 83C408 ADD ESP,08

      015F:300D2320 3BC1 CMP EAX,ECX

      015F:300D2322 0F841DFEFFFF JZ 300D2145 (JUMP )

      015F:300D2145 8D542418 LEA EDX,[ESP+18]

      015F:300D2149 6848D91630 PUSH 3016D948

      015F:300D214E 52 PUSH EDX

      015F:300D214F E82CFDFFFF CALL 300D1E80

      015F:300D2154 83C408 ADD ESP,08

      015F:300D2157 85C0 TEST EAX,EAX

      015F:300D2159 7D26 JGE 300D2181 (JUMP )

      015F:300D2181 803DA480163003 CMP BYTE PTR [301680A4],03

      015F:300D2188 0F876D010000 JA 300D22FB (NO JUMP)

      015F:300D218E 8BAC24D0000000 MOV EBP,[ESP+000000D0]

      015F:300D2195 C745009F860100 MOV DWORD PTR [EBP+00],0001869F

      015F:300D219C A0A4801630 MOV AL,[301680A4]

      015F:300D21A1 A801 TEST AL,01

      015F:300D21A3 744B JZ 300D21F0 (NO JUMP)

      015F:300D21A5 33C0 XOR EAX,EAX

      015F:300D21A7 8D4C2418 LEA ECX,[ESP+18]

      015F:300D21AB A0A5801630 MOV AL,[301680A5]

      015F:300D21B0 51 PUSH ECX

      015F:300D21B1 6824D91630 PUSH 3016D924

      015F:300D21B6 8D3440 LEA 2ESI,[EAX*2+EAX]

      015F:300D21B9 C1E603 SHL ESI,03

      015F:300D21BC E85FFDFFFF CALL 300D1F20

      015F:300D21C1 83C408 ADD ESP,08

      015F:300D21C4 3BC3 CMP EAX,EBX

      015F:300D21C6 0F8C2F010000 JL 300D22FB (NO JUMP)

      015F:300D21CC 3BC6 CMP EAX,ESI

      015F:300D21CE 7C0A JL 300D21DA (JUMP )

      015F:300D21DA 2BF0 SUB ESI,EAX

      015F:300D21DC B8ABAAAA2A MOV EAX,2AAAAAAB

      015F:300D21E1 F7EE IMUL ESI

      015F:300D21E3 C1FA02 SAR EDX,02

      015F:300D21E6 8BC2 MOV EAX,EDX

      015F:300D21E8 C1E81F SHR EAX,1F

      015F:300D21EB 03D0 ADD EDX,EAX

      015F:300D21ED 895500 MOV [EBP+00],EDX

      015F:300D21F0 F605A480163002 TEST BYTE PTR [301680A4],02

      015F:300D21F7 0F84B3000000 JZ 300D22B0 (JUMP )

      015F:300D22B0 B909000000 MOV ECX,00000009

      015F:300D22B5 8D742418 LEA ESI,[ESP+18]

      015F:300D22B9 BF48D91630 MOV EDI,3016D948

      015F:300D22BE F3A5 REPZ MOVSD

      015F:300D22C0 8B4500 MOV EAX,[EBP+00]

      015F:300D22C3 33C9 XOR ECX,ECX

      015F:300D22C5 8A0DA9801630 MOV CL,[301680A9]

      015F:300D22CB 3BC1 CMP EAX,ECX

      015F:300D22CD 7F05 JG 300D22D4 (JUMP )

      015F:300D22D4 6A4C PUSH 4C

      015F:300D22D6 6824D91630 PUSH 3016D924

      015F:300D22DB E820FAFFFF CALL 300D1D00

      015F:300D22E0 83C408 ADD ESP,08

      015F:300D22E3 A320D91630 MOV [3016D920],EAX

      015F:300D22E8 6820D91630 PUSH 3016D920

      015F:300D22ED E80EFBFFFF CALL 300D1E00

      015F:300D22F2 83C404 ADD ESP,04

      015F:300D22F5 85C0 TEST EAX,EAX

      015F:300D22F7 8BC3 MOV EAX,EBX

      015F:300D22F9 7505 JNZ 300D2300 (JUMP )

      015F:300D2300 5F POP EDI

      015F:300D2301 5E POP ESI

      015F:300D2302 5D POP EBP

      015F:300D2303 5B POP EBX

      015F:300D2304 81C4BC000000 ADD ESP,000000BC

      015F:300D230A C3 RET

      015F:3000ADB6 8BF0 MOV ESI,EAX

      015F:3000ADB8 83C404 ADD ESP,04

      015F:3000ADBB 8D46FF LEA EAX,[ESI-01]

      015F:3000ADBE 83F805 CMP EAX,05

      015F:3000ADC1 773D JA 3000AE00 (JUMP )



      ************************************



      Bước 9: Tìm điểm khác biệt đầu tiên của 2 file log :



      Bạn có thể nhân thấy rằng 2 file log tương đồng cho đến vị trí : 015F:3000ADC1. Ở file log1 câu lện jump không được thực thi , nhưng ở log2 thì lại khác đơn giản là vì giá trị của EAX tại 2 thời điểm là khác nhau

      Hãy nhìn vào 3 dòng lệnh này :

      LEA EAX,[ESI-01] ->Cái ra lệnh để tìm ESI-01 và đặt giá trị cho EAX.

      CMP EAX,05 So sánh EAX với thông số 5.

      JA 3000AE00 Nhảy đến 300AE00 và thóat.



      ************************************



      Bước 10 : Định hướng



      Bây giờ thì làm cái quái gì nhỉ , Đơn giản là thay đổi đoạn code để cho lệnh JA không có được thực hiện được . Cũng có khá nhiều cách để thực hiện điều này:

      Cách nông dân nhất là dùng nop (90) -- > 015F:3000ADC1 77 3D JA 3000AE00 ta đổi thành 90 90 .

      Một cách đúng đắn hơn là thay đổi chương trinh` bằng cách thay 'LEA EAX,[ESI-01]' 3 byte; 'CMP EAX,05' - 3 byte; 'JA' -2 byte; (Tổng cộng có 8 byte trong 3 câu lệnh asm) bằng câu lệnh MOV EAX,00000005 ( 5 byte ) và 3 byte 'NOP' ( Tổng cộng cũng 8 byte ) --> điều này đảm bảo rằng giá trị của EAX đúng và làm cho cấu trúc của chương trình không bị thay đổi .



      ************************************



      Bước 11: Patch chương trình



      Tất cả những việc còn lại là dùng hex editor load chương trình ban cần crack , tìm đến đúng offset của nó và thay mã . ví dụ :

      Thay thế '8D46FF83F805773D' bằng 'B805000000909090'.

      B805000000 = MOV EAX,05

      90 = NOP

      Chúc bạn may mắn.
      Nguồn:jackervn hvaonline