您的位置:首页精文荟萃破解文章 → armdillo加壳的XX软件在xp下的IAT修复

armdillo加壳的XX软件在xp下的IAT修复

时间:2004/10/15 0:58:00来源:本站整理作者:蓝点我要评论(0)

 


1.用新出的dillodumper2.5工具可以在2k/xp下脱去Arma 2.65, 2.85, 3.0, 3.0a, 3.01, 3.01a.的马甲。  

2.在win2000下脱出来的程序可以运行在win2000下,但在xp下不能运行。  

3.在winxp下脱出来的程序在xp下也不能运行。  

看来这个程序还不太完善。下面分析看看。  
4.用ollydbg v1.09b载入脱后的程序,跟踪发现程序在call 005629B8时发生错误,跟进看看,来到这里  

005629B8  -FF25 10615B00    JMP DWORD PTR DS:[5B6110]  

看看前后内容,这是在调用某个dll,对于这个程序是调用OLE32.DLL[别细问哈:)]  

00562940  -FF25 C0605B00    JMP DWORD PTR DS:[5B60C0]  
00562946  -FF25 C4605B00    JMP DWORD PTR DS:[5B60C4]  
0056294C  -FF25 C8605B00    JMP DWORD PTR DS:[5B60C8]  
00562952  -FF25 CC605B00    JMP DWORD PTR DS:[5B60CC]  
00562958  -FF25 D0605B00    JMP DWORD PTR DS:[5B60D0]  
0056295E  -FF25 D4605B00    JMP DWORD PTR DS:[5B60D4]  
00562964  -FF25 D8605B00    JMP DWORD PTR DS:[5B60D8]  
0056296A  -FF25 DC605B00    JMP DWORD PTR DS:[5B60DC]  
00562970  -FF25 E0605B00    JMP DWORD PTR DS:[5B60E0]  
00562976  -FF25 E4605B00    JMP DWORD PTR DS:[5B60E4]  
0056297C  -FF25 E8605B00    JMP DWORD PTR DS:[5B60E8]  
00562982  -FF25 EC605B00    JMP DWORD PTR DS:[5B60EC]  
00562988  -FF25 F0605B00    JMP DWORD PTR DS:[5B60F0]  
0056298E  -FF25 F4605B00    JMP DWORD PTR DS:[5B60F4]  
00562994  -FF25 F8605B00    JMP DWORD PTR DS:[5B60F8]  
0056299A  -FF25 FC605B00    JMP DWORD PTR DS:[5B60FC]  
005629A0  -FF25 00615B00    JMP DWORD PTR DS:[5B6100]  
005629A6  -FF25 04615B00    JMP DWORD PTR DS:[5B6104]  
005629AC  -FF25 08615B00    JMP DWORD PTR DS:[5B6108]  
005629B2  -FF25 0C615B00    JMP DWORD PTR DS:[5B610C]  
005629B8  -FF25 10615B00    JMP DWORD PTR DS:[5B6110]  
005629BE  -FF25 14615B00    JMP DWORD PTR DS:[5B6114]  
005629C4  -FF25 18615B00    JMP DWORD PTR DS:[5B6118]  
005629CA  -FF25 1C615B00    JMP DWORD PTR DS:[5B611C]  
005629D0  -FF25 20615B00    JMP DWORD PTR DS:[5B6120]  
005629D6  -FF25 24615B00    JMP DWORD PTR DS:[5B6124]  
005629DC  -FF25 28615B00    JMP DWORD PTR DS:[5B6128]  
005629E2  -FF25 2C615B00    JMP DWORD PTR DS:[5B612C]  
005629E8  -FF25 30615B00    JMP DWORD PTR DS:[5B6130]  
005629EE  -FF25 34615B00    JMP DWORD PTR DS:[5B6134]  
005629F4  -FF25 38615B00    JMP DWORD PTR DS:[5B6138]  

在命令行键入D 005B60C0看到下面内容  
005B60C0  77 21 EE 00 A9 48 EE 00 0E BB EF 00 C6 82 EE 00  
005B60D0  B6 B8 EF 00 53 07 EE 00 41 07 EE 00 17 0E EE 00  
005B60E0  99 8B EE 00 6F A9 F2 00 EA 77 F0 00 1B CD FA 00  
005B60F0  3C EA F3 00 7C C3 F2 00 74 73 F4 00 9E 22 F3 00  
005B6100  D2 DC F3 00 5A A2 F1 00 F8 BA F3 00 4B E4 FA 00  
005B6110  C3 EA EF 00 44 30 F4 00 14 C5 F2 00 F5 D9 F3 00  
005B6120  58 ED EF 00 E0 86 EE 00 60 85 EE 00 F6 49 EE 00  
005B6130  19 86 EE 00 F3 A4 F2 00 8D 49 EE 00  

注意看看005B6110开始的4个字节内容 C3 EA EF 00,即调用程序入口地址为00efeac3。  
我们在ollydbg中再选择OLE32.DLL模块,看到的地址,对比一下发现果然有问题。  

5.正好我有这个软件的前一版本,载入发现OLE32.DLL的IAT情况:  
0058E59C  -FF25 10015E00    JMP DWORD PTR DS:[<&OLE32.CoCreateInstance>]          ; OLE32.CoCreateInstance  
0058E5A2  -FF25 14015E00    JMP DWORD PTR DS:[<&OLE32.CoGetClassObject>]          ; OLE32.CoGetClassObject  
0058E5A8  -FF25 18015E00    JMP DWORD PTR DS:[<&OLE32.CoGetInterfaceAndReleaseStre>; OLE32.CoGetInterfaceAndReleaseStream  
0058E5AE  -FF25 1C015E00    JMP DWORD PTR DS:[<&OLE32.CoInitialize>]              ; OLE32.CoInitialize  
0058E5B4  -FF25 20015E00    JMP DWORD PTR DS:[<&OLE32.CoMarshalInterThreadInterfac>; OLE32.CoMarshalInterThreadInterfaceInStream  
0058E5BA  -FF25 24015E00    JMP DWORD PTR DS:[<&OLE32.CoTaskMemAlloc>]            ; OLE32.CoTaskMemAlloc  
0058E5C0  -FF25 28015E00    JMP DWORD PTR DS:[<&OLE32.CoTaskMemFree>]              ; OLE32.CoTaskMemFree  
0058E5C6  -FF25 2C015E00    JMP DWORD PTR DS:[<&OLE32.CoUninitialize>]            ; OLE32.CoUninitialize  
0058E5CC  -FF25 30015E00    JMP DWORD PTR DS:[<&OLE32.CreateBindCtx>]              ; OLE32.CreateBindCtx  
0058E5D2  -FF25 34015E00    JMP DWORD PTR DS:[<&OLE32.CreateILockBytesOnHGlobal>]  ; OLE32.CreateILockBytesOnHGlobal  
0058E5D8  -FF25 38015E00    JMP DWORD PTR DS:[<&OLE32.CreateStreamOnHGlobal>]      ; OLE32.CreateStreamOnHGlobal  
0058E5DE  -FF25 3C015E00    JMP DWORD PTR DS:[<&OLE32.DoDragDrop>]                ; OLE32.DoDragDrop  
0058E5E4  -FF25 40015E00    JMP DWORD PTR DS:[<&OLE32.IsAccelerator>]              ; OLE32.IsAccelerator  
0058E5EA  -FF25 44015E00    JMP DWORD PTR DS:[<&OLE32.IsEqualGUID>]                ; OLE32.IsEqualGUID  
0058E5F0  -FF25 48015E00    JMP DWORD PTR DS:[<&OLE32.OleCreateFromData>]          ; OLE32.OleCreateFromData  
0058E5F6  -FF25 4C015E00    JMP DWORD PTR DS:[<&OLE32.OleCreateLinkFromData>]      ; OLE32.OleCreateLinkFromData  
0058E5FC  -FF25 50015E00    JMP DWORD PTR DS:[<&OLE32.OleDraw>]                    ; OLE32.OleDraw  
0058E602  -FF25 54015E00    JMP DWORD PTR DS:[<&OLE32.OleFlushClipboard>]          ; OLE32.OleFlushClipboard  
0058E608  -FF25 58015E00    JMP DWORD PTR DS:[<&OLE32.OleGetClipboard>]            ; OLE32.OleGetClipboard  
0058E60E  -FF25 5C015E00    JMP DWORD PTR DS:[<&OLE32.OleGetIconOfClass>]          ; OLE32.OleGetIconOfClass  
0058E614  -FF25 60015E00    JMP DWORD PTR DS:[<&OLE32.OleInitialize>]              ; OLE32.OleInitialize  
0058E61A  -FF25 64015E00    JMP DWORD PTR DS:[<&OLE32.OleIsCurrentClipboard>]      ; OLE32.OleIsCurrentClipboard  
0058E620  -FF25 68015E00    JMP DWORD PTR DS:[<&OLE32.OleSetClipboard>]            ; OLE32.OleSetClipboard  
0058E626  -FF25 6C015E00    JMP DWORD PTR DS:[<&OLE32.OleSetMenuDescriptor>]      ; OLE32.OleSetMenuDescriptor  
0058E62C  -FF25 70015E00    JMP DWORD PTR DS:[<&OLE32.OleUninitialize>]            ; OLE32.OleUninitialize  
0058E632  -FF25 74015E00    JMP DWORD PTR DS:[<&OLE32.ProgIDFromCLSID>]            ; OLE32.ProgIDFromCLSID  
0058E638  -FF25 78015E00    JMP DWORD PTR DS:[<&OLE32.RegisterDragDrop>]          ; OLE32.RegisterDragDrop  
0058E63E  -FF25 7C015E00    JMP DWORD PTR DS:[<&OLE32.ReleaseStgMedium>]          ; OLE32.ReleaseStgMedium  
0058E644  -FF25 80015E00    JMP DWORD PTR DS:[<&OLE32.RevokeDragDrop>]            ; OLE32.RevokeDragDrop  
0058E64A  -FF25 84015E00    JMP DWORD PTR DS:[<&OLE32.StgCreateDocfileOnILockBytes>; OLE32.StgCreateDocfileOnILockBytes  
0058E650  -FF25 88015E00    JMP DWORD PTR DS:[<&OLE32.StringFromCLSID>]            ; OLE32.StringFromCLSID  
005E0110 >77 21 6C 00 A9 48 6C 00 0E BB 6D 00 C6 82 6C 00  
005E0120 >B6 B8 6D 00 53 07 6C 00 41 07 6C 00 17 0E 6C 00  
005E0130 >99 8B 6C 00 6F A9 70 00 EA 77 6E 00 1B CD 78 00  
005E0140 >3C EA 71 00 7C C3 70 00 74 73 72 00 9E 22 71 00  
005E0150 >D2 DC 71 00 5A A2 6F 00 F8 BA 71 00 4B E4 78 00  
005E0160 >C3 EA 6D 00 44 30 72 00 14 C5 70 00 F5 D9 71 00  
005E0170 >58 ED 6D 00 E0 86 6C 00 60 85 6C 00 F6 49 6C 00  
005E0180 >19 86 6C 00 F3 A4 70 00 8D 49 6C 00  

6.对照分析,我们知道dll的加载应该考虑相对地址,但值得关注的一点就是入口地址的低8位是一样的,看看OLE32.OleInitialize 005e0160这里C3 EA 6D 00以及OLE32.DLL在内存中的位置,这样就不难得到在新版本文件中OLE32.OleInitialize的正确位置应该是00dfeac3  

问题出在dll加载时的地址发生错误,产生偏移=00efeac3-00dfeac3=00100000  

7.至此我们修改新版本中005B60C0--005B613B的相对内容为  
005B60C0  77 21 DE 00 A9 48 DE 00 0E BB DF 00 C6 82 DE 00  
005B60D0  B6 B8 DF 00 53 07 DE 00 41 07 DE 00 17 0E DE 00  
005B60E0  99 8B DE 00 6F A9 E2 00 EA 77 E0 00 1B CD EA 00  
005B60F0  3C EA E3 00 7C C3 E2 00 74 73 E4 00 9E 22 E3 00  
005B6100  D2 DC E3 00 5A A2 E1 00 F8 BA E3 00 4B E4 EA 00  
005B6110  C3 EA DF 00 44 30 E4 00 14 C5 E2 00 F5 D9 E3 00  
005B6120  58 ED DF 00 E0 86 DE 00 60 85 DE 00 F6 49 DE 00  
005B6130  19 86 DE 00 F3 A4 E2 00 8D 49 DE 00  

8.至此,修复完对OLE32.DLL的正确调用地址。修改方法用ultraedit搜索定位即可完成修改。  

修改后程序在xp下运行正常。  

总结,通过此例发现dillodumper2.5脱壳存在的问题主要是在IAT修复时,对dll调用的地址采用的是绝对地址,计算有误,导致程序出错并且不能跨平台使用。  

    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程