vb逆向常用函数
vb逆向常用函数
先逐步积累,积累够了做个x32dbg插件自动显示参数和注释以及函数功能。
- __vbaLenVar 求字符串长度
push edx | 参数1,Variant字符串
push eax | 参数2,出参字符串长度
call dword ptr ds:[<&__vbaLenVar>] | 求字符串长度,返回值eax,也表示字符串长度
- rtcMidCharVar vb中Mid函数,功能为截取字符串
push eax |参数1,裸I4,字符串start
lea eax,dword ptr ss:[ebp-64] |
lea ecx,dword ptr ss:[ebp-8C] |
push eax |参数2,Variant字符串
push ecx |参数3,ecx+10截取字符串长度
call dword ptr ds:[<&rtcMidCharVar>] |截取字符串,返回值eax表示截取字符串
- rtcLeftCharVar vb中的Left函数,功能为从左侧截取长度为length的子串,返回值保留才eax中
0040493A | push 1 |参数1,length从左侧提取的字符串长度
0040493C | lea ecx,dword ptr ss:[ebp-74] |
0040493F | push eax |参数2,Variant字符串
00404940 | push ecx |参数3,出参,截取结果,Variant字符串
00404941 | call rtcLeftCharVar |
- __vbaStrErrVarCopy 将字符串从Variant复制到字符串首地址,返回值eax为字符串的值
lea edx,dword ptr ss:[ebp-8C] |
push edx |Variant字符串
call dword ptr ds:[<&__vbaStrErrVarCopy>] |
- __vbaVarMove 将变量从edx指向地址移动到ecx指向地址,同时将保存在eax中返回
lea edx,dword ptr ss:[ebp-9C] |
lea ecx,dword ptr ss:[ebp-54] |
mov dword ptr ss:[ebp-94],eax |
mov dword ptr ss:[ebp-9C],8 |
call __vbaVarMove |
- __vbaStrVarVal 将Variant字符串转换成裸字符串,结果保存在eax中
lea eax,dword ptr ss:[ebp-54] |
lea ecx,dword ptr ss:[ebp-68] |
push eax | Variant字符串
push ecx |
call dword ptr ds:[<&__vbaStrVarVal>] |
- rtcAnsiValueBstr 计算字符串第1个字符的ascii值,并在ax中返回
push eax |字符串首地址
call dword ptr ds:[<&rtcAnsiValueBstr>] |
- __vbaMidStmtVar 将变量转换为字符串,并将字符串指定起始位置,指定长度替换成指定字符串
lea ecx,dword ptr ss:[ebp-34] |
push ecx | 参数1,Variant变量
push 4 | 参数2,起始位置
lea edx,dword ptr ss:[ebp-AC] |
push 1 |参数3,长度
push edx |参数4,要替换的字符串
mov dword ptr ss:[ebp-A4],andrénalin.2.401C34 |
mov dword ptr ss:[ebp-AC],8 |
call __vbaMidStmtVar | 结果保存在第1个参数指向的地址中
- __vbaVarTstLe 判断参数1是否小于等于参数2,返回值ax,FFFF表示参数1小于等参数2,0x00表示参数1大于参数2
push ecx | 参数1,左边被比较值
push edx | 参数2,右边被比较值
call dword ptr ds:[<&__vbaVarTstLe>] | 判断参数1是否小于等于参数2,返回值ax,FFFF表示参数1小于等参数2,0x00表示参数1大于参数2
- __vbaI4ErrVar Variant变量转换为I4类型,返回值eax为I4类型
lea eax,dword ptr ss:[ebp-7C] |
lea ecx,dword ptr ss:[ebp-24] |
push eax |参数1,未知作用
push ecx |参数2,Variant变量
mov dword ptr ss:[ebp-74],1 |
mov dword ptr ss:[ebp-7C],ebx |
call dword ptr ds:[<&__vbaI4ErrVar>] |
- __vbaVarTstEq 判断两个变量是否相等,不相等eax返回0x0,相等返回0xFFFFFFFF
lea eax,dword ptr ss:[ebp-6C] |
push eax | 参数1,比较Variant变量1
push ecx | 参数2,比较Variant变量2
mov dword ptr ss:[ebp-58],0 |
mov dword ptr ss:[ebp-6C],8008 |
call dword ptr ds:[<&__vbaVarTstEq>] | 判断两个变量是否相等
- __vbaI4Str 把字符串转换为I4,返回值在eax中
mov eax,dword ptr ss:[ebp-28] |
push eax | 参数1,字符串
call dword ptr ds:[<&__vbaI4Str>] |
- rtcBstrFromAnsi 将Ansi值转换成字符串,eax做返回值,eax中字符串首地址
movsx edx,ax |
push edx |参数1,ansi值,例如eax=31
call dword ptr ds:[<&rtcBstrFromAnsi>] |例如eax=字符串首地址
- rtcR8ValFromBstr 从裸字符串转换8字节浮点数,返回结果存储在st0中
0040494D | push eax |裸字符串
0040494E | call dword ptr ds:[<&rtcR8ValFromBstr>] |
- __vbaI4Var 将一个VARIANT转换为I4(即一个长整数)
00404960 | push ecx |
00404961 | push edx |
00404962 | mov dword ptr ss:[ebp-5C],1 |
00404969 | mov dword ptr ss:[ebp-64],2 |
00404970 | call dword ptr ds:[<&__vbaI4Var>] |