小甲鱼 OllyDbg 教程系列 (七) :VB 程序逆向分析
?
小甲魚視頻:https://www.bilibili.com/video/av6889190?p=14
VB程序逆向反匯編常見的函數:https://www.cnblogs.com/bbdxf/p/3780187.html
程序下載地址:鏈接:https://pan.baidu.com/s/18igiL-YWn9wnIrJfKT8gBA? ? ?提取碼:wygg?
PEiD 查殼工具:https://pan.baidu.com/s/1iNS4UlBvmXCxaj5a-AFupw ? ?提取碼:79z5?
?
關于 VB
?
?
VB 逆向 pj 關鍵:
針對變量:
__vbaVarTstEq
__vbaVarTstNe
__vbaVarCompEq
__vbaVarCompLe
__vbaVarCompLt
__vbaVarCompGe
__vbaVarCompGt
__vbaVarCompNe
?
針對字符串:
__vbaStrCmp
__vbaStrComp
__vbaStrCompVar
__vbaStrLike
__vbaStrTextComp
__vbaStrTextLike
關注加粗的即可!!
?
?
VB程序逆向反匯編常見的函數(修改版)
?
VB程序逆向常用的函數
1) 數據類型轉換:
a) __vbaI2Str??? 將一個字符串轉為8 位(1個字節)的數值形式(范圍在 0 至 255 之間) 或2 個字節的數值形式(范圍在 -32,768 到 32,767 之間)。?
b)__vbaI4Str?? 將一個字符串轉為長整型(4個字節)的數值形式(范圍從-2,147,483,6482,147,483,647)?
c)__vbar4Str? 將一個字符串轉為單精度單精度浮點型(4個字節)的數值形式?
d)__vbar8Str?? 將一個字符串轉為雙精度單精度浮點型(8個字節)的數值形式?
e) VarCyFromStr??? (僅VB6庫. 要調試,則在WINICE.DAT里必須有 OLEAUT32.DLL)字符串到變比型數據類型?
f) VarBstrFromI2? (僅VB6庫. 要調試,則在WINICE.DAT里必須有 OLEAUT32.DLL)整型數據到字符串:
2) 數據移動:
a) __vbaStrCopy????? 將一個字符串拷貝到內存,類似于 Windows API HMEMCPY?
b) __vbaVarCopy???? 將一個變量值串拷貝到內存?
c) __vbaVarMove??? 變量在內存中移動,或將一個變量值串拷貝到內存
3) 數學運算:
a)? __vbavaradd????? 兩個變量值相加?
b) __vbavarsub????? 第一個變量減去第二個變量?
c) __vbavarmul???? 兩個變量值相乘?
d) __vbavaridiv???? 第一個變量除以第二個變量,得到一個整數商?
e) __vbavarxor?????? 兩個變量值做異或運算
4) 程序設計雜項:
a) __vbavarfornext? 這是VB程序里的循環結構, For... Next...? (Loop)?
b) __vbafreestr??? 釋放出字符串所占的內存,也就是把內存某個位置的字符串給抹掉?
c) __vbafreeobj?? 釋放出VB一個對象(一個窗口,一個對話框)所占的內存,也就是把內存某個位置的一個窗口,一個對話框抹掉?
d) __vbastrvarval? 從字符串特點位置上獲取其值?
e) multibytetowidechar? 將數據轉換為寬字符格式,VB在處理數據之都要這樣做,在TRW2000顯示為7.8.7.8.7.8.7.8?
f) rtcMsgBox?? 調用一個消息框,類似于WINDOWS里的messagebox/a/exa,此之前一定有個PUSH命令將要在消息框中顯示的數據壓入椎棧?
g) __vbavarcat??? 將兩個變量值相連,如果是兩個字符串,就連在一起?
h) __vbafreevar? 釋放出變量所占的內存,也就是把內存某個位置的變量給抹掉?
i) __vbaobjset?
j)? __vbaLenBstr?? 獲得一個字符串的長度,注:VB中一個漢字的長度也為1?
k) rtcInputBox??? 顯示一個VB標準的輸入窗口,類似window's API getwindowtext/a, GetDlgItemtext/a?
l) __vbaNew????? 調用顯示一個對話框,類似 Windows' API Dialogbox?
m) __vbaNew2??? 調用顯示一個對話框,類似 Windows' API Dialogboxparam/a?
n) rtcTrimBstr?? 將字串左右兩邊的空格去掉
5) 比較函數
a)? __vbastrcomp?? 比較兩個字符串,類似于 Window's API lstrcmp?
b)? __vbastrcmp?? 比較兩個字符串,類似于 Window's API lstrcmp?
c) __vbavartsteq? 比較兩個變量值是否相等?
d)__vbaFpCmpCy????????????????? - Compares Floating point to currency. sp;??????????? Compares Floating point to currency
6) 在動態跟蹤,分析算法時,尤其要注意的函數:
rtcMidCharVar? 從字符串中取相應字符,VB中的MID函數,用法MID("字符串","開始的位置","取幾個字符")?
rtcLeftCharVar 從字符串左邊取相應字符,VB中的用法:left("字符串","從左邊開始取幾個字符")?
rtcRightCharVar 從字符串右邊取相應字符,VB中的用法:Right("字符串","從右邊開始取幾個字符")?
__vbaStrCat? 用字符串的操作,就是將兩個字符串合起來,在VB中只有一個&或+?
__vbaStrCmp? 字符串比較,在VB中只有一個=或<>?
ASC()函數??? 取一個字符的ASC值,在反匯編時,還是有的movsx 操作數
7) 在函數中的縮寫:
bool 布爾型數據(TRUE 或? FALSE)?
str? 字符串型數據 STRING?
i2?? 字節型數據或雙字節整型數據? BYTE or Integer?
ui2? 無符號雙字節整型數據??
i4?? 長整型數據(4字節)? Long?
r4?? 單精度浮點型數據(4字節)? Single?
r8?? 雙精度浮點型數據(8字節)? Double?
cy (8 個字節)整型的數值形式 Currency?
var? 變量???? Variant?
fp 浮點數據類型? Float Point?
cmp? 比較?? compare?
comp 比較?? compare?
??
Btw:?
__vbavartsteq系列的還有__vbavartstne 不等于?
__vbavartstGe,__vbavartstGt,__vbavartstLe,__vbavartstLt等,比較大于或小于
-----------------------------
攔截警告聲:?
bpx rtcBeep?????? —>揚聲器提示
數據移動:?
bpx vbaVarCopy??? —>數據移動將一個變量值串拷貝到內存?
bpx vbaVarMove??? —>數據移動變量在內存中移動,或將一個變量值串拷貝到內存?
bpx vbaStrMove??? —>移動字符串?
bpx vbaStrCopy??? —>移動字符串 將一個字符串拷貝到內存,類似于 Windows API HMEMCPY
數據類型轉換:?
bpx vbaI2Str??????? —>將一個字符串轉為8 位(1個字節)的數值形式(范圍在 0 至 255 之間) 或2 個字節的數值形式(范圍在 -32,768 到 32,767 之間)。?
bpx vbaI4Str??????? —>將一個字符串轉為長整型(4個字節)的數值形式(范圍從-2,147,483,6482,147,483,647)?
bpx vbar4Str??????? —>將一個字符串轉為單精度單精度浮點型(4個字節)的數值形式?
bpx vbar8Str??????? —>將一個字符串轉為雙精度單精度浮點型(8個字節)的數值形式?
bpx VarCyFromStr??? —>(僅VB6庫. 要調試,則在WINICE.DAT里必須有 OLEAUT32.DLL)字符串到變比型數據類型?
bpx VarBstrFromI2?? —>(僅VB6庫. 要調試,則在WINICE.DAT里必須有 OLEAUT32.DLL)整型數據到字符串:
數值運算:?
bpx vbaVarAdd????? —>兩個變量值相加?
bpx vbaVarIdiv???? —>除整,第一個變量除以第二個變量,得到一個整數商?
bpx vbaVarSub????? —>第一個變量減去第二個變量?
bpx vbaVarMul????? —>兩個變量值相乘?
bpx vbaVarDiv????? —>除?
bpx vbaVarMod????? —>求余?
bpx vbaVarNeg????? —>取負?
bpx vbaVarPow????? —>指數?
bpx vbavarxor????? —>兩個變量值做異或運算
針對變量:?
bpx vbaVarCompEq?????? —>比較局部變量是否相等?
bpx vbaVarCompNe?????? —>比較局部變量是否不等于?
bpx vbaVarCompLe?????? —>比較局部變量小于或等于?
bpx vbaVarCompLt?????? —>比較局部變量小于?
bpx vbaVarCompGe?????? —>比較局部變量大于或等于?
bpx vbaVarCompGt?????? —>比較局部變量大于
VB的指針:?
THROW
程序結構:?
bpx vbaVarForInit? —>重復執行初始化?
bpx vbaVarForNext? —>重復執行循環結構, For... Next...? (Loop)
比較函數:?
bpx vbaStrCmp????? —>比較字符串是否相等 ******?
bpx vbaStrComp???? —>比較字符串是否相等 ******?
bpx vbaVarTstEq??? —>檢驗指定變量是否相等?
bpx vbaVarTstNe??? —>檢驗指定變量是否不相等?
bpx vbaVarTstGt??? —>檢驗指定變量大于?
bpx vbaVarTstGe??? —>檢驗指定變量大于或等于?
bpx vbaVarTstLt??? —>檢驗指定變量小于?
bpx vbaVarTstLe??? —>檢驗指定變量小于或等于
字符串操作:?
bpx vbaStrCat?????? —>用字符串的操作,就是將兩個字符串合起來,在VB中只有一個&或+?
bpx vbaStrLike?
bpx vbaStrTextComp? —>與指定文本字符串比較?
bpx vbaStrTextLike?
bpx vbaLenBstr???? —>字符串長度?
bpx vbaLenBstrB??? —>字符串長度?
bpx vbaLenVar????? —>字符串長度?
bpx vbaLenVarB???? —>字符串長度?
bpx rtcLeftCharVar?? —>截取字符串,從字符串左邊取相應字符,VB中的用法:left("字符串","從左邊開始取幾個字符")?
bpx vbaI4Var???????? —>截取字符串?
bpx rtcRightCharVar? —>截取字符串,從字符串右邊取相應字符,VB中的用法:Right("字符串","從右邊開始取幾個字符")?
bpx rtcMidCharVar??? —>截取字符串,VB中的MID函數,用法MID("字符串","開始的位置","取幾個字符")?
bpx vbaInStr???????? —>查找字符串位置?
bpx vbaInStrB??????? —>查找字節位置?
bpx vbaStrCopy?????? —>復制字符串?
bpx vbaStrMove?????? —>移動字符串?
bpx rtcLeftTrimVar?? —>刪除字串的空白?
bpx rtcRightTrimVar? —>刪除字串的空白?
bpx rtcTrimVar?????? —>刪除字串的空白?
bpx vbaRsetFixstrFree?? —>字符串往右對齊?
bpx vbaRsetFixstr?????? —>字符串往右對齊?
bpx vbaLsetFixstrFree?? —>字符串往左對齊?
bpx vbaLsetFixstr?????? —>字符串往左對齊?
bpx vbaStrComp????????? —>字符串比較?
bpx vbaStrCompVar?????? —>字符串比較?
bpx rtcStrConvVar2??????? —>字符串類型轉換?
bpx rtcR8ValFromBstr????? —>把字符串轉換成浮點數?
bpx MultiByteToWideChar?? —>ANSI字符串轉換成Unicode字符串?
bpx WideCharToMultiByte?? —>Unicode字符串轉換成ANSI字符串?
bpx rtcVarFromFormatVar?? —>格式化字符串?
bpx rtcUpperCaseVar?????? —>小寫變大寫?
bpx rtcLowerCaseVar?????? —>大寫變小寫?
bpx rtcStringVar????????? —>重復字符?
bpx rtcSpaceVar?????????? —>指定數目空格?
bpx rtcAnsiValueBstr????? —>傳回字符碼(返回第一個字符的字符代碼)?
bpx rtcByteValueBstr????? —>傳回字符碼(返回第一個字節的字符代碼)?
bpx rtcCharValueBstr????? —>傳回字符碼(返回第一個Unicode字符代碼)?
bpx rtcVarBstrFromAnsi??? —>傳回字符(返回 String,其中包含有與指定的字符代碼相關的字符 )?
bpx rtcVarBstrFromByte??? —>傳回字符(返回 String,其中包含有與指定的字符代碼相關的單字節)?
bpx rtcVarBstrFromChar??? —>傳回字符(返回 String,其中包含有與指定Unicode 的 String)
?
?
?
總結
以上是生活随笔為你收集整理的小甲鱼 OllyDbg 教程系列 (七) :VB 程序逆向分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux-----diff命令
- 下一篇: Java8 Stream详解~收集(co