vc編譯的程式中,時常會出現一些常見的檢測函式,為了節省逆向的時間,我們有必要記住這些檢測函式的特徵,今天我就記錄一下vc程式的三大檢測函式。
如果是在ida中分析vc程式, shift+f5 加入vc的簽名搞定,但是在od中就需要經驗了。
加入簽名後,就可以看到函式名了。
一、checkstackvars
看名稱就知道知道這是乙個檢測堆疊相關的函式,它的主要特徵:
(1)call 上面一行**是lea edx, ***x。
(2)函式內部存在**cmp ***,0xcccccccc
.text:00463934 push eax
.text:00463935 lea edx, dword_463960
.text:0046393b call j_@_rtc_checkstackvars@8 ; 檢測堆疊
.text:00463940 pop eax
// 內部
.text:004661e4 mov ecx, [ebx+4]
.text:004661e7 mov eax, [ebp+var_4]
.text:004661ea mov edx, [ecx+edi]
.text:004661ed cmp dword ptr [edx+eax-4], 0cccccccch
.text:004661f5 jnz short loc_466209
.text:004661f7 mov eax, [ecx+edi+4]
.text:004661fb add eax, edx
.text:004661fd mov edx, [ebp+var_4]
.text:00466200 cmp dword ptr [eax+edx], 0cccccccch
.text:00466207 jz short loc_466219
二、security_cookie
安全cookie 以前因為棧溢位的問題是在太嚴重,所以vs引進了security_cookie,主要用來防止棧溢位的。主要特徵:
// 外部 call上面有xor ***,***
.text:00463948 xor ecx, ebp
.text:0046394a call j_@__security_check_cookie@4 ; 安全cookie
// 內部對比cookie
.text:00466270 cmp ecx, ___security_cookie
.text:00466276 bnd jnz short $failure$4
.text:00466279 bnd retn
三、checkesp
檢測棧頂,同樣也有外部和內部特徵
// 外部 call 上面有** cmp ebp, esp
.text:00463955 cmp ebp, esp
.text:00463957 call j___rtc_checkesp ; 檢測esp
// 內部呼叫了乙個庫函式,第二個引數為0,函式外平衡棧,8個位元組。
.text:00466251 push 0 ; int
.text:00466253 push eax ; void *
.text:00466254 call j_?_rtc_failure@@yaxpaxh@z ; _rtc_failure(void *,int)
.text:00466259 add esp, 8
VC與VB的三大區別
這是我以前碰到的乙個面試題,當時我對這兩者都不甚熟悉,且發現面試官態度傲慢,就胡亂的說了兩個答案。突然間有想到這個問題,本著對自己負責任態度,得出的答案如下 1.兩者的設計出發點不一樣.vc更注重程式的效率,而vb則強調易用性 2.vc為編譯型,編譯後得到的程式可直接執行。vb為解釋型,編譯後得到的...
React內三種函式的寫法
寫法一 讓函式內部的this指向這個類的例項,它是用bind實現的,bind的第乙個引數表示context,就是this。寫法一class manageaddress extends react.component 切換位址型別,重新獲取位址列表 param key handlechangeaddr...
程式設計師的「三大死穴」
模糊了雙眼,哦,近視!這點不用過多解釋了吧,戴眼鏡的人太多了。看看現在中小學,無論是因為看書 看電視 看電腦,幾乎各個都是四眼神童,此後的人生中,要一直忍受各個眼鏡店的無情盤剝。想要保護眼睛,有哪些簡單的方法呢?最重要的,是每看 1 小時電腦,就去看看遠處的綠色植物 10 分鐘。但是請注意,這裡最重...