远地址跳转参见
http://grinders.withernsea.com/tutorials/file_info/download1.php?file=Armadillo_Antidumps_By_Eggi.rar
不过它的办法有些罗嗦,可以直接下断VirtualAlloc,查看申请地址值,如果比较大就需要注意了,返回后代码类似下面
00DE2612 6A 40 PUSH 40
00DE2614 68 00200000 PUSH 2000
00DE2619 FFB5 70E6FFFF PUSH DWORD PTR SS:[EBP-1990]
00DE261F FF35 3092DF00 PUSH DWORD PTR DS:[DF9230]
00DE2625 FF15 A0B1DE00 CALL DWORD PTR DS:[DEB1A0] ; kernel32.VirtualAlloc
00DE262B 8985 78E6FFFF MOV DWORD PTR SS:[EBP-1988],EAX
00DE2631 83BD 78E6FFFF 0>CMP DWORD PTR SS:[EBP-1988],0
00DE2638 74 33 JE SHORT 00DE266D
00DE263A 6A 40 PUSH 40
00DE263C 68 00100000 PUSH 1000
00DE2641 FFB5 70E6FFFF PUSH DWORD PTR SS:[EBP-1990]
00DE2647 FF35 3092DF00 PUSH DWORD PTR DS:[DF9230]
00DE264D FF15 A0B1DE00 CALL DWORD PTR DS:[DEB1A0] ; kernel32.VirtualAlloc
00DE2653 8985 78E6FFFF MOV DWORD PTR SS:[EBP-1988],EAX //保存codesplit 首地址 在这里断下修改eax值到一较低地址
00DE2659 83BD 78E6FFFF 0>CMP DWORD PTR SS:[EBP-1988],0
00DE2660 74 0B JE SHORT 00DE266D
iat乱序可以看看Ricardo Narvaja的教程203-208ARMADILLO WITH DESTRUCTION OF TABLE
不过它的iat最后使用了一段smc代码完成正常iat到乱序iat的转换
其实完全可以用一段简单脚本修改代码段,来修复iat函数的调用
有空我会整理一篇iat乱序的修复示例
codesplit现在没看到好的修复办法,那n重循环看起来就头痛。