黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!

设为首页
收藏本站
联系我们
网站导航

黑客文章 - 加密解密 - 浏览 - Armadillo 3.6主程序IAT处理

Armadillo 3.6主程序IAT处理

黑客 发布日期:2008-4-23 1:46:00 共有 608 人次浏览
"Armadillo 3.6主程序IAT处理"

    上次对IAT处理有误,近几天有空专门对其进行了分析,而且为此还安装了WINXP。发现Armadillo 3.6和3.7处理IAT方法一样,但是操作系统不同IAT位置不一样,以WIN2k为最难。win2k下IAT位置到012c1000处不在文件内存映像范围内,所以对其IAT修复还要处理位置问题。下面是分析笔记,不当之处请指点。  
用OllyDBG加载,在命令窗口输入bp DebugActiveProcess。断下后察看堆栈窗口:  
0012DA9C  00487DDB  /CALL 到 DebugActiveProcess 来自 Armadill.00487DD5  
0012DAA0  0000057C  \ProcessId = 57C  
0012DAA4  0012FF04  
0012DAA8  00000000  
进程ID为57C.另外打开一个ollydbg程序,附加到57C这个进程,OK。  
按ALT+F9会来到入口处,修改入口指令EB FE为60 E8(第一步记下的),结果:  
004A2000 >PUSHAD  
004A2001  CALL Armadill.004A2006  
004A2006  POP EBP  
004A2007  PUSH EAX  
004A2008  PUSH ECX  
004A2009  JMP SHORT Armadill.004A201A  
设置bp OpenMutexA断点,断下后取消。  
察看堆栈窗口:  
0012F574  004797F1  /CALL 到 OpenMutexA 来自 Armadill.004797EB  
0012F578  001F0001  |Access = 1F0001  
0012F57C  00000000  |Inheritable = FALSE  
0012F580  0012FBB4  \MutexName = "57C::DAAD341ECC"  
0012F584  0012FF04  
其中0012FBB4指向MutexName = "57C::DAAD341ECC",根据此值在00401000空白处输入以下代码:(先建立再打开,对OpenMutexA这个API进行Hook)  
00401000    60            PUSHAD  
00401001    68 B4FB1200    PUSH 12FBB4    ; ASCII "57C::DAAD341ECC"  
00401006    6A 00          PUSH 0  
00401008    6A 00          PUSH 0  
0040100A    E8 D08BA877    CALL KERNEL32.CreateMutexA  
0040100F    61            POPAD  
00401010  -E9 D48CA877    JMP KERNEL32.OpenMutexA  
在00401000地址按鼠标右键,然后在菜单中选择“此处新建EIP”。  
设置bp LoadLibraryA断点,不断按F9,当堆栈显示为:  
0012BEE4  00DF8B55  /CALL 到 LoadLibraryA 来自 00DF8B4F  
0012BEE8  012E0640  \FileName = "WSOCK32.dll"  
此时说明开始处理IAT了。按Ctrl-F9,然后F7到程序领空。  
然后一路F8到:  
00E11684  PUSH 0  
00E11686  CALL DWORD PTR DS:[E180C4]    ; KERNEL32.GetModuleHandleA  
00E1168C  CMP DWORD PTR SS:[EBP-1744],EAX  
00E11692  JNZ SHORT 00E116A3  
再一路F8到:  
00E1174F  CMP DWORD PTR SS:[EBP-1744],EAX    
00E11755  JNZ SHORT 00E11768  
此处要说明一下,目前大部分都是在这之后修改jmp使之不进行IAT加密。其实所有Armadillo壳处理IAT的原理是:先比较模块是不是kernel32.dll/user32.dll/advapi32.dll,如果是再进行API比较(只对符合条件的API进行hook到壳中执行),如API符合就修改IAT中对应的项使其指向壳代码,都不满足则填入真实的API入口地址(即不加密)。  
00E1174F处就是进行模块句柄比较,所以只要修改00E11755处的跳转或在此处下硬件执行断点手动转移,就可以免除所有IAT加密。  
ok,当所有IAT处理完毕后,就可以用ImportREC.exe得到所有正确IAT了。win2k下RVA=00EC1008,SIZA=600,然后即可get imports.  
这是得到的所有函数清单:  
1  00EC1008  user32.dll  0261  SetWindowPos  
1  00EC100C  user32.dll  019D  LoadBitmapA  
1  00EC101C  user32.dll  01BF  MapWindowPoints  
1  00EC1020  gdi32.dll  0052  DeleteDC  
1  00EC1024  kernel32.dll  01FC  MapViewOfFile  
1  00EC102C  user32.dll  01C3  MessageBeep  
1  00EC1038  ws2_32.dll  0034  gethostbyname  
1  00EC1040  gdi32.dll  01B4  RealizePalette  
1  00EC1048  ws2_32.dll  0003  closesocket  
1  00EC1050  kernel32.dll  0026  CompareStringW  
1  00EC1058  user32.dll  019B  LoadAcceleratorsA  
1  00EC105C  kernel32.dll  0025  CompareStringA  
1  00EC1060  user32.dll  0100  GetCursorPos  
1  00EC1064  user32.dll  013E  GetPropA  
1  00EC106C  user32.dll  025E  SetWindowLongA  
1  00EC1074  user32.dll  0146  GetSubMenu  
1  00EC1078  kernel32.dll  0202  MoveFileA  
1  00EC107C  user32.dll  0087  DefWindowProcA  
1  00EC1080  kernel32.dll  018B  GetTickCount  
1  00EC1084  kernel32.dll  0309  WinExec  
1  00EC1088  gdi32.dll  0013  BitBlt  
1  00EC1090  ntdll.dll  0222  RtlLeaveCriticalSection  
1  00EC1094  user32.dll  0161  GetWindowRect  
1  00EC109C  comctl32.dll  003F  ImageList_LoadImage  
1  00EC10A0  user32.dll  00D7  FillRect  
1  00EC10A4  user32.dll  015B  GetWindowLongA  
1  00EC10B4  user32.dll  00F6  GetClipboardData  
1  00EC10B8  kernel32.dll  0293  SetEndOfFile  
1  00EC10BC  user32.dll  0258  SetTimer  
1  00EC10C4  kernel32.dll  012A  GetFileSize  
1  00EC10CC  ntdll.dll  0199  RtlDeleteCriticalSection  
1  00EC10D0  gdi32.dll  0039  CreateFontIndirectA  
1  00EC10D4  advapi32.dll  0193  RegDeleteKeyA  
1  00EC10D8  user32.dll  0017  CallWindowProcA  
1  00EC10DC  gdi32.dll  0168  GetStockObject  
1  00EC10E0  kernel32.dll  01E6  LoadLibraryA  
1  00EC10E8  user32.dll  00B2  DrawTextA  
1  00EC10EC  kernel32.dll  0044  CreateMutexA  
1  00EC10F0  comdlg32.dll  006E  GetOpenFileNameA  
1  00EC10F8  ntdll.dll  0277  RtlSizeHeap  
1  00EC1104  kernel32.dll  0049  CreateProcessA  
1  00EC1108  gdi32.dll  0032  CreateDIBitmap  
1  00EC110C  user32.dll  018B  IsClipboardFormatAvailable  
1  00EC1110  kernel32.dll  02E5  UnmapViewOfFile  
1  00EC1114  kernel32.dll  029C  SetFilePointer  
1  00EC1118  user32.dll  0270  ShowWindow  
1  00EC1120  gdi32.dll  01CF  SelectObject  
1  00EC1124  gdi32.dll  0044  CreatePalette  
1  00EC1128  user32.dll  008A  DeleteMenu  
1  00EC112C  gdi32.dll  002C  CreateCompatibleDC

所属分类: 加密解密     网摘收藏: Google 雅虎 百度 POCO 365key 和讯 天极