16/02/2012

hướng dẫn crack phần mềm-chi tiết, cụ thể (coppy từ HVA Oline)p6

Phần V 

Chào các bạn, đáng lẽ hôm nay tôi sẽ hướng dẫn các bạn khái niệm về keygen nhưng vì chắc các bạn cũng cũng chưa rành cách crack lắm nên tôi sẽ tiếp tục hướng dẫn các bạn cách crack một số phần mềm để cho quen dần…sau đó mớI tiếp tục nâng cao trình độ là viết keygen…------------------- 

Như thường lệ chúng ta sẽ đi qua phần lý thuyết một chút. Bài viết này sẽ hướng dẫn các bạn một chút về các câu lệnh asm đơn giản 

Chú ý : Trong bài viết này, phần lý thuyết tôi có tham khảo bài viết của một fan vicki 
--------------------- 
I. Lý Thuyết 

Tính offset của lệnh JMP, JX, JNX & CALL 


I. Lý thuyết 

1. Giới thiệu 

Xin chào các bạn! Trong bài viết này tôi muốn giải thích với các bạn cách tính toán offset của các câu lệnh JUMPS và CALL. Bạn sẽ thường xuyên tính toán offset của các câu lệnh này trong reverse. Đặc biệt, hiểu được cách tính cũng giúp bạn tiếp cận với kĩ thuật làm mù điểm vào host trong virus (EPO - EntryPoint Obscrured) một cách dễ hơn! 

2. Các loại câu lệnh JUMPS & CALL 

Ở đây tôi chỉ mô tả sự khác biệt của các câu lệnh JUMPS & CALL mà bạn thường gặp! 

a) Short Jumps: nhảy ngắn có hoặc không có điều kiện đều là 2 byte. Bạn chỉ có thể nhảy tới 127 byte hoặc nhảy lùi 128 byte với các short jumps 

b) Long Jumps: nhảy dài, 6 byte cho có điều kiện hoặc 5 byte cho không điều kiện 

c) Calls: 5 byte ở dạng short 

* Đây là bảng mã máy mô tả sự khác biệt giữa các loại JUMPS & CALLS 

Jump Description Short Op-Code Long Op-Code 
call procedure call E8xxxxxxxx N/A 
jmp unconditional jump EBxx E9xxxxxxxx 
ja/jnbe jump if above 77xx 0F87xxxxxxxx 
jae/jnb/jnc jump if above or equal 73xx 0F83xxxxxxxx 
jb/jc/jnae jump if below 72xx 0F82xxxxxxxx 
jbe/jna jump if below or equal 76xx 0F86xxxxxxxx 
jcxz/jecxz jump if cx/ecx equals zero E3xx N/A 
je/jz jump if equal/zero 74xx 0F84xxxxxxxx 
jne/jnz jump if not equal/zero 75xx 0F85xxxxxxxx 
jg/jnle jump if greater 7Fxx 0F8Fxxxxxxxx 
jge/jnl jump if greater or equal 7Dxx 0F8Dxxxxxxxx 
jl/jnge jump if less 7Cxx 0F8Cxxxxxxxx 
jle/jng jump if less or equal 7Exx 0F8Exxxxxxxx 
jno jump if not overflow 71xx 0F81xxxxxxxx 
jnp/jpo jump if no parity/parity odd 7Bxx 0F8Bxxxxxxxx 
jns jump if not signed 79xx 0F89xxxxxxxx 
jo jump if overflow 70xx 0F80xxxxxxxx 
jp/jpe jump if parity/parity even 7Axx 0F8Axxxxxxxx 
js jump if sign 78xx 0F88xxxxxxxx 

Vấn đề của chúng ta là cần tính các số xx và xxxxxxxx trong mã máy 

3. Tính toán offset 

* Công thức: OFFSET = địa chỉ của nơi đến - (địa chỉ nơi jumps/calls + kíck thước của câu lệnh jumps/calls) 

* Ví dụ: 

a) Bạn đang ở tại địa chỉ 40108E. Bạn cần đặt một lệnh nhảy đến địa chỉ 4020D0 tại địa chỉ này 

:40108E JMP 4020D0 

Offset = 4020D0 - [40108E + 5(E9xxxxxxxx có kích thước 5 byte)] = 103D. Mã máy sẽ là E93D100000, trong đó E9 là mã máy của JMP và 3D100000 là số xxxxxxxx mà bạn vừa tính được (0000103D viết ngược lại sẽ là 3D100000) 

b) Bạn cần đặt một lệnh CALL đến địa chỉ 401184 tại địa chỉ 40218B 

:40218B CALL 401184 

Offset = 401184 - [40218B + 5(E8xxxxxxxx có kích thước 5 byte)] = FFFFEFF4. Mã máy sẽ là E8F4EFFFFF, trong đó E8 là mã máy của CALL và F4EFFFFF là số xxxxxxxx mà bạn vừa tính được (FFFFEFF4 viết ngược lại sẽ là F4EFFFFF) 

II. Thực hành 

Bạn đã dùng Notepad! Mỗi lần mở file có kích thước vượt quá 64KB, Notepad sẽ hiển thi một hộp thông báo "Lỗi: File có kích thước quá lớn. Bạn có muốn dùng WordPad để đọc file này không?" - Yes | No . Nhiệm vụ của chúng ta là patch file notepad.exe để mỗi khi mở file có kích thước lớn hơn 64KB nó sẽ không hiển thị hộp thông báo trên nữa và tự động mở file bằng WordPad cho bạn. Trước khi bắt đầu mọi việc, bạn hãy sao lưu file notepad.exe trước đề phòng sự cố! Thật ra thì cũng không cần thiết bởi bạn có thể dùng SFC(System File Checker) của Windows để restore lại file notepad.exe bất cứ lúc nào. Trong ví dụ này tôi dùng bản Notepad của Windows98SE. 

1/ Chạy W32Dasm. Sau khi dism file xong, bạn vào menu Ref/String Data References, tìm dòng String Resource ID=00056: "wordpad.exe" và double click lên nó. Để xem chúng ta có gì nào?! 

* Possible Reference to String Resource ID=00036: "&f" 

:004033A5 6A24 push 00000024 ; rất quan trọng 
:004033A7 A1B4504000 mov eax, dword ptr [004050B4] 
:004033AC 56 push esi 
:004033AD 50 push eax 
:004033AE FF7508 push [ebp+08] 

* Reference To: USER32.MessageBoxA, Ord:01ACh 

:004033B1 FF15A8644000 Call dword ptr [004064A8] ; hiện messagebox 
:004033B7 83F806 cmp eax, 00000006 ; đã chọn YES hay NO? (IDYES=6) 
:004033BA 0F85A7000000 jne 00403467 ; NO -> thoát 
:004033C0 6804010000 push 00000104 ; YES -> mở file bằng WordPad 
:004033C5 8D858CFDFFFF lea eax, dword ptr [ebp+FFFFFD8C] 
:004033CB 837D1001 cmp dword ptr [ebp+10], 00000001 
:004033CF 1BFF sbb edi, edi 
:004033D1 50 push eax 
:004033D2 83C737 add edi, 00000037 

* Possible Reference to String Resource ID=00056: "wordpad.exe" 

:004033D5 6A38 push 00000038 
:004033D7 FF3540554000 push dword ptr [00405540] 
Chúng ta chỉ cần thay PUSH 00000024 tại địa chỉ 4033A5 thành lệnh nhảy ngắn đến địa chỉ 4033C5. Mã máy của short jump là EBxx. May mắn là kích thước của short jump này là 2 byte, đúng bằng kích thước của câu lệnh PUSH 00000024 tại địa chỉ 4033A5 (6A24)! Áp dụng công thức tính offset ở trên, xx = 4033C0(địa chỉ đến) - [4033C5(địa chỉ jump) + 2 (kích thước của short jump EBxx)] = 19. Okay, mã máy sẽ là EB19! 

6A24 PUSH 00000024 
EB19 JMP 004033C0 

2/ Chạy Hiew và mở file notepad.exe. Nhấn F4, F5 và nhập vào ".4033A5". Nhấn F3 và thay đổi 6A24 thành EB19, sau đó bấm F9 và F10. Xong, thử chạy lại Notepad và mở một file có kíck thước lớn hơn 64KB xem sao! 

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

II. Thực hành 

Vì phần lý thuyết có lẽ khá phức tạp đốI vớI các bạn newbie, nên trong phần thực hành chúng ta sẽ giảI trí vớI phần một phần mềm khá nổI tiếng của hãng EURONET đó là phần mềm Hanami…Một phần mềm trang trí cho desktop…Nó làm một cây anh đào ngay trên desktop, sao đó những cách hoa đào sẽ rơi nhè nhẹ xuống thanh taskbar…Lâu lâu lạI có một cơn gió thổI qua làm nhưng cánh hoa đào cuốn theo chiều gió bay thật đẹp… 

Đẹp thì có đẹp đó…Nhưng “thằng Hanami” này bắt bạn phảI đăng ký…Nếu bạn không đăng ký thì mỗI lần bạn chạy chương trình nó sẽ đập vào mặt bạn một cái nag “ Not registered…hanami is shareware….” thật bực mình…Dĩ nhiên là bạn không muốn cái nag đó hiện ra chứ gì…Đúng vậy…Nhu cầu bức thiết là chúng ta phảI crack nó…Ok Sau khi tảI về (từ site euronet), bạn cài đặt, copy một bản hanami.exe ra dự phòng, rủI làm bậy còn có cái mà backup lại…Okie chúng ta bắt đấu crack nó. 

Phần mềm : Hanami http://www.euronet.nl/~rja/Hanami/ 
Công cụ : Windasm, Hiew 
Cracker : hacnho 

Đầu tiên bạn chạy hanami, một cái nag “ Not registered…hanami is shareware….” Văng ra, bạn hãy nhớ dòng “…shareware”, click ok…Sau đó bạn vào bạn click vào nút lệnh (command button) “ Register…”, một cái nag khác văng ra bắt bạn nhập vào “ your name”, “keyword”, “Registration Code” 

…He he bạn đừng tưởng bở là “ cái “ keyword” không có tác dụng nhe…Tuy phần mềm rất nhỏ nhưng tác giả lạI đặt một cơ chế tạo key phức tạp nhiêu khê…Nếu dùng SoftIce để tìm số code thì hơi lâu…Nên tôi dùng phương pháp đơn giản là patch nó 

hãy nhập vào tên, keyword và Registration Code. Ở đây tôi nhập vào 

Your name : hacnho 
Keyword :123456 
Registration Code: abcdef 

Enter, oh la la một nag văng ra “ Error…The registration code entered is incorect”…Ok hãy nhớ lấy nó, bạn hãy thoát hanami. 

Bây giờ chúng ta mở WDASM lên, chọn file Hanami.exe…chờ WDASM disassembly xong bạn vào menu Refs, chọn String Data References, kiếm cho ra dòng “The registration code entered”, double click vào nó hai lần…Bạn trở lạI màn hình của nhìn xem chúng ta đang ở đâu…bạn sẽ thấy như thế này: 

* Possible String Ref from Data Obj -->"The registration code entered" 
-->"is incorect" 

:0040886C 68E8424100 push 004142E8 
:00408871 8B4D08 mov ecx, dword ptr [ebp+08] 
:00408874 51 push ecx 

* Refenrence To: USER32.MessageBoxA, Ord :01BEh 


:00408875 FF1534124100 Call dword ptr [00411234] 
:0040887B EB5A jmp 004088D7 


Bây giờ bạn thấy vệt sáng đang ở tại 
:0040886C 68E8424100 push 004142E8 
hãy dịch chuyển vệt sáng lên trên vài dòng bạn sẽ thấy như sau 

*. Possible String Data Ref from Data Obj --> " " 
:0040884F 68B0384100 push 004142E0 
:00408854 E827140000 call 00409C80 
:00408859 83C408 add esp, 00000008 
:0040885C E828FEFFFF call 0040869 --> gọi thông báo đăng ký 
:00408861 85C0 test eax, eax -->kiểm tra số code 
:00408863 7518 jne 0040887D--> nhảy nếu sai (chổ cần crack, nhớ lấy) 
:00408865 6A00 push 0000000 

đưa vệt sáng đến dòng :00408863 7518 jne 0040887D, nhìn xuống thanh task bar thấy offset là : 00008863 (1) 

Trở lại bảng menu Refs, chọn String Data References, bạn tìm dòng " Hanami is a shareware program", double click...Chúng ta lại ra ngoài, Bạn sẽ thấy như sau 


* Possible String Ref from Data Obj -->" Hanami is a shareware program" 
:004014DE 68583F4100 push 00412F58 -->bạn đang ở đây 
:004014E3 A1CC584100 mov eax, đwor ptr [004158CC] 
:004014E8 50 push eax 


* Refenrence To: USER32.MessageBoxA, Ord :01BEh 

:004014E9 FF1534124100 call dword ptr [004011234] 


hãy dịch chuyển lên và dòng, bạn thấy 

*. Referenced by a (U)nconditional or ©onditional Jump at Address: 
|:004014B4© 

:004014CE 833DF053410000 cmp dword ptr [0040153F0], 00000000 
:0040014D5 7518 jne 004014EF --> nhảy nag "Not Registered Yet", cần crack 
:004014D7 6A00 push 00000000 

*.* Possible String Ref from Data Obj -->"Not Registered Yet" 
:004014D9 push 00413F44 

bạn hãy di chuyển vệt sáng đến dòng :0040014D5 7518 jne 004014EF, nhìn xuống task bar, thấy offset là 000014D5 (2) 

***từ (1) và (2) ta có hai địa chỉ offset là 00008863 , và 000014D5, do jne nghĩa là nhảy nếu không bằng, từ là bạn nhập sai thì sẽ nhảy tới thông báo sai, do đó ta cần crack ở chổ đổi cho nó dù nhập sai thì sẽ không nhảy...vậy thì ta chỉ cần đổi jne thành je ( 75 thành 74) 

Ok bây giờ bạn hãy ghi lại hai offset trên, mở Hiew, mở file hanami.exe lên 

Gõ F5, nhập 00008863, gõ F3, sửa 75 thành 74, gõ F9 
Gõ F5, nhập 000014D5, gõ F3, sửa 75 thành 74, gõ F9, gõ F10 

Okie bây giờ bạn ở Hanami lại xem, bạn sẽ thích ngay mà ha ha ha 
----------------- 
bài viết của hacnho (vui lòng để lại dòng này khi bạn trích dẫn--thanx a lot) 
------------------- 

trong phần 6 tôi sẽ hướng dẫn các bạn dùng các công cụ crack engine như file patcher 2002, và đặc biết là crack engine của anh Lê Vũ Hoàng, 
**************************************: 
Phần VI 

Chào các bạn hôm nay tôi sẽ hướng dẫn các bạn khái niệm về sử dụng các công cụ dùng để patch. Cụ thể là ba công cụ File Patcher 4.0 của Moose's Shareware & Emulation Valley và hai công cụ Crack engine và Patch Generator của Lê Vũ Hoàng Những khái niệm này có lẽ rất sơ sài nhưng các bạn hãy xem qua rồI từ đó khám phá ra nhiều loạI khác … 

Chú ý: trong bài viết này tôi có tham khảo bài viết của anh Lê Vũ Hoàng trong phần hướng dẫn PG và CE—thanx for support 
Đầu tiên chúng ta phảI crack một phầm mềm cái đã…Tôi chọn soft xấu số để trảm thủ hôm nay là Winrar 3.10 (hiện giờ đã có ver 3.20 cũng crack tương tự)… 

Phần mềm :Winrar 3.10 
Công cụ :WDASM 893, HIEWS 602 
Cracker :hacnho 

Hẳn trong các bạn ai dùng qua máy tính đều biết Winrar…một tiện ích nén vào bung nén hỗ trợ nhiều dạng file…Nhưng nó không cho xài miễn phí. Sau khi setup bạn mở Winrar ra, đầu tiên bạn thấy trên dòng Title của Winrar có chữ "evaluation copy", nhớ lấy nó…Chỉnh đồng hồ hệ thống bạn qua vài ngày, bạn sẽ thấy dòng chữ "only %d days left to buy a license", vào menu help vào about bạn thấy dòng chữ “40 day trial copy”…Tiếp tục chỉnh đồng hồ hệ thống sang 2 tháng tiếp theo, mở lạI winrar, bạn sẽ bị một cái nag “yêu cầu đăng ký” đập vào mặt… 
Ok hãy nhớ lấy những điều trên…Như thường lệ chúng ta vào menu Help kiếm dòng Enter Registration Code…Oh la la không có dòng đó…Chẳng lẽ chúng ta đành chịu chết hay sao…Không đâu cứ bình tĩnh mà run 

- chạy W32Dasm, mở file WinRAR.exe 
- vào menu Refs/String Data References, tìm dòng "evaluation copy" và double click lên nó. Di chuyển con trỏ lên một đoạn bạn sẽ thấy đoạn lệnh sau: 



... 
:00445B3C 757A jne 00445BB8 (dòng này rất quan trọng) <-- bạn đang ở đây 
:00445B3E A17C874A00 mov eax, dword ptr [004A877C] 
:00445B43 83F814 cmp eax, 00000014 
:00445B46 7C05 jl 00445D4B 
:00445B48 83F828 cmp eax, 00000028 
:00445B4B 7C1D jl 00445B6A 
… 

Dòng ":00445B3C 757A jne 00445BB8 " sẽ kiểm tra WinRAR đã được đăng kí hay chưa. Nếu chưa đăng kí nó sẽ thay đổi caption thành dòng "evaluation copy"(bản dùng thử) trong phạm vi 40 ngày, ngược lại nó sẽ đổi caption thành dòng "only 'xyz' days left to buy a license"(đã quá hạn dùng thử 'xyz' ngày) nếu bạn đã xài quá 40 ngày. ở đây, chúng ta chỉ cần thay dổi jne 00445BB8 thành je 00445BB8 là WinRAR sẽ jump over 'thay đổi caption' 

- bạn vẫn đang đứng tại dòng ":00445B3C 757A jne 00445BB8 ", hãy để ý đến thanh trạng thái ở 
phía dưới: 

Line:125681 Pg 1429 of 3117 Code Data @:00445B3C @Offset 0004513Ch in File WinRAR.exe 

0004513Ch chính là file offset, còn 00445B3C chỉ là địa chỉ ảo - Virtual 
Address(VA=Imagebase+RVA). Hãy ghi nhớ con số này. 

----Ok bây giờ chúng ta tiếp tục xử lý đến cái nag bắt đăng ký ấy 

-Vào menu Refs/String Data References, tìm dòng "REMINDER" và nhắp đôi lên nó (nhớ chỉ double một lần thôi nhe, vì nó có hai đoạn code tương ứng. Di chuyển con trỏ lên một đoạn bạn sẽ thấy đoạn lệnh sau: 

... 

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

:0043BAE2 833D487E4A0000 cmp dword ptr [004A7A48], 000000000 
:0043BAE9 754D jne 0043BB38 (dòng này rất quan trọng) <- bạn đang ở đây 
:0043BAEB 803D98F1480000 cmp dword ptr [0048F198],00 
:0043BAF2 7544 jne 0043BB38 
... 

Dòng ":0043BAE9 754D jne 0043BB38 " sẽ kiểm tra WinRAR đã được đăng kí hay chưa. Nếu chưa đăng kí nó sẽ pop một nagscreen yêu cầu bạn đăng kí, sau đó sẽ nhảy đến lệnh tiếp theo tại địa chỉ 0043BB38. ở đây, chúng ta chỉ cần thay dổi jne 0043BB38 thành jne 0043BB38 là xong! 

- bạn vẫn đang đứng tại dòng ":0043BAE9 754D jne 0043BB38 ", hãy để ý đến thanh trạng thái ở phía dưới: 

Line:170442 Pg 1221 and 1222 of 3117 Code Data @:0043BAE9 @Offset 0003B0E9h in File WinRAR.exe 

0003B0E9h chính là file offset của câu lệnh jne 0043BB38. Hãy ghi nhớ con số này. 

Ok, còn một vấn đề nữa đó là chúng ta khi vào Help, about trong winrar thì thấy dòng 40 day trial copy, rất đáng ghét…Ok hãy vào 
- vào menu Refs/String Data References, tìm dòng "Registered to" và double click 1 lầm duy nhất lên nó. Di chuyển con trỏ lên một đoạn bạn sẽ thấy đoạn lệnh sau: 

*.Referenced to :User32.SetDlgItemtextA, Ord: 0000h 
:0043EBF1 E818BD0400 Call 0048A90E 
:0043EBF6 803DC0C71490000 cmp dword ptr [0049710C], 00 
:0043EBFD 7449 je 0043EC48 (dòng này rất quan 
trọng) <-- bạn đang ở đây 
:0043EBFF BE086B4900 mov esi, 00496B08 
--- 

Nhìn xuống task bar thấy dòng chữ sau chữ @offset là 0003E1FD, ok hãy nhớ nó 

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

Trước khi crack tôi có một đề nghị bạn hãy sao lưu một bản winrar để dành để chúng ta bước qua phần 2 
---------------------------- 

Ok bây giờ chúng ta mở HIEWS602 ra, các bạn mở file Winrar.exe, 
gõ F5, gõ 0004513C, nhấn F3, sửa 75 thành 74 
gõ F5, gõ 0003B0E9, nhấn F3, sửa 75 thành 74 
gõ F5, gõ 0003E1FD, nhấn F3, sửa 74 thành 75 

sau đó gõ F9, F10…Bây giờ bạn hãy chạy Winrar xem, bạn sẽ thích ngay mà ha ha ha…Nếu không thích dòng registered to bạn có thể dùng Reshack sửa lạI thành crack by hacnho© 2003 
-------------------------------- 

Ok bây giờ chúng ta qua phần 2 

Hướng dẫn sử dụng File Patcher 4.0 (lên google search) 


File Patcher 4.0 là một công cụ patch trực tiếp không cần dùng đến HIEWS…các dùng rất dễ…Crack phần mềm cần crack, sau đó tìm ra offset để đổI bytes…Để cho các bạn dễ hiểu chúng ta lấy Winrar ở trên làm thí dụ…Chúng ta tìm được 3 offset cần đổI bytes…Như vậy chúng ta cần đổI 3 bytes 

1.0004513C từ 75 thành 74 
2.0003B0E9 từ 75 thành 74 
3.0003E1FD từ 74 thành 75 


Ok các bạn hãy mở notepad lên, sau đó gõ vào 

Offset= $0003B0E9: From $75 To $74 
Offset= $0004513C: From $75 To $74 
Offset= $0003E1FD: From $74 To $75 

Sau đó save lạI vớI nộI dung: crack.txt 

Mở file patcher4.0 lên 

Trong dòng 

-File to be patched : tìm file cần crack 
-File after patching : save vào file nào (nên đặt là crack.exe) 
-patch data file: tìm đến file crack.txt vừa lưu 

Xong click process/apply patches 

Quá đơn giản phảI không các bạn 

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

0 nhận xét:

Đăng nhận xét

Related Posts Plugin for WordPress, Blogger...
 
Copyright © 2010-2012 CON CUA BIEN. All rights reserved.