首页
社区
课程
招聘
[求助]armadillo copymem-II IAT表修复(解决)
发表于: 2005-8-8 12:10 4798

[求助]armadillo copymem-II IAT表修复(解决)

2005-8-8 12:10
4798
已经使用loadpe的插件dump出文件,目前正在修复IAT表。按照fly等各位老大的帖子,成功找到了magic jmp。如下代码:
00B446EE                    50                 push eax
00B446EF                    FF15 0421B600      call dword ptr ds:[B62104]          ; kernel32.GetModuleHandleA
00B446F5                    8B0D 4CF5B600      mov ecx,dword ptr ds:[B6F54C]   /*返回代码处*/
00B446FB                    89040E             mov dword ptr ds:[esi+ecx],eax
00B446FE                    A1 4CF5B600        mov eax,dword ptr ds:[B6F54C]
00B44703                    391C06             cmp dword ptr ds:[esi+eax],ebx
00B44706                    75 16              jnz short 00B4471E
00B44708                    8D85 B4FEFFFF      lea eax,dword ptr ss:[ebp-14C]
00B4470E                    50                 push eax
00B4470F                    FF15 0C21B600      call dword ptr ds:[B6210C]          ; kernel32.LoadLibraryA
00B44715                    8B0D 4CF5B600      mov ecx,dword ptr ds:[B6F54C]
00B4471B                    89040E             mov dword ptr ds:[esi+ecx],eax
00B4471E                    A1 4CF5B600        mov eax,dword ptr ds:[B6F54C]
00B44723                    391C06             cmp dword ptr ds:[esi+eax],ebx
00B44726                    E9 30010000        jmp 00B4485B         /*这里是magic jmp */
00B4472B                    90                 nop
00B4472C                    33C9               xor ecx,ecx
00B4472E                    8B07               mov eax,dword ptr ds:[edi]
00B44730                    3918               cmp dword ptr ds:[eax],ebx
00B44732                    74 06              je short 00B4473A
00B44734                    41                 inc ecx
00B44735                    83C0 0C            add eax,0C

但我有一点不明白的是:如何找到RVA的地址及大小?
是在:
00B4470F                    FF15 0C21B600      call dword ptr ds:[B6210C]          ; kernel32.LoadLibraryA
中数据窗口中跟随至b6210c 吗? 试着做过,但填如找到的数值后,在importREC中提示“不能载入当前进程相关数据信息!" ,估计肯定是找错了。
请高手指点一二,稍稍提示一下。谢谢。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
跟踪dump.exe
手动定位IAT RVA和Size
2005-8-8 12:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
先谢了。
但dump出来的文件跟踪不了,用F8一跟到有call的地方就飞(不是一般的飞,是飞出一片空白,也就是说在反汇编屏中什么都没有了),用F4跳都跳不过去。晕死!
这个软件加的armadillo不是一般的变态,看来实在不行也只好放弃了。其实跟它同类的软件很多的,想脱它纯属兴趣。
我先声明:我绝不是请求脱壳或其它的什么的,大家有兴趣可以试试。把结果告诉我就可以了,脱壳后的文件不要!!!!!!(免的误会是变相求脱什么的)
它的名字就叫:netterm 5.1.1 ,为了这么个破东西,害的我有1个多月没有在1:00以前睡觉过。看来我的基础是太差了。
2005-8-8 13:40
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
呵呵,真有毅力,坚持下去的话说不定又是一大牛
2005-8-8 14:10
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
5
修正dump.exe的OEP地址
用od载入或者ida反汇编
查找FF25等跳转表特征
00404E72    FF25 14654000   jmp dword ptr ds:[406514]
如上所示,数据窗口跟随406514
就能找到输入表开始和结束的地址
2005-8-8 14:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
实在是搞不定啊。先印证一下:
OEP:000442c0
RVA:0004d1c8 ,大小我直接选1000;
但是,还是不行,看过你的魔法转换的脱壳,试了一下,感觉这个程序中也有N多地方存在GetTickCount。直接按照你的教程,还是不行。
看看我中断的地方:
00B48F53              8985 A49EFFFF         mov dword ptr ss:[ebp+FFFF9EA4],eax
00B48F59              FFB5 A49EFFFF         push dword ptr ss:[ebp+FFFF9EA4]
00B48F5F              E8 58820000           call 00B511BC                            ; jmp to msvcrt.operator delete
00B48F64              59                    pop ecx
00B48F65            ^ E9 05F7FFFF           jmp 00B4866F
00B48F6A              8B85 DCC6FFFF         mov eax,dword ptr ss:[ebp-3924]     /*断在这里
00B48F70              8985 A09EFFFF         mov dword ptr ss:[ebp+FFFF9EA0],eax
00B48F76              FFB5 A09EFFFF         push dword ptr ss:[ebp+FFFF9EA0]
00B48F7C              E8 3B820000           call 00B511BC                            ; jmp to msvcrt.operator delete
00B48F81              59                    pop ecx
00B48F82              83BD D0C6FFFF 00      cmp dword ptr ss:[ebp-3930],0
00B48F89              0F84 59010000         je 00B490E8
00B48F8F              A1 F81EB600           mov eax,dword ptr ds:[B61EF8]

是不是还不对啊?
2005-8-9 00:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我用importREC修复时,怎么出现下面的提示:
RVA:0004D1F0 ReturnValue:-507317325 (EIP:004442E6) Failed!
而且类似的这种还不少,CUT掉肯定是不行的。
想通过“高级命令菜单”--》“获取API调用信息”来修正它,但地址范围不知道填什么好,缺省是00000000-FFFFFFFF。倒是可以获取到很多的API信息,但用反汇编(disasm)--第一级来跟踪追踪它,就会死机。
这里想问一声,这个地址范围到底填多少比较好--怎么看?
2005-8-9 23:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我晕。差点一口鲜血喷出来了。好怪的程序,好怪的importREC!!!!
原来我早就dump出来并正确的找到了IAT表。只是非常古怪的是,第一次用IMPORTREC修复后的程序并不能正确运行。用ollydbg跟踪它,发现IAT表变的不正确了,但这些指针我早就修复了!!!
于是,用ollydbg打开第一次修复后的程序,用importREC找出获取输入表,对照第一次的正确IAT对照表,手工将它一个一个的又改回来,然后重新修复(第一次修复后的程序)。这次发现修复后的程序可以正常的运行了。
一开始,我还怀疑是不是汉化版的原因,后来发现用英文版也是一样的。现在还不清楚是不是importREC的一个BUG?我估计应该是。
2005-8-11 01:09
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
9
看看ImportREC的选项设置
2005-8-11 09:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我在设置中各种组合都试过了,不过,也有可能漏掉什么的。其实,我想,我第一次和第二次的importREC的配置是完全一样的,为什么第二次行而第一次就不行呢?看来有时间要好好研究一下,自己摸索出来的记忆特深。
最后,谢谢fly的热心帮助!!
当没有任何人回贴的时候,是你出现了。
2005-8-11 10:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这次真的是在importREC中配置的各种组合都试过了,还是同样的问题。我现在的解决方法是:
1、dump出文件,找到正确的RVA及大小。
2、载入原加壳文件,找出正确的IAT表。(不要关闭ollydbg),将这个树保存下来--文本文件。
3、另开ollydbg,载入dump出来的文件。
4、用importREC选择dump文件的那个进程,载入先前保存的树表文件,修复即可。
备注:如果直接用ollydbg载入dump出来的文件,用importREC填入RVA、size和OEP这样修复不能成功;fly老大在魔法转换中提到有一个位置中断下来后可以看见正确的RVA起始位置,其实不一定准确,起码我测试的这个软件中用这种方法看到的RVA是不对的。
2005-8-11 11:05
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
12
某些方法未必就可以在所有版本中试用
加壳选项不同会导致脱壳方法变化

修复时当然要用原版文件获取正确的输入表
2005-8-11 11:16
0
游客
登录 | 注册 方可回帖
返回
//