2010.10.15_ximo_VMP脱壳后antidump的处理及再谈简单的爆破(带视频)

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

VM_SetEip:
    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句关键的代码处下好断点:
1. 0040DD8F Main     add dword ptr ss:[ebp+4],eax

2.0040DA71 Main     mov esi,dword ptr ss:[ebp]                ; ESI=0040E5DE


下好断点后,跑下面的脚本,主要是为了记录eax和esi的值:
    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:410EBE
eax:0 esi:410EB8
eax: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 //跳转

于是,在vm.eip:4107C4      handle:40D74B      VM_Add32               vm.stack:0 //关键

这关键的地方下好断点,当esi==4107C4时,修改eax的值即可,方法跟刚才一样,就是0跟4的互换。


http://pan.baidu.com/netdisk/singlepublic?fid=140670_203262421

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值