VB函数分析

今天破解软件过程中,遇到一些不懂的函数,百度查找到了,在此做一下记录


VB函数约定太杂乱没有统一性,自己分析了几个函数:有的用eax,edx约定,有的单个ecx约定,有的堆栈、寄存器一起用,有的象stdcall约定,有时候会跟虚拟机内部组件传地址引用.
先给出函数分析,下边分析汇编的时候,可以看这些函数,不是很全的且存在错误.仅仅供参考.大家可以一起补充.
-----------------------------------------------------------------
MSVBVM60.__vbaObjSet类似MSVBVM60.__vbanew2用来给对象赋值或者实例化
类似stdcall

push     eax----->类对象模版地址
lea      eax, [ebp-1C]
push     eax-------->欲要设置引用对象指针给eax
call     401048 ---> MSVBVM60.__vbaObjSet
--------------------------------------------------
在每个事件触发之前都要调用MSVBVM60.Zombie_AddRef来记数
事件引用的COM组件对象.约定eax,ecx
mov      eax, esi
and      eax, 1
mov      [ebp-4], eax
and      esi, FFFFFFFE------>经过这寻址正好是对象虚拟表指针
push     esi------>保存对象虚表指针esi
mov      [ebp+8], esi---->esi被局部变量保存[ebp+8]
mov      ecx, [esi]----->对象虚拟表地址给ecx
call     [ecx+4] ---------> MSVBVM60.Zombie_AddRef
--------------------------------------------------
在每个事件结束之后都后调用MSVBVM60.Zombie_Release来
释放事件引用的COM组件对象,约定eax.
MSVBVM60.Zombie_Release释放对象约定参数寄存器:eax
mov      eax, [ebp+8]
push     eax-----------对象地址eax
mov      edx, [eax]----->对象虚拟表地址给edx
call     [edx+8] ----->   MSVBVM60.Zombie_Release
-------------------------------------------------------------------

MSVBVM60.__vbaFreeObj释放对象约定寄存器:ecx
lea      ecx, [ebp-24]--->对象引用指针ecx
call      [401140] --->MSVBVM60.__vbaFreeObj
--------------------------------------------------
MSVBVM60.__vbaChkstk调整堆栈指针约定寄存器:eax
mov      eax, 10
call     004016C0---->MSVBVM60.__vbaChkstk--->这个函数返回的时候就是把esp+10
---------------------------------------------------
MSVBVM60.__vbaNew2类似C++/JAVA的new函数
push     0043E120--->对象地址
push     004031A4---------->类模版地址
call     4010E0 ---> MSVBVM60.__vbaNew2
----------------------------------------------------
MSVBVM60.__vbaStrMove 是寄存器约定 edx和ecx.
mov      edx, eax---->UNICODE字符串源地址:edx
lea      ecx, [ebp-24]---->UNICODE字符串目的地址:ecx
call     401120     ----> MSVBVM60.__vbaStrMove 
-----------------------------------------------------
MSVBVM60.__vbaStrCat 是stdcall约定
push     edx----->连接目的UNICODE字符串
push     00404230 ---->UNICODE字符串常量
call     401034 ---->MSVBVM60.__vbaStrCat
-----------------------------------------------------
MSVBVM60.__vbaFreeStr 约定寄存器:ecx
lea      ecx, [ebp-24]--->ecx传字符串引用
call     40113C----> MSVBVM60.__vbaFreeStr
-----------------------------------------------------
MSVBVM60.__vbaFreeStrList是可变参数Cdcall约定
lea      eax, [ebp-28]--->UNICODE字符串引用地址eax
push     eax
lea      ecx, [ebp-24]---->UNICODE字符串引用地址ecx
push     ecx
push     2------->释放2个UNICODE字符串
call    4010F0 ---> MSVBVM60.__vbaFreeStrList
add     esp, 0C 

-----------------------------------------------------
MSVBVM60.__vbaFileOpen是Cdcall约定
push     eax---->UNICODE文件字符串名称
push     1
push     -1
push     1
call     4010F0-----> MSVBVM60.__vbaFileOpen
add      esp, 0C


----------------------------------------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值