南京网站建设推南京网站建设设计网站开发都有什么端
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(即一个长整数),结果在eax中返回
 
00404960 | push ecx                                                |
00404961 | push edx                                                | 参数1,VARIANT
00404962 | mov dword ptr ss:[ebp-5C],1                             |
00404969 | mov dword ptr ss:[ebp-64],2                             |
00404970 | call dword ptr ds:[<&__vbaI4Var>]                       |
 
- rtcMidCharBstr 字符串取指定位置的字符作为子串,返回值字符在eax中
 
0040497F | push ebx                                                | 参数1,指定索引位置
00404981 | push eax                                                | 参数2,字符串
00404982 | call dword ptr ds:[<&rtcMidCharBstr>]                   |
 
- rtcHexBstrFromVar variant变换转换为16进制字符串,结果保存在eax中返回
 
004049D8 | push eax                                                | variant变量
004049D9 | call dword ptr ds:[<&rtcHexBstrFromVar>]                | variant变换转换为16进制字符串
