Hế lô, tui làm quen với arm từ khi còn chập chững bước vào đường MUPing. Các lão
mới bắt đầu yêu cái nghiệp dĩ chua cay này chắc chưa bít và chưa từng đá bàn phím
như tui hồi trước, tại sao, vì nó chua quá, cay quá. Tui từng nói tui sợ thằng SI
nhưng thằng làm tui hãi hùng nhất là thằng arm, bà già vợ tui mà đá lông nheo tui,
tui cũng chưa sợ bằng lúc điền hết IAT, fix Dump mà bỗng thằng ImpREC nó báo
“Cannot add any sections”. Thú thật, tui đã unpack được nhiều soft pack bằng arm
nhưng chưa bao giờ dám đặt bút xuống viết cái gọi là tut unpack. Tui nói thật, cái
hãng làm ra arm nó bị điên. Ai đời mỗi một ver nó có hơn một chục tùy chọn protect
tổ hợp lên khoảng 30 cách protect. Làm chưa được nhiêu nó lại ra ver mới. Mỗi lần
lên trang chủ của nó tui bịt mắt lại dek dám xem. Hì hục mãi với v4.05, khóai quá
sáng lên mạng nó ra ver 4.10. Mỗi ver nó đều add thêm kiểu protect mới mà nó còn
tuyệt đường con người ta. Bên SecurityTeam có công bố một bug của OllyDBG. Các
lão tin không, tui lười nhất là đọc thông tin về bảo mật, nên cả một buổi tui load
target lên Olly Shift+F9 là nó crash. Tui chỉnh Options cỡ nào cũng thế. Các ver sau
này đều áp dùng bug (OutputDebugStringA API, arm dùng hàm này để send string
trên Olly dựa vào lỗi tràn bộ nhớ đệm, hè hè, thế là crash) này để làm một cách antidebug
cho arm.
19 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2236 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Armadillo – Góp nhặt cát đá, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Armadillo x.xx – Góp nhặt cát đá
Hế lô, tui làm quen với arm từ khi còn chập chững bước vào đường MUPing. Các lão
mới bắt đầu yêu cái nghiệp dĩ chua cay này chắc chưa bít và chưa từng đá bàn phím
như tui hồi trước, tại sao, vì nó chua quá, cay quá. Tui từng nói tui sợ thằng SI
nhưng thằng làm tui hãi hùng nhất là thằng arm, bà già vợ tui mà đá lông nheo tui,
tui cũng chưa sợ bằng lúc điền hết IAT, fix Dump mà bỗng thằng ImpREC nó báo
“Cannot add any sections”. Thú thật, tui đã unpack được nhiều soft pack bằng arm
nhưng chưa bao giờ dám đặt bút xuống viết cái gọi là tut unpack. Tui nói thật, cái
hãng làm ra arm nó bị điên. Ai đời mỗi một ver nó có hơn một chục tùy chọn protect
tổ hợp lên khoảng 30 cách protect. Làm chưa được nhiêu nó lại ra ver mới. Mỗi lần
lên trang chủ của nó tui bịt mắt lại dek dám xem. Hì hục mãi với v4.05, khóai quá
sáng lên mạng nó ra ver 4.10. Mỗi ver nó đều add thêm kiểu protect mới mà nó còn
tuyệt đường con người ta. Bên SecurityTeam có công bố một bug của OllyDBG. Các
lão tin không, tui lười nhất là đọc thông tin về bảo mật, nên cả một buổi tui load
target lên Olly Shift+F9 là nó crash. Tui chỉnh Options cỡ nào cũng thế. Các ver sau
này đều áp dùng bug (OutputDebugStringA API, arm dùng hàm này để send string
trên Olly dựa vào lỗi tràn bộ nhớ đệm, hè hè, thế là crash) này để làm một cách anti-
debug cho arm. Xem thêm ở
Hiện nay trên NET có khoảng 100 tuts viết cho arm, đủ trò đủ kiểu, nhưng tất cả đều
có nguồn gốc từ Cracks Latinos. Từ đó rất nhiều tuts được cover lại. Đứng đầu là
mem của ku Fly bên Tàu, sau đó là Exetools, Woodman, BoadAnticrack,
UnpackingGOD, BIW, RET, ICU, ARTEAM, RES kế đến là SND và cuối cùng tSRH,
thằng tsrh là hiểm nhất không bao giờ viết tuts chỉ unpack và release. Hiện
AVATAR/{RES} là nhóm đang nổi lên chuyên trị arm, hãng SoftwarePassport vừa
release ver nào là nó release cái patch inline liền. Good boy! Việt Nam mình cũng có
vài ba lão viết tut unpack arm điển hình là lão tlandn viết cái tut unpack crackme của
VCT, lão Còm trans cái tut của nhóm Cracks Latinos, tui với lão hhphong viết tut đưa
nhau xem :d. Hôm nay tui quyết định nghe lời con bé hoadongnoi ngồi cover hết các
tut hay để tổng hợp lại một tut cơ bản từ dễ đến khó cho các lão tiện tra cứu. Tất cả
những tuts này tui đã viết lại theo cách nhìn của tui, có nghĩa là nhiều khi khác với
org tut nhưng đọc dô hiểu liền, mấy thằng kia nó viết mà dấu diếm, đọc dek hiểu bi
nhiêu. Khi đặt tay lên viết, tui cũng chả biết bao giờ mới xong nữa. Mỗi một target
tui mất khỏang 30’ để unpack+chụp hình+ suy nghĩ nên chả bít bao giờ cho đến…
bao giờ!!!
Trong tay tui có hầm bà lằng khỏang 50 tuts nên cũng có thể nói ver arm nào tui
chơi cũng được ;;). Một điều trước khi bắt tay vào Unpack arm là bạn phải kiên nhẫn
và hết sức nhịn nhục, nếu làm không được thì dọn những gì quý giá ra khỏi chỗ đang
ngồi không thôi bạn điên lên đá cho nó một cái. Nên nhớ một điều unpack chỉ là đam
mê không phải là điểm cuối cùng của cracking. Nếu unpack không được thì thôi đừng
có cố. Như tui đây, không unpack soft được tui liền đi unpack bà xã tui :D.
Để đọc rõ tut, yêu cầu chọn Hide White Space trong WinWord.
I. Công cụ dùng trong tut này tui dùng chỉ đơn giản có mấy cái thôi:
-OllyDBG + patch AntiDetectOlly_v2.2.4.exe + 2 cách patch kiểu anti debug tui
vừa nói ở trên. Cách patch kèm theo:
a.Cách 1:
_Load target lên OllyDBG. R-click chọn Search for->Names in all modules.
_Cuộn màn hình xuống dưới tìm hàm OutputDebugStringA.
_Double click vào hàm này bạn sẽ về CPU window, bạn sẽ ở tại địa chỉ:
77E949B7 > 68 2C020000 PUSH 22C
_Armadillo sẽ gọi hàm này, ta phải patch, Assemble dòng này từ PUSH
22C thành RETN 4. Done, xem hình minh họa kèm theo:
b.Cách 2:
_Bước 1,2,3 làm như trên
_Bước 4 thay vì patch PUSH 22C thành RETN4 ta làm như sau:
_Xác định địa chỉ của hàm kernel32.OutputDebugStringA bằng APIAddress.
_Go đến địa chỉ vừa tìm được, cuộn màn hình xuống tìm đến lệnh kết thúc
của hàm này có dạng:
77E949BA 33C0 XOR EAX,EAX
77E949BC 40 INC EAX
77E949BD C3 RETN ;
_Binary copy 3 dòng này. Đến đầu hàm, dán 4 bytes này vào Push 22C.
-ImpREC 1.6 Final
-APIAddress 1.0
- RE-Pair v0.6
-Some target (unpackme và soft).
II. Let’s Unpacking.
Nói trước một điều, trong các tuts sau đây tui sẽ không nói đến vấn đề anti-
antidebug nữa. Các lão biết bổn phận từ mình patch kernel mỗi khi load target.
Theo trình tự, tui sẽ viết các tut dễ trước, các tuts khó viết sau. Các tuts viết tui
đã unpack sucessful, yên tâm, chỉ có các lão unpack sai chứ thằng tui không viết
sai.
Tut#1: Armadillo 4.01a (Public Build-Trial Editon)
OPTIONS: Standard Protection, Enable import elimination, Enable
strategic code splicing,enable memory patching protections.
_Load target lên OllyDBG:
_Chọn options trong OllyDBG:
_Sau khi patch kernel, nhấn Shift+F9 29 lần tới đây (30 lần sẽ nhảy tới dll hệ
thống, 31 run hoàn tòan, bản trial có thông báo thì nhấn OK để bỏ qua, bản
regged thì cũng tương tự):
_Nhấn Alt+M để vào mem map, chọn section CODE đặt mem brkp access:
_Shift+F9: Tới OEP:
_Dump hẻ, thôi thôi, đừng vội. Xem thử cái đã. Alt+M, remove mem breakpoint
và xem:
_Sao kỳ dậy cà, hồi nào mới set mem brkpoint em còn thấy cái chữ PE Header
mừ. Thoai, thêm chữ đó vào chứ sao bi giờ. Hix, tìm hiểu quá trình protect của
Dillo cái, em này đâu có làm gì đâu, em chỉ destroy tòan bộ table header của PE
sau khi dump hòan tòan :D. OK, mở một OllyDBG khác, load target tut1.exe lên,
nhấn Alt+M, double click vào dòng:
Memory map, item 28
Address=00400000
Size=00001000 (4096.)
Owner=tut1 00400000 (itself)
Section=
Contains=PE header
Type=Imag 01001002
Access=R
Initial access=RWE
_Drag chuột từ đầu đến cuối (400000…400FFF), chọn Binary Copy:
_Trở lại OllyDBG ban đầu. Cũng double vào địa chỉ 400000 và drag chuột định
khối 400000…400FFF, chọn Binary paste:
_Bây giờ dump thôi, chọn OllyDump:
_Bi giờ Fix IAT:
_Có 5 chỗ invalid. Đừng có Cuts Thunks bậy bạ à nhe!
+00003078
+00003088
+00003094
+00003098
+0000309C
_Trở lại OllyDBG, cuộn màn hình lên trên cùng gõ, Ctrl+B, nhập vào FF25:
_Ta bắt đầu từ JMP NEAR DWORD PTR DS:[403078] (403078-400000=3078).
R-click, chọn:
_Ta để ý giá trị của EIP 00401280 tut1.00401280:
_Nhấn F7. Ta tới đây:
_Nhận thấy từ khởi đầu hàm đến kết thúc hàm, không có hàm nào khác. Vậy
hàm cần tìm là 00003078 user32.dll 009F DialogBoxParamA.
_Trở lại địa chỉ 401280, tìm hàm thứ hai làm tương tự như trên ta tới đây:
00401298 - FF25 88304000 JMP NEAR DWORD PTR DS:[403088]
_Phew, không thấy gì cả, đừng nản, bạn nhấn F8 vài lần, cho đến dòng:
00CC8D12 83C2 64 ADD EDX, 64
00CC8D15 B9 05000000 MOV ECX, 5
_Dòm bên cửa sổ Register thấy thành EDX có cái gì là lạ:
_Yeah, đây là địa chỉ của hàm MessageBoxA. Có lẽ bạn hỏi, trên nó có hàm
GetTickCount sao tui không chọn, hè hè, kô nói cao siêu gì, tui chọn thử rồi, crash
when run.
_Tiếp tục tới 00003094, bó tay tìm kô có, có thể Cut Thunk.
_Tiếp tới 00003098, làm tương tự, ta tìm được nó nằm ở:
004012AA - FF25 98304000 JMP NEAR DWORD PTR DS:[403098]
_Set new origin, F7 tới đọan code sau:
_Y chang cái trên, nhấn F8 trace dần dần:
00CC8C99 83C2 64 ADD EDX, 64
00CC8C9C B9 05000000 MOV ECX, 5
00CC8CA1 803A CC CMP BYTE PTR DS:[EDX], 0CC
_Tương tự tìm được hàm: GetModuleHandleA
_Bây giờ còn hàm cuối, dòm trong IAT tui thấy thiều hàm exit, nếu tự tin thì phăng
ngay cái hàm này. Còn không thì tìm:
004012B0 - FF25 9C304000 JMP NEAR DWORD PTR DS:[40309C]
_Trace qua vài dòng code ta tìm được hàm:
_Fix dump, all worked. Unpack Sucessful.
Tut#2: Armadillo 4.05 - Registry Mechanic 5.0.0.142
Standard Protection
Hôm bữa tui post một bài trên REA chỉ cách unpack bằng tools và bằng tay. Có một
bác PM bảo tôi thử unpack bằng tay xem. OK, hôm nay ta sẽ unpack thằng này.
_Chỉnh Options trong OllyDBG:
_Load target lên OllyDBG:
_Gõ Atl+F1, nhập BP CreateThread :
_Nhấn Shift+F9:
_Nhấn Ctrl+F9:
_Nhấn F8:
_Lại nhấn Ctrl+F9:
_Nhấn tiếp F8:
_Cuộn màn hình xuống chút xíu để tìm đọan Call EDI:
_Nhấn F2 đặt breakpoint tại địa chỉ 0125BF62 FFD7 CALL NEAR EDI,
nhấn F9 để run, Olly sẽ ice tại 0125BF62, nhấn F7 ta tới OEP, yeah!
_Trở lại như tut trên, mở một Olly, load target, Binary copy PE header từ địa chỉ
400000…400FFF và dán vào. Sau đó dump.
_Fix IAT:
_hai em invalid:
JMP NEAR DWORD PTR DS:[401048]
JMP NEAR DWORD PTR DS:[401420]
_Từ OEP, trở ngược lên tận cùng, gõ Ctrl+F và nhập JMP NEAR DWORD PTR
DS:[401048]. Ta sẽ tới địa chỉ:
004125B8 - FF25 48104000 JMP NEAR DWORD PTR DS:[401048]
_Tại đây, R-Click, chọn New origine from here. Nhấn F7, tới đây:
_Trace down từ từ ta thấy khởi điểm và kết thúc của hàm, có hàm __vbaEnd (tương
đương ExitProcess. Do chương trình code bằng VB nên ta chọn hàm này.
_Hàm JMP NEAR DWORD PTR DS:[401420] không tồn tại nên Cut Thunk.
_Fix Done:
_Detect:
_Hè hè, sau nhiều đêm suy nghĩ, tui mới nghĩ ra cách này để gọi chính xác là manual
unpack cho các target protect bằng standard protection. Copyright @hacnho, khửa
khửa. Các bác đọc tut này có thể thực hành ngay. Còn các bác đọc tut của ARTEAM
cũng unpack một soft cũng hãng với Registry Mechanic nhưng ngay cả tui, try arm
nhiều mà đọc cũng dek hiểu được bi nhiêu . Kèm theo target, dumped.exe,
dumped_.exe và tree cho các bác thực hành. Ah quên một điều lưu ý là khi mở thêm
một OllyDBG để copy PE Header, copy xong nhớ đóng nó lại, không thôi ImpREC
attach không được thì die.
Tut#3: UnPackMe_Armadillo4.10.b
Standard Protection
_Cái này tương tự các tut trên, quan trọng là bạn chọn method nào, phải lanh trí và
kiên nhẫn khi tìm OEP và fix IAT (khoảng 24 hàm). Nếu thành công bạn sẽ ở đây:
Tut#4: UnPackMe_Armadillo4.20.b
Standard Protection
_Để nâng cao tay nghề, bạn hãy unpack hoàn toàn target trong tut4.
III. Lời kết:
Thế là hết phần một với standard protection. Hy vọng qua tut này bạn có thể
unpack được các unpack me và soft đang release trên NET. Các soft pack dạng
này tui liệt kê ra đây:
Ace Utilities v2.5.0.4016 (Armadillo Standard)
(khoe cái chơi. Hè hè)
Advanced X Video Converter v3.9.32 (Armadillo Standard+Import Elimination)
AoA DVD Ripper v3.75 (Armadillo Standard+Import Elimination)
AVI/MPEG/RM/WMV Joiner v4.81 (Armadillo Standard+Code Splicing+Import
Elimination)
BearShare Pro v4.7.1.1 (Armadillo Standard)
Coding Workshop Ringtone Converter v5.2.4 (Armadillo Standard)
Coding Workshop Polyphonic Wizard v4.0.3 (Armadillo Standard)
File Recover 5.0.1.15
HyperCam v2.11.00 (Armadillo Standard+Import Elimination)
HyperSnap-DX v5.62.05 (Armadillo Standard+Import Elimination)
Privacy Guardian 4.0.0.11
Registry Mechanic 5.0.0.14
Spyware Doctor 3.2.1
Spam Monitor 2.5
_Một tut đơn giản với quá trời hình. He he, chắc các bạn down target về xử mệt xỉu
luôn. Đã viết gần xong rồi serie#2 nhưng target khá nặng, thôi để các bạn đọc xong
tut này rồi tui viết tiếp. Mất 3h cho cái tut này, hix. Đang viết tut cracking NERO cho
thằng bạn. Chắc tuần sau tui mới up lên serie#2 quá. Thôi bà con ráng chờ nhe. Bi
bo.
GrEeTs Fly Out: Deux, INFINITE,Computer_Angel, Zombie, NVH(c),softcracker_vn, luucorp, Aaron,
Canterwood, hhphong, R@dier, tlandn, , RCA, CTL, Moonbaby, kienmanowar, benina,TQN, the_lighthouse,
Nini, hoadongnoi, hosiminh, Nilrem, Teerayoot, Ferrari, Kruger, Kelvin, Devilz, anh_surprised ...and you !
Special Thanx Cracks Latinos.
Merci FFF, RiF, N-Gen (closed), ICI-TEAM pour me-aider des connaissances du Game Cracking!
Thanx to author of OllyDBG.
To be continued...
Written by hacnho (tutorial date: Sai Gon 21/08/2005)
Các file đính kèm theo tài liệu này:
- Armadillo_tut_serie#1.pdf