I-Intro & Preparation: Chào mọi người ,hôm nay tricky tui lại hoàn thành thêm phần Tut về Unpack DLL cho Armadillo .Có thể các bạn từng đọc tut của cụ hacnho, tut của MaDMaN bên ARTeam,
Trang 1_nhấn Repair Dump và chọn File Dumped_.exe, chạy File dumped_ NanoFix.exe và ta thấy
Trang 2_Yeah!!!!! Unpacked successfull… Còn về phần Cracking mấy Bác tự xử đi…em
ko biết gì đâu à nha!!!!! Nếu các bạn muốn giảm dung lượng File dumped_
NanoFix.exe thì chúng ta có thể Delete bớt mấy các Section tàn dư của Arma còn
vương vấn lại
Trang 3_Sau khi Xóa
Trang 4_Run thử vẫn chạy ngon lành…Good…
GrEeTs Fly Out: Computer_Angel, Zombie, Moonbaby, Hacnho, Benina,
kienmanowar, Zoi, Deux, Merc, Trickyboy, Takada, iamidiot, light phoenix,
thienthandien, VolX … and you!
Nha Trang, Ngày 5 tháng 5 năm 2006
Why Not Bar
Armadillo DLL – Unpacking and MORE
Contents Table:
I.Intro & Preparation:
II.Fix Magic Jump and Find OEP:
III.Find & Fix CodeSplicing:
IV.Find & Fix IAT Elimination:
V.Rebuild Import:
VI.Fix ImageBase & Relocation:
VII.Reduce Size:
VIII.Ending:
Tools: OllyDBG + Hide plugins + Scripts ,LordPE ,ImportREC 1.6 ,CFF Explorer Skill Request: Basic Using Olly + Knowledge manual unpacking Armadillo
I-Intro & Preparation:
Chào mọi người ,hôm nay tricky tui lại hoàn thành thêm phần Tut về Unpack DLL cho Armadillo Có thể các bạn từng đọc tut của cụ hacnho, tut của MaDMaN bên ARTeam, hay của Whiterat bên ICU… nhưng theo tricky thấy ở các tut đó ,có vài điểm ko nói rõ khiến nhiều bạn gặp rắc rối trong quá trình unpack DLL Thật ra các điểm này rất cơ bản ,nên đa phần hay bị bỏ qua ,nhưng ko sao, với bài viết này ,hi vọng các bạn có thể tự tin giải quyết các DLL của Armadillo Nhưng trước khi đi vào vấn đề chính ,ta cần ôn lại các dạng Protect kiểu Standard, Code Splicing và IAT Elimination vì ở DLL, Armadillo chỉ áp dụng được các dạng protect này
Trang 5Thường thì chúng ta chỉ quen tay unpack theo các tut nước ngoài ,đôi khi làm xong mà trong đầu ko hiểu là mình đang làm gì Điều này dễ biến chúng ta thành 1 cỗ máy Mặt khác, nếu nhìn qua phương diện toán học, đôi khi mình xài quen một công thức nào đó ,giải quyết được hàng loạt bài toán mà có bao giờ nghĩ tới cách chứng minh đâu? Cứ nghĩ là có người tìm ra công thức thì phải có người xài chứ Tuy nhiên ,nếu ko thể tự mình tìm ra “chân lý” ,thì ít nhất cũng phải hiểu cái cách mà người ta đã tìm ra cho mình và hiểu được những gì mình đang làm
Từ đó quay lại vấn đề :Standard Protect là gì? Code Splicing hay IAT Elimination
là gì ?
Ở đây xin nếu cách hiểu nhanh và gọn cho các bạn chưa rành về chúng:
Standard Protection
Ta thấy bất kì PE file nào cũng cần IAT (xem thêm cấu trúc PE File) Khi Pack lại, Armadillo sẽ Encrypt sao cho lúc unpack ra trong memory, IAT này sẽ bị sai lệch so với ban đầu, một vài chỗ bị hủy đi bằng các Byte mã hóa Do đó khi dump tại OEP, ta chỉ dump được phần IAT tầm bậy ,trong khi ko còn Armadillo để hiểu cách Decrypt nó nữa Các IAT bị hủy do một(hoặc vài) lệnh nhảy nào đó ko được thực hiện (hoặc được thực hiện) Vì vậy, cần tìm Magic Jump đó để Patch cho nó luôn xảy ra (hoặc là ko xảy ra) ,từ đó ta sẽ có được IAT gốc ban đầu
Code Splicing
Qua tay Armadillo IAT nguyên
vẹn ban đầu
File đã được pack.
Qua Magic Jump
Unpack ra trong memory File đã được
pack.
IAT thứ 1 IAT thứ j IAT thứ i bị hủy IAT thứ k bị hủy IAT thứ n
Trang 6Từ hình trên, ta thấy sau khi unpack ra trong memory, một số đoạn code ban đầu nằm trong file, bây giờ đã bị đá ra ngoài section khác, kèm code rác (code vô nghĩa, ko làm thay đổi giá trị của cách thanh ghi hoặc các biến…) Trong file được thay thế bằng các lệnh Jump tới các đoạn code nằm trong section đó (kèm code rác) Do đó ,nếu ta dump tại OEP, ta chỉ dump được các lệnh Jump và thiếu mất một số phần code thật ban đầu
Có 2 cách để fix Một là ta dump thêm phần section chứa các đoạn code bị thiếu, sau đó nối nó vào file đã dump tại OEP Cách thứ 2, ta men theo từng lệnh Jump, lọc các code rác ra, copy và paste các đoạn code thật quay về tại từng lệnh jump Ở cách thứ 1 có tool để làm nhanh là ArmTool, ở cách thứ 2 thì có
ArmInline Theo tricky, cách thứ 2 hay hơn, vì nó tạo lại cấu trúc như cũ của file trước khi bị pack Tuy nhiên cách thứ 1 lại dễ và ít bị sót hơn
IAT Elimination
Từ 2 kiểu bảo vệ trên ,các bạn có thể hiểu nhanh chóng ở phần này Sau khi unpack trong memory, thay vì IAT nằm trong file, lúc này lại bị đá ra ngoài 1 section khác ko thuộc file Nên khi dump, ta lại bị sót mất phần IAT Cách fix cũng tương tự như ở Code Splicing, hoặc là dump section đó ra, hoặc là đưa các giá trị IAT quay về 1 section nào đó còn trống trong file, thường là chọn adata Và ứng
vùng nhớ của file
một section khác ko thuộc vùng nhớ của file
Unpack trong memory
Qua tay Armadillo Đoạn code 1
Đoạn code i Đoạn code n
File đã được Pack
File đã được
Pack
Jump tới đoạn 1
Jump tới đoạn i
Jump tới đoạn n
Code rác
Code rác
Đoạn code 1
Đoạn code i
Đoạn code n Code rác
Code rác
Trang 7cử viên sáng chói vẫn là ArmInline vì nó làm việc rất nhanh chóng và khá chính xác
Nhưng cần nói thêm, tại sao lại là adata ? có thể section khác được hay ko?
Àh ,khi pack lại, Armadillo tạo ra các section để dùng cho việc unpack là text1 , .reloc1, adata, data1 , pdata Sau khi unpack, các section đó ko còn dùng nữa và section adata có size tương đối lớn so với size của IAT gốc, nên nó thường được chọn làm nơi để redirect các IAT vào Bạn hoàn toàn có thể chọn bất kì section nào
để redirect IAT, miễn sao phần còn trống của nó phù hợp với size của IAT Chút nữa tricky sẽ mần cho bạn xem
Okie, ta ôn bài đã đủ ,bây giờ xắn tay lên và tiến hành Unpack DLL pack bởi Armadillo Target kì này vẫn là file UKHook40.DLL của Unikey nhưng ở phiên bản mới nhất Unikey 4 RC1
II- Fix Magic Jump and Find OEP:
DLL cũng là PE File như EXE nên ta có thể load vào Olly và unpack bình thường, có điều sẽ phải mượn qua LoadDLL của Olly tạo 1 main exe để load nó vào memory
Nào ta bắt đầu tại EP, các bạn phải tự Hide các Anti-Debug của Armadillo
đi nhé (IsDebuggerPresent , OutputDebugStringA), check All Exception … :
Có thể dùng “he GetModuleHandleA” hoặc script để fix Magic Jump Ở đây dùng Script cho nhanh (coi như các bạn đã quá quen điều này khi unpack các file exe) :
Sau khi Script chạy xong ,magic jump được tìm thấy và đã fix: