首页
社区
课程
招聘
[原创]也说Zp的IAT加密
发表于: 2008-6-24 09:39 6000

[原创]也说Zp的IAT加密

2008-6-24 09:39
6000
其实Zp的IAT加密很脆弱。
例子我就直接用lunglungyu的文章里面的代码了,省得自己搞

00402410 - FF25 60304000 jmp dword ptr ds:[403060]
跟进
call 00402410
就是给加密的GETMODULEHANDLEA

00EC0000 50 push eax
00EC0001 60 pushad
00EC0002 68 92D455AA push AA55D492
00EC0007 E8 9404ECFF call 00D804A0
00EC000C 61 popad
00EC000D C3 retn

上面是低强度的,我们比较下一个子选项之后的:

00402344 - E9 4BBF0000 jmp 0040E294 ; yh_packe.0040E294
00402349 90 nop


0040E258 68 A7B93C15 push 153CB9A7
0040E25D ^ E9 52FEFFFF jmp 0040E0B4 ; yh_packe.0040E0B4


这里解释下,0x153CB9A7是Key,用于计算位置,用来干什么的位置?查表……
0040E0B4 这个就是Zp的过程了。开始是一个GetTickCount的计算,一定要小于。然后使用Key产生了一次0xff15的Call []调用,记住这个Call,后面会很有用。然后eax返回的是使用Key计算出来的索引值,放入esi,在另外一个值放入eax捣鼓了几下,对esi做了cmp比较。
其实这里可以猜出来,为什么要比较。只是为了保证Key是正确的,算出的索引esi没有超出表的总项数eax,之后把表的起始位置放入ecx使用ecx+esi*4查表。查出来的值直接丢前面Key在堆栈中的位置。然后retn形成调用。
如果你自己走过那个CALL[]调用,你会发现其实步数不多,除了对esi的操作其他都是nop性质的,而且函数的关联性很差,可以直接提取。这样就可以做脚本来修了。
进入的时候我们不Jmp到0040E0B4,直接Call那个地址,索引值就会出现在eax中,然后我们查表就可以获得函数了,怎么修复,脚本怎么写?算了吧,前一项自己想,后一项我不会……

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 229
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
不错,支持一下…………
2008-6-24 12:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
认真学习一下
2008-6-24 12:19
0
游客
登录 | 注册 方可回帖
返回
//