VMP主程序脱壳分析.doc
文本预览下载声明
窗体顶端
NOOBY牛已经玩得差不多了 我来补一刀 ^_^
引用:55 push ebpE8 30C52800 call 0029D7AE ; 0029D7AE0001127E 8BC0 mov eax,eax50 push eaxE8 E8E92700 call 0028FC6E ; 0028FC6E8BC0 mov eax,eax55 push ebpE8 5B333700 call 003845E9 ; 003845E90001128E 8BC0 mov eax,eax52 push edxE8 FBE02C00 call 002DF391 ; 002DF391
被错位了 写段脚本恢复FF25的错位
引用:
luanxu:inc searchfind search,#E8??????008BC0#cmp $RESULT,0je exitmov search,$RESULTGCI search,DESTINATIONcmp $RESULT,001F3000 //UPX0-VAjb luanxucmp $RESULT,003DE000 //UPX2-VAjae luanxuGCI search,COMMANDdec searchmov [search],#909090909090#asm search,$RESULTjmp luanxu
修复后:
引用:E8 31C52800 call 0029D7AE ; 0029D7AE0001127D 90 nop0001127E 8BC0 mov eax,eaxE8 E9E92700 call 0028FC6E ; 0028FC6E90 nop8BC0 mov eax,eaxE8 5C333700 call 003845E9 ; 003845E90001128D 90 nop0001128E 8BC0 mov eax,eaxE8 FCE02C00 call 002DF391 ; 002DF39190 nop
找个CALL跟跟看 有什么新花样 EIP单步 什么都不用看 只看3条
引用:
MOV EXX,ALEA EXX,[EXX+B]LEA EXX,[EXX+C]
这个CALL里用到以下3条
引用:
002ADE81 BDmov ebp,57256002ADE8A 8BAD AF693000 mov ebp,dword ptr ss:[ebp+3069AF]0034A300 8DAD 626F45AB lea ebp,dword ptr ss:[ebp+AB456F62]
前面2条合起来指向一个DWORD 和最后一条组装成最终的函数地址
引用:
[A+B]=[57256+3069AF]=[0035DC05]=D13B2C85----记为R1R1+AB456F62=7C809BE7--指向我本机的kernel32.CloseHandle
NOOBY牛的视频里 找的就是这个 视频里面最后生成的LOG文件里面 每一行的4个成员 后面2个一目了然 是真实函数以及对应的DLL 前面2个则是A+B,C了 这里VMP把A+B拆分成了A和B 使得我们难以在第一次看到A或者B时就能确定是哪个函数(关于NOOBY的VMP1.8脚本可能会另外撰文补充或者等NOOBY牛的BIN ^_^)经过这3条之后 最终函数的真实地址保存在EXX中 这里的EXX不是固定的 给通用脚本编写增加不少难度 最后保存在EXX中的函数会通过一个
引用:
push dword ptr ss:[esp+D]retn E
结构返回真实API地址 这里的D,E也不是固定的 看完FF25后 再来看看IAT调用 一般的DELPHI程序 第一处IAT调用CALL便是这个
引用:53 push ebx83C4 BC add esp,-44BB 0A000000 mov ebx,0A54 push esp0001143A E8 260E3A00 call 003B2265 ; 003B22650001143F F64424 2C 01 test byte ptr ss:[esp+2C],174 05 je short
显示全部