VB逆向函数详解1

__vbaVarMove ;变体变量赋值(一般用于数值变量)


lea edx,var1 ;变量1的地址放到edx

lea ecx,var2 ;变量2的地址放到ecx

call __vbaVarMove ;把变量1赋值给变量2

;-------------------------------------------------

__vbaVarCopy ;变体变量赋值(一般用于字符串变量)

lea edx,var1 ;变量1的地址放到edx

lea ecx,var2 ;变量2的地址放到ecx

call __vbaVarMove ;把变量1赋值给变量2

;-------------------------------------------------


__vbaVarAdd ;变体变量相加 +


lea eax,var1

push eax ;加数1

lea ecx,var2

push ecx ;加数2

lea edx,var3

push edx ;结果

call __vbaVarAdd ;变量相加,在eax中返回

;-------------------------------------------------


__vbaVarSub ;变体变量相减 -


lea eax,var1

push eax ;被减数

lea ecx,var2

push ecx ;减数

lea edx,var3

push edx ;结果

call __vbaVarSub ;变量相减,在eax中返回

;-------------------------------------------------


__vbaVarMul ;变体变量相乘 *


lea eax,var1

push eax ;被乘数

lea ecx,var2

push ecx ;乘数

lea edx,var3

push edx ;结果

call __vbaVarMul ;变量相乘,在eax中返回

;-------------------------------------------------


__vbaVarDiv ;变体变量相除(浮点除法)/


lea eax,var1

push eax ;被除数

lea ecx,var2

push ecx ;除数

lea edx,var3

push edx ;结果

call __vbaVarDiv ;变量相除,在eax中返回

;------------------------------------------------


__vbaVarIdiv ;变体变量相除(整数除法)\


lea eax,var1

push eax ;被除数

lea ecx,var2

push ecx ;除数

lea edx,var3

push edx ;结果

call __vbaVarIdiv ;变量相除,在eax中返回

;------------------------------------------------

__vbaVarMod ;变体变量取模运算 Mod


lea eax,var1

push eax ;被除数

lea ecx,var2

push ecx ;除数

lea edx,var3

push edx ;结果

call __vbaVarMod ;变量去模,在eax中返回

;------------------------------------------------

__vbaVarNeg ;变体变量前加负号 -


lea eax,var1

push eax ;变量

lea ecx,var2

push ecx ;结果

call __vbaVarNeg ;对变量取补

;------------------------------------------------

__vbaVarPow ;变体变量求幂 ^


lea eax,var1

push eax ;底数

lea ecx,var2

push ecx ;指数

lea edx,var3

push edx ;结果

call __vbaVarPow ;求幂,在eax中返回

;------------------------------------------------

__vbaVarTstGt ;关系运算 >


lea eax,var1

push eax ;变量1

lea eax,var2

push eax ;变量2

call __vbaVarTstGt ;if var1 > var2 then ax = &Hffff

;else ax = 0

;end if

;------------------------------------------------

__vbaVarTstGe ;关系运算 >=


lea eax,var1

push eax ;变量1

lea eax,var2

push eax ;变量2

call __vbaVarTstGe ;if var1 >= var2 then ax = &Hffff

;else ax = 0

;end if

;------------------------------------------------

__vbaVarTstEq ;关系运算 =


lea eax,var1

push eax ;变量1

lea eax,var2

push eax ;变量2

call __vbaVarTstEq ;if var1 = var2 then ax = &Hffff

;else ax = 0

;end if 

;------------------------------------------------

__vbaVarTstNe ;关系运算 <>


lea eax,var1

push eax ;变量1

lea eax,var2

push eax ;变量2

call __vbaVarTstNe ;if var1 <> var2 then ax = &Hffff

;else ax = 0

;end if 

;------------------------------------------------

__vbaVarTstLt ;关系运算 <


lea eax,var1

push eax ;变量1

lea eax,var2

push eax ;变量2

call __vbaVarTstLt ;if var1 < var2 then ax = &Hffff

;else ax = 0

;end if 

;------------------------------------------------

__vbaVarTstLe ;关系运算 <=


lea eax,var1

push eax ;变量1

lea eax,var2

push eax ;变量2

call __vbaVarTstLe ;if var1 <= var2 then ax = &Hffff

;else ax = 0

;end if 

;------------------------------------------------ 

__vbaVarAnd ;逻辑运算 And


lea eax,var1

push eax ;变量1

lea ecx,var2

push ecx ;变量2

lea edx,var3

push edx ;结果

call __vbaVarAnd ;逻辑运算,在eax中返回

;------------------------------------------------

__vbaVarOr ;逻辑运算 Or


lea eax,var1

push eax ;变量1

lea ecx,var2

push ecx ;变量2

lea edx,var3

push edx ;结果

call __vbaVarOr ;逻辑运算,在eax中返回

;------------------------------------------------

__vbaVarXor ;逻辑运算 Xor


lea eax,var1

push eax ;变量1

lea ecx,var2

push ecx ;变量2

lea edx,var3

push edx ;结果

call __vbaVarXor ;逻辑运算,在eax中返回

;------------------------------------------------

__vbaVarEqv ;逻辑运算 Eqv


lea eax,var1

push eax ;变量1

lea ecx,var2

push ecx ;变量2

lea edx,var3

push edx ;结果

call __vbaVarEqv ;逻辑运算,在eax中返回

;------------------------------------------------

__vbaVarImp ;逻辑运算 Imp


lea eax,var1

push eax ;变量1

lea ecx,var2

push ecx ;变量2

lea edx,var3

push edx ;结果

call __vbaVarImp ;逻辑运算,在eax中返回

;------------------------------------------------

__vbaVarNot ;逻辑运算 Not


lea eax,var1

push eax ;变量1

lea ecx,var2

push ecx ;结果

call __vbaVarNot ;逻辑运算,在eax中返回

;------------------------------------------------

;------------------------------------------------下面是函数

lea eax,var1 ;函数 Abs(num)

push eax ;参数1 数值型

lea ecx,var2

push ecx ;结果

call __vbaVarAbs ;在eax中返回 结果

;------------------------------------------------

rtcAnsiValueBstr ;函数 Asc(string)


lea eax,var1

push eax ;参数1 字符串型

call rtcAnsiValueBstr ;结果在eax中返回 interger

;------------------------------------------------

MSVBVM60.#585 ;函数 Atn(num)


push ecx ;参数 浮点数,用8个字节

push ecx

CALL MSVBVM60.#585 ;结果在浮点栈中返回

;------------------------------------------------

rtcVarBstrFromAnsi ;函数 Chr(interger)


push eax ;参数1 整型

call rtcVarBstrFromAnsi ;结果在eax中返回 string

;------------------------------------------------

rtcCommandVar ;函数 Command() #670


push eax ;参数1 字符串

call rtcCommandVar ;结果在eax中返回 string

;------------------------------------------------

rtcCos ;函数 Cos(num) #583


call rtcCos ;输入参数在当前栈顶,8个字节,注意是浮点型

fstp st ;结果在浮点栈顶

;------------------------------------------------

rtcCurrentDir ;函数 curdir(string) #647


lea eax,var1 ;参数1 字符串

push eax

lea edx,var2 ;结果

push edx

call rtcCurrentDir ;结果在eax中返回

;-------------------------------------------------

rtcGetDateVar ;函数 Date #610


lea edx,var1 ;结果

push edx

call rtcGetDateVar ;结果在eax中返回,日期型(Date)

;-------------------------------------------------

rtcDateAdd ;函数 DateAdd(string,double,date) #661


push date ;8字节日期date

push double ;8字节浮点数double

push string ;1字节字符的ASCII码,这里是地址

push var1 ;结果,日期型(date)

call rtcDateAdd ;结果在eax中返回,日期型(Date)

;--------------------------------------------------

rtcDateDiff ;函数 DateDiff(string,date1,date2,...,...) #662


push 1 ;默认值

push 1 ;默认值

lea eax,var1 ;日期2

push eax

lea ecx,var2 ;日期1

push ecx

lea edx,var3 ;字符串

push edx

lea eax,var4 ;结果

push eax

call rtcDateDiff ;结果在eax中返回,长整型(long)

;---------------------------------------------------

rtcDatePart ;函数 DatePart(string,date,...,...) #663


push 1 ;默认值

push 1 ;默认值

lea eax,var1 ;日期

push eax

lea ecx,var2 ;字符串

push ecx

lea edx,var3 ;结果

push edx

call rtcDatePart ;结果在eax中返回

;----------------------------------------------------

rtcPackDate ;函数 DateSerial(integer,integer,integer) #538


lea eax,var1 ;日

push eax

lea ecx,var2 ;月

push ecx

lea edx,var3 ;年

push edx

lea eax,var4 ;结果

push eax

call rtcPackDate ;结果在eax中返回,日期型(Date)

;-----------------------------------------------------

rtcGetDateValue ;函数 DateValue(string)


lea eax,var1 ;字符串

push eax

lea edx,var2 ;结果

push edx

call rtcGetDateValue ;结果在eax中返回,日期型(Date)

;-----------------------------------------------------

rtcGetDayOfMonth ;函数 Day(date) #542


lea eax,var1 ;日期

push eax

lea ecx,var2 ;结果

push ecx

call rtcGetDayOfMonth ;结果在eax中返回,整型

;-----------------------------------------------------

rtcDir ;函数 Dir #645


lea eax, var1 ;属性

push eax

lea ecx,var2 ;路径

push ecx

call rtcDir ;结果在eax中返回,字符串型(string)

;-----------------------------------------------------

rtcExp ;函数 exp #586


LEA EDX,DWORD PTR SS:[EBP-24] ;参数 

PUSH EDX 

CALL DWORD PTR DS:[<&MSVBVM60.__vbaR8Var>] ;转换成浮点数,结果在浮点寄存器里

SUB ESP,8 

FSTP QWORD PTR SS:[ESP] ;压入堆栈 

CALL DWORD PTR DS:[<&MSVBVM60.#586>] ;rtcExp 

FSTP QWORD PTR SS:[EBP-2C] ;结果存入堆栈 

;----------------------------------------------------- 

rtcFileDateTime ;函数 FileDateTime #577


LEA EDX,DWORD PTR SS:[EBP-34] 

PUSH 工程1.004016B0 ;文件名 

PUSH EDX ;结果 

CALL DWORD PTR DS:[<&MSVBVM60.#577>] ;rtcFileDateTime

;调用后结果同时在eax中

;------------------------------------------------------

rtcFileLen ;函数 FileLen #578


PUSH 工程1.004016B0 ;文件名 

CALL DWORD PTR DS:[<&MSVBVM60.#578>] ;rtcFileLen

;结果在eax中

;------------------------------------------------------

__vbaVarFix ;函数Fix(参数1)


LEA EDX,DWORD PTR SS:[EBP-24] 

LEA EAX,DWORD PTR SS:[EBP-54] 

PUSH EDX ;参数1 

PUSH EAX ;返回的结果 

CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarFix>]

MOV EDX,EAX 

;------------------------------------------------------

rtcHexVarFromVar ;函数 Hex(num)


lea eax,var1

push eax ;参数1 数值型

lea ecx,var2

push ecx ;存放结果的参数

call rtcHexVarFromVar ;在eax中返回string

;------------------------------------------------------

rtcGetHourOfDay ;函数 Hour #543


LEA EAX,DWORD PTR SS:[EBP-34] ;时间日期型参数 

LEA ECX,DWORD PTR SS:[EBP-44] ;存放结果的参数 

PUSH EAX 

PUSH ECX 

CALL DWORD PTR DS:[<&MSVBVM60.#543>] ;Hour

;结果同时在eax中返回

;------------------------------------------------------

rtcImmediateIf iif(参数1,参数2,参数3)


LEA EDX,DWORD PTR SS:[EBP-54] ;参数3 

LEA EAX,DWORD PTR SS:[EBP-44] ;参数2 

PUSH EDX 

LEA ECX,DWORD PTR SS:[EBP-34] ;参数1,即表达式 

PUSH EAX 

LEA EDX,DWORD PTR SS:[EBP-64] ;存放结果的参数 

PUSH ECX 

PUSH EDX 

MOV DWORD PTR SS:[EBP-2C],-1 

MOV DWORD PTR SS:[EBP-34],0B 

CALL DWORD PTR DS:[<&MSVBVM60.#681>] ;iif

;结果同时在eax中返回

;------------------------------------------------------

__vbaInStrVar ;函数 InStr(起始位置,源字符串,目标字符串,比较方式)


LEA EDX,DWORD PTR SS:[EBP-24] 

PUSH 1 ;起始位置,从1开始 

LEA EAX,DWORD PTR SS:[EBP-34] 

PUSH EDX ;被搜索的字符串 

PUSH EAX ;要搜的字符串 

LEA ECX,DWORD PTR SS:[EBP-54] 

PUSH 1 ;比较方式 

PUSH ECX ;返回的结果 

CALL DWORD PTR DS:[<&MSVBVM60.__vbaInStrVar>]

MOV EDX,EAX ;结果同时在eax中返回

;------------------------------------------------------

rtcInStrRev ;函数 InStrRev(源字符串,目标字符串,起始位置,比较方式) #709


XOR ESI,ESI

PUSH ESI ;比较方式 

PUSH -1 ;起始位置 

LEA EAX,DWORD PTR SS:[EBP-4C] 

LEA ECX,DWORD PTR SS:[EBP-24] 

PUSH EAX ;目标字符串 

LEA EDX,DWORD PTR SS:[EBP-48] 

PUSH ECX ;源字符串 

PUSH EDX ;返回的结果 

CALL DWORD PTR DS:[<&MSVBVM60.#709>] ;rtcInStrRev

;结果同时在eax中返回

;结果同时在eax中返回

;------------------------------------------------------

__vbaVarInt ;函数 Int(参数1)


LEA ECX,DWORD PTR SS:[EBP-24] 

LEA EDX,DWORD PTR SS:[EBP-54] 

PUSH ECX ;参数1 

PUSH EDX ;返回的结果 

CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarInt>]

MOV EDX,EAX ;结果同时在eax中返回

;------------------------------------------------------ 

rtcIsArray ;函数 IsArray #556

LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针

PUSH EAX

CALL DWORD PTR DS:[<&MSVBVM60.#556>] ; MSVBVM60.rtcIsArray

;结果在eax中返回

;------------------------------------------------------

rtcIsDate ;函数 IsDate #557


LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针

PUSH EAX

CALL DWORD PTR DS:[<&MSVBVM60.#557>]; MSVBVM60.rtcIsDate

;结果在eax中返回

;------------------------------------------------------

rtcIsEmpty ;函数 IsEmpty #558


LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针

PUSH EAX 

CALL DWORD PTR DS:[<&MSVBVM60.#558>] ; MSVBVM60.rtcIsEmpty

;结果在eax中返回

;------------------------------------------------------

rtcIsError ;函数 IsError #559


LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针

PUSH EAX

CALL DWORD PTR DS:[<&MSVBVM60.#559>] ; MSVBVM60.rtcIsError

;结果在eax中返回

;------------------------------------------------------

rtcIsMissing ;函数 IsMissing #592


LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针

PUSH EAX

CALL DWORD PTR DS:[<&MSVBVM60.#592>] ; MSVBVM60.rtcIsMissing

;结果在eax中返回

;------------------------------------------------------

rtcIsNull ;函数 IsNull #560


LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针

PUSH EAX

CALL DWORD PTR DS:[<&MSVBVM60.#560>] ;MSVBVM60.rtcIsNull

;结果在eax中返回

;------------------------------------------------------

rtcIsNumeric ;函数 IsNumeric #561


LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这里指针

PUSH EAX

CALL DWORD PTR DS:[<&MSVBVM60.#561>];MSVBVM60.rtcIsNumeric

;结果在eax中返回

;------------------------------------------------------

rtcIsObject ;函数 IsObject #562


LEA EAX,DWORD PTR SS:[EBP-2C]

PUSH EAX

CALL DWORD PTR DS:[<&MSVBVM60.#562>] ;MSVBVM60.rtcIsObject

;结果在eax中返回

;------------------------------------------------------


转载于:https://www.cnblogs.com/findeasy/archive/2012/10/11/4053150.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值