bá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 : Tiế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. Tà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 1. 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 EXECR 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 : . 1. 00 4XXXXX MOV ECX,ESP 2. 00 4XXXXX ADD ECX , 10 3. 00 4XXXXX MOV ECX,DWORD PTR DS:[ECX] ;conn trỏ tới ngữ cảnh của chương trình (Context of software) 4. 00 4XXXXX MOV DWORD PTR DS:[ECX] , 10 01 3 . DS:[ECX],AL 10 . 00 524C6F ADD ECX,4 ;ECX = thanh ghi EIP 11 . 00 524C75 MOV DWORD PTR DS:[ECX],UnPackMe .00 522929 ;đặt lại con trỏ eip sau khi trình điều khiển ngoại lệ thực thi 12 . 13 . 00 5 206 8E XOR. ; 0 (không bị debug) or 1( bị debug) 5. 6. 00 4XXXXX OR AL,AL 7. 00 4XXXXX JE UnPackMe .00 4F2C67 Control of ProcessHeap 1. 00 4XXXXX MOV EAX,DWORD PTR FS: [18 ] ; fs: [18 ] cho ta địa chỉ của khối