VII-Reduce Size: Thật ra cũng ko còn nhiều điều gì làm , mở CFF Explorer lên, Open file, delete hết các section : Vì .adata ko còn chứa phần IAT redirect nên ta delete mà ko sợ gì hết..
Trang 1báo lỗi Trong hầu hết trường hợp ,ta phải luôn fix relocation khi unpack bất
kì DLL nào, dù là packer nào
Rất may mắn là Armadillo ko hề encrypt Relocation nên ta dễ dàng fix Nếu
như các packer khác thì sẽ gặp rắc rối to đấy Giờ chúng ta đến khâu cuối cùng
VII-Reduce Size:
Thật ra cũng ko còn nhiều điều gì làm , mở CFF Explorer lên, Open file,
delete hết các section :
Vì adata ko còn chứa phần IAT redirect nên ta delete mà ko sợ gì hết Sau
đó chỉnh Base Of Code lại cho đúng :
Save file Để gọn hơn mở LordPE ,Option lại phần ReBuild :
Trang 2Tiến hành rebuild file fix sau cùng :
Size sau khi thu gọn, còn nhỏ hơn file gốc chưa bị pack :
Rename, và file vẫn được Unikey.exe Load tốt Coi như hoàn thành phần Unpack cho DLL pack bởi Armadillo
VIII- Ending:
Quả thật Unpack ko hề đơn giản là sao chép, làm hùng hục như 1 cái máy, chúng ta cần nắm vững các kiến thức cơ bản Hi vọng các bạn đã nghiệm ra nhiều thứ từ bài viết này
Big Thanks to: fly [CUG], stephenteh {RES} for helping
Chân thành cám ơn:
Các anh em ở REA đã giúp đỡ tricky trong việc học tập
Cụ hacnho với loạt tut unpack siêu cấp của mình
Bác Why Not Bar vì đã pack dùm tricky mấy cái file Unikey
…và cả bạn nữa
Trang 3Tàn Ma Kiếm (Written by Trickyboy)
By Pnluck, Saturn and LittleLuk with the collaboration of Faina
Execryptor 2.2.50
Crackme, Ollydbg, IsDebug&Extra, Olly Invisible, HideDebugger, NtGlobalFlag, OllyDump, AntidetectOllyPatch , RDG
About EXECryptor
Bạn có thể tìm thấy những thông tin về Execryptor ở URL:
http://www.strongbit.com/execryptor.asp
About Reversing stuff detection
Execryptor sử dụng rất nhiều kỹ thuật để phát hiện ra OLLYDBG và những công
cụ khác (softice, filemon, regmon, etc ) Đúng như vậy vì Execryptor (EXECR) tạo nhiều tiểu trình (Threads), mà sẽ điều khiển gần như là liên tục Và OLLYDBG hay filemon chưa được sửa lỗi thì sẽ bị Execryptor tặng cho màn terminated Vì vậy, bạn nên có RE-pair 0.6(dành cho regmon, filemon) và AntidetectOllyPatch (đối với Olly)
About R3 degugger detection
EXECR sử dụng một vài những thủ thuật mã để thấy được là nó đang bị debug
Control of Beingdebug
Trang 41 004XXXXX MOV EAX,DWORD PTR FS:[30] ;fs:[30] cho ta địa chỉ của PEB
2
3 004XXXXX ADD EAX,2 ; PEB+2 is địa chỉ bộ nhớ đang bị debug
4 004XXXXX MOV EAX,DWORD PTR DS:[EAX] ; 0 (không bị
debug) or 1(bị debug)
5
6 004XXXXX OR AL,AL
7 004XXXXX JE UnPackMe.004F2C67
Control of ProcessHeap
1 004XXXXX MOV EAX,DWORD PTR FS:[18] ; fs:[18] cho ta địa chỉ của khối TEB
2 ở đây là một vài thao tác của mã
3 004XXXXX MOV EAX,DWORD PTR [EAX+30] ;TEB+0x30 cho ta địa chỉcủa khối PEB
4 ở đây là một vài thao tác của mã
5 004XXXXX MOV EAX, DWORD PTR[EAX+18] ;PEB+0x18 cho ta địa chỉ của ProcessHeap
6 004XXXXX CMP DWORD PTR DS:[EAX+10],0 ;EAX+10 bằng 0(không bị debug) hoặc những giá trị khác (phát hiện đang bị debug)
Controll of NtGlobalFlag
1 004XXXXX MOV EAX,DWORD PTR FS:[30] ;fs:[30] cho ta địa chỉ của khối PEB
2 004XXXXX ADD EAX,8E4180C9
3 004XXXXX ADD EAX,71BE7F9F ;EAX = PEB+0X68 : địa chỉ của NtGlobalFlag
4 004XXXXX MOV EAX,DWORD PTR DS:[EAX] ; NtGlobalFlag có lẽ 0x70(phát hiện bị debug ) or 0 (không bị debug)
Use of Windows apis
Có sự hiện diện của 2 hàm này: CheckRemoteDebuggerPresent và
IsDebuggerPresent (các bạn xem thêm MSDN)
Use of Seh
Trang 5EXECR sử dụng nhiều ngoại lệ, chủ yếu để phát hiện ra những ngắt phần cứng
1 004XXXXX MOV ECX,ESP
2 004XXXXX ADD ECX,10
3 004XXXXX MOV ECX,DWORD PTR DS:[ECX] ;conn trỏ tới ngữ cảnh của chương trình (Context of software)
4 004XXXXX MOV DWORD PTR DS:[ECX],10013 ;thay đổi các cở ngữ cảnh (context flags)
5
6 00524C5F ADD ECX,18 ;ECX = thanh ghi debug thứ 7 (Debug Register 7_)
7 00524C65 MOV AL,BYTE PTR DS:[ECX]
8 00524C67 ADD ECX,9C ;ECX = thanh ghi EBP
9 00524C6D ADD BYTE PTR DS:[ECX],AL
10 00524C6F ADD ECX,4 ;ECX = thanh ghi EIP
11 00524C75 MOV DWORD PTR DS:[ECX],UnPackMe.00522929 ;đặt lại con trỏ eip sau khi trình điều khiển ngoại lệ thực thi
12
13 0052068E XOR EAX,EAX ;EAX = 0 : fixed exception
14 00520690 POP ECX
15 00520691 RETN
Đây là trình điều khiển ngoại lệ dơn giản nhất, vì những loại khác sẽ xem xét các thanh ghi phần cứng (DR0->DR3 Chúng ta không nên dùng các ngắt phần cứng, mà chỉ nên dùng các ngắt mềm
Use of Thread
EXECR sẽ tạo ra nhiều cái threads điều khiển để phát hiện ra OLLYDBG, một số
sự chỉnh sửa mã như BP, , để tránh những con threads này, bạn nên code injection vào hàm API CreateThread :