0基础vmp虚拟指令分析(wcprobe.dll)

1 篇文章 0 订阅
1 篇文章 0 订阅
寄存器大概作用
eax=操作数
ebx=这是个挺重要的,作用是用来计算跳转地址和使用哪个虚拟寄存器
ecx=操作数
edx=操作数
esp=栈指针(个人理解是栈顶几个指针等于虚拟寄存器)
ebp=虚拟栈顶指针
esi=虚拟指令表指针
edi=eip

MOVZX EAX,BYTE PTR DS:[ESI]
XOR AL,BL
NOT AL
XOR AL,XX
ADD AL,XX
ROL AL,1
XOR BL,AL
MOV ECX,DWORD PTR SS:[ESP+EAX] 或 MOV ECX,DWORD PTR SS:[EBP]
MOV DWORD PTR SS:[EBP],ECX 或 MOV DWORD PTR SS:[ESP+EAX],ECX
这种操作个人理解就是把值给虚拟栈赋值,或从虚拟栈取值给某个虚拟寄存器
mov virtual register[XXX],dword ptr ss:[ESP+XXXXXXXXXXXX]
mov dword ptr ss:[ESP+XXXXXXXXXXXX],virtual register[XXX]

///分隔线///
int id=0, a,b,c,f,flage1,flage2,flage3,flage4,flage5;
int funa(int* th32ProcessID);
a=b=c=funa(XX);
进入虚拟代码flage3=funa运行结束后的eflages,然后循环给虚拟寄存器赋值
(a)&(b);
flage1=pushfd(eflages取出来)
(a)|(b);
flage2=pushfd(eflages取出来)
a=b=flage3;
(a)&(b);
flage4=pushfd(eflages取出来)
然后又一顿2块5的操作之后,得出来个0x40
a=0x40;
a=a&flage3;重点a决定后续操作*
这个是什么版本的vmprotect我也不清楚,0基础硬啃,除了赋值取值,其它操作结束后都有个pushfd
下次编辑。。
这东西好像除了自己去分析,好像很难讲的明白啊。。哈哈哈哈哈,听谁说都没自己动手尝试下效果好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值