2010.10.15_ximo_VMP脱壳后antidump的处理及再谈简单的爆破(带视频)
来源:互联网 发布:价值流程图绘制软件 编辑:程序博客网 时间:2024/06/04 19:01
http://www.52pojie.cn/thread-67701-1-1.html 发表于 2010-10-15 21:36:31
VMP
下面就简单的说下我个人的处理方法,当然,方法很多,我能力有限,只会这种垃圾的方法。当然比补区段要看点,补区段实在是不得已而为止的方法。 后,有个antidump,也就是说,加了VMP外壳后,又VM掉了某关键代码后,脱壳后,就得处理antidump部分,不然程序会出错。脱壳部分就不说了,可以直接看视频,就直接去看antidump部分。
关键是寻找2条handler,来看下这2条handler吧。
VM_Add32:0040DD86 Main rol ax,cl 0040DD89 Main mov eax,dword ptr ss:[ebp] ; EAX=35881B1A 0040DD8C Main cmp dx,ax 0040DD8F Main add dword ptr ss:[ebp+4],eax 0040DD92 Main jmp dumped.0040B070 0040B070 Main call dumped.0040C730 0040C730 Main pushad 0040C731 Main pushfd 0040C732 Main pop dword ptr ss:[esp+20] 0040C736 Main pushfd 0040C737 Main jmp dumped.0040DCBA 0040DCBA Main jmp dumped.0040C71C 0040C71C Main push dword ptr ss:[esp+24] 0040C720 Main pop dword ptr ss:[ebp] 0040C723 Main mov byte ptr ss:[esp+4],bl 0040C727 Main lea esp,dword ptr ss:[esp+28] 0040C72B Main jmp dumped.0040CD43 0040CD43 Main setge dh ; EDX=00400186 0040CD46 Main jmp dumped.0040DC1E 0040DC1E Main pushad
0040BC90 Main movsx si,cl ; ESI=00410004 0040BC94 Main jmp dumped.0040DA71 0040DA71 Main mov esi,dword ptr ss:[ebp] ; ESI=0040E5DE 0040DA74 Main call dumped.0040DC69 0040DC69 Main test bl,0AE 0040DC6C Main bt sp,9 0040DC71 Main mov byte ptr ss:[esp],ch 0040DC74 Main add ebp,4 ; EBP=0012FA38 0040DC77 Main pushad 0040DC78 Main pushfd 0040DC79 Main push 8116F71 0040DC7E Main pushfd 0040DC7F Main lea esp,dword ptr ss:[esp+30] 0040DC83 Main jmp dumped.0040CD27 0040CD27 Main bsr dx,ax ; EDX=00400000 0040CD2B Main rcr bl,4 ; EBX=8D43C6EB 0040CD2E Main inc bl ; EBX=8D43C6EC 0040CD30 Main sal bl,4 ; EBX=8D43C6C0 0040CD33 Main mov ebx,esi ; EBX=0040E5DE 0040CD35 Main push edx 0040CD36 Main rcl dx,cl 0040CD39 Main cmp cl,3D 0040CD3C Main add esi,dword ptr ss:[ebp] 0040CD3F Main lea esp,dword ptr ss:[esp+4] 0040CD43 Main setge dh ; EDX=00400100 0040CD46 Main jmp dumped.0040DC1E 0040DC1E Main pushad ......后半段了,省略 0040DC1F Main mov al,byte ptr ds:[esi-1] ; EAX=00000016
2.0040DA71 Main mov esi,dword ptr ss:[ebp] ; ESI=0040E5DE
var teax var tesi var logfile var info mov logfile,"log.txt" loop: run cmp eip,0040da71 je Exit mov teax,eax mov tesi,esi eval "eax:{teax} esi:{tesi}" mov info,$RESULT wrta logfile,info jmp loop Exit: ret
跑完脚本后,看日志,一般就是最后的2,3行,如:
eax:CC59F905 esi:410EBEeax:0 esi:410EB8eax:154F78 esi:410E89
其中eax:0 esi:410EB8就是关键了。
所以,修改的方法呼之欲出,
在0040DD8F Main add dword ptr ss:[ebp+4],eax
下好断点,当esi==410EB8,修改eax的值为4即可。
可以修改的方法时,原来eax==4,则修改为0,原来eax==0,则修改为4
下面就是如何patch了,怎么patch,自由发挥。
其实这就是修改VM的跳转流程的一种方法,爆破VM的程序时,也可以如此修改,如拿上个爆破的程序为例:
看下日志:
vm.eip:4107C4 handle:40D74B VM_Add32 vm.stack:0 //关键 vm.eip:4107C5 handle:40C1EE VM_SetR32_Reg_0 vm.stack:206 vm.eip:4107C6 handle:40D37F VM_RmSs32 vm.stack:12FF78 vm.eip:4107C7 handle:40C1EE VM_SetR32_Reg_30 vm.stack:5C059AFD vm.eip:4107C8 handle:40C1EE VM_SetR32_Reg_2C vm.stack:5C059AFD vm.eip:4107C9 handle:40C1EE VM_SetR32_Reg_28 vm.stack:5C05BA25 vm.eip:4107CA handle:40D672 VM_GetR32 vm.stack:1E240 vm.eip:4107CB handle:40DA5A VM_GetEsp vm.stack:5C059AFD vm.eip:4107CC handle:40D37F VM_RmSs32 vm.stack:12FF7C vm.eip:4107CD handle:40C1EE VM_SetR32_Reg_14 vm.stack:5C059AFD vm.eip:4107CE handle:40DA5A VM_GetEsp vm.stack:5C059AFD vm.eip:4107CF handle:40D37F VM_RmSs32 vm.stack:12FF7C vm.eip:4107D0 handle:40D125 VM_Nor32 vm.stack:5C059AFD vm.eip:4107D1 handle:40C1EE VM_SetR32_Reg_30 vm.stack:282 vm.eip:4107D2 handle:40CCF8 VM_GetI32 vm.stack:A3FA6502 vm.eip:4107D7 handle:40D125 VM_Nor32 vm.stack:A3BA9816 vm.eip:4107D8 handle:40C1EE VM_SetR32_Reg_28 vm.stack:202 vm.eip:4107D9 handle:40D672 VM_GetR32 vm.stack:5C0502E9 vm.eip:4107DA handle:40CCF8 VM_GetI32 vm.stack:5C059AFD vm.eip:4107DF handle:40D125 VM_Nor32 vm.stack:5C4567E9 vm.eip:4107E0 handle:40C1EE VM_SetR32_Reg_28 vm.stack:282 vm.eip:4107E1 handle:40D125 VM_Nor32 vm.stack:A3BA0002 vm.eip:4107E2 handle:40C1EE VM_SetR32_Reg_2C vm.stack:206 vm.eip:4107E3 handle:40C1EE VM_SetR32_Reg_30 vm.stack:40FD14 vm.eip:4107E4 handle:40D672 VM_GetR32 vm.stack:1E240 vm.eip:4107E5 handle:40D672 VM_GetR32 vm.stack:7FFD7000 vm.eip:4107E6 handle:40D672 VM_GetR32 vm.stack:206 vm.eip:4107E7 handle:40D672 VM_GetR32 vm.stack:1E240 vm.eip:4107E8 handle:40D672 VM_GetR32 vm.stack:12B948 vm.eip:4107E9 handle:40D672 VM_GetR32 vm.stack:216 vm.eip:4107EA handle:40D672 VM_GetR32 vm.stack:408050 vm.eip:4107EB handle:40D672 VM_GetR32 vm.stack:12BA34 vm.eip:4107EC handle:40D672 VM_GetR32 vm.stack:12FFC0 vm.eip:4107ED handle:40D672 VM_GetR32 vm.stack:7FFD7000 vm.eip:4107EE handle:40D672 VM_GetR32 vm.stack:12BA34 vm.eip:4107EF handle:40CCF8 VM_GetI32 vm.stack:408050 vm.eip:4107F4 handle:40D672 VM_GetR32 vm.stack:1DEBB337 vm.eip:4107F5 handle:40D74B VM_Add32 vm.stack:E2144CC9 vm.eip:4107F6 handle:40C1EE VM_SetR32_Reg_34 vm.stack:257 vm.eip:4107F7 handle:40D672 VM_GetR32 vm.stack:0 vm.eip:4107F8 handle:40D672 VM_GetR32 vm.stack:0 vm.eip:4107F9 handle:40CE19 VM_SetEip vm.stack:40FD14 //跳转
这关键的地方下好断点,当esi==4107C4时,修改eax的值即可,方法跟刚才一样,就是0跟4的互换。
http://pan.baidu.com/netdisk/singlepublic?fid=140670_203262421
- 2010.10.15_ximo_VMP脱壳后antidump的处理及再谈简单的爆破(带视频)
- 2011.11.10_33vc_VMP 2.06 antidump的处理
- 简单爆破的应对
- 2011.06.18_ximo_VMP antidump 之补区段法
- 简单的MVVM视频、源码(带“事件”处理)
- 脱壳后的IAT修复
- IDA 调试 Android 方法及简单的脱壳实现
- aspack的简单脱壳,望大牛勿喷。
- 北斗ncpack的简单脱壳。
- 一个很简单的动态壳爆破
- 子域名爆破subDomainsBrute的简单使用
- 再发一个某加密的脱壳视频
- 浅谈程序脱壳后的优化
- 浅谈程序脱壳后的优化
- upx壳的一些简单脱壳,望大牛勿喷。
- 听鬼哥说ZJDROID脱壳的简单使用
- 听鬼哥说ZJDROID脱壳的简单使用
- 自己写的简单脱壳工具
- Android编译系统详解(一)
- ZOJ Problem Set - 1060 Sorting It All Out
- 退休后能拿到多少养老金
- 星球上最详细的AWR解析报告
- UVA 10474
- 2010.10.15_ximo_VMP脱壳后antidump的处理及再谈简单的爆破(带视频)
- AWR报告分析-如何清理AWR的导入数据
- TeX-换行换页与段落命令
- 移植Qtopia-opensource-src-4.3.2
- 动态规划--计划一个公司聚会
- uva110 没有循环的排序程序
- uva11205损坏的步数计
- 2.6.36.2 s3c6410 触摸屏驱动移植。
- 杭电hdu 1233 还是畅通工程 prim