国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Windows逆向安全(一)之基礎(chǔ)知識(shí)(八)

這篇具有很好參考價(jià)值的文章主要介紹了Windows逆向安全(一)之基礎(chǔ)知識(shí)(八)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

if else嵌套

這次來(lái)研究if else嵌套在匯編中的表現(xiàn)形式,本次以獲取三個(gè)數(shù)中最大的數(shù)這個(gè)函數(shù)為例子,分析if else的匯編形式

求三個(gè)數(shù)中的最大值

首先貼上代碼:

#include "stdafx.h"

int result=0;
int getMax(int i,int j,int k){
        if(i>j){
                if(i>k){
                        return i;
                }else{
                        return k;
                }

        }else{
                if(j>k){
                        return j;
                }else{
                        return k;
                }
        }
}

int main(int argc, char* argv[])
{
        result=getMax(1,2,3);
        printf("%d\n",result);
        result=getMax(1,3,2);
        printf("%d\n",result);
        result=getMax(2,1,3);
        printf("%d\n",result);
        result=getMax(2,3,1);
        printf("%d\n",result);
        result=getMax(3,1,2);
        printf("%d\n",result);
        result=getMax(3,2,1);
        printf("%d\n",result);
        return 0;
}

先驗(yàn)證執(zhí)行的結(jié)果是正確的:

Windows逆向安全(一)之基礎(chǔ)知識(shí)(八),Windows逆向,windows,安全,算法,網(wǎng)絡(luò)安全

確認(rèn)可以函數(shù)是可以取出三個(gè)數(shù)的最大值的,于是開(kāi)始分析該函數(shù)

為方便觀看,將多余的驗(yàn)證刪去,直接改為

getMax(1,2,3);

Windows逆向安全(一)之基礎(chǔ)知識(shí)(八),Windows逆向,windows,安全,算法,網(wǎng)絡(luò)安全

匯編代碼

然后我們觀察匯編代碼

函數(shù)外部

28:       getMax(1,2,3);
0040D7C8   push        3
0040D7CA   push        2
0040D7CC   push        1
0040D7CE   call        @ILT+10(func) (0040100f)
0040D7D3   add         esp,0Ch

依次壓入?yún)?shù),然后調(diào)用函數(shù),最后再堆棧外平衡,重點(diǎn)在函數(shù)內(nèi)部,進(jìn)去看看

函數(shù)內(nèi)部

7:    int getMax(int i,int j,int k){
0040D760   push        ebp
0040D761   mov         ebp,esp
0040D763   sub         esp,40h
0040D766   push        ebx
0040D767   push        esi
0040D768   push        edi
0040D769   lea         edi,[ebp-40h]
0040D76C   mov         ecx,10h
0040D771   mov         eax,0CCCCCCCCh
0040D776   rep stos    dword ptr [edi]
8:        if(i>j){
0040D778   mov         eax,dword ptr [ebp+8]
0040D77B   cmp         eax,dword ptr [ebp+0Ch]
0040D77E   jle         getMax+32h (0040d792)
9:            if(i>k){
0040D780   mov         ecx,dword ptr [ebp+8]
0040D783   cmp         ecx,dword ptr [ebp+10h]
0040D786   jle         getMax+2Dh (0040d78d)
10:               return i;
0040D788   mov         eax,dword ptr [ebp+8]
0040D78B   jmp         getMax+42h (0040d7a2)
11:           }else{
12:               return k;
0040D78D   mov         eax,dword ptr [ebp+10h]
0040D790   jmp         getMax+42h (0040d7a2)
13:           }
14:
15:       }else{
16:           if(j>k){
0040D792   mov         edx,dword ptr [ebp+0Ch]
0040D795   cmp         edx,dword ptr [ebp+10h]
0040D798   jle         getMax+3Fh (0040d79f)
17:               return j;
0040D79A   mov         eax,dword ptr [ebp+0Ch]
0040D79D   jmp         getMax+42h (0040d7a2)
18:           }else{
19:               return k;
0040D79F   mov         eax,dword ptr [ebp+10h]
20:           }
21:       }
22:   }
0040D7A2   pop         edi
0040D7A3   pop         esi
0040D7A4   pop         ebx
0040D7A5   mov         esp,ebp
0040D7A7   pop         ebp
0040D7A8   ret

函數(shù)內(nèi)部有不少代碼是用來(lái)保護(hù)現(xiàn)場(chǎng) 初始化堆棧 恢復(fù)現(xiàn)場(chǎng)的,這里將其過(guò)濾掉,看判斷語(yǔ)句:

判斷語(yǔ)句

8:        if(i>j){
0040D778   mov         eax,dword ptr [ebp+8]
0040D77B   cmp         eax,dword ptr [ebp+0Ch]
0040D77E   jle         getMax+32h (0040d792)
9:            if(i>k){
0040D780   mov         ecx,dword ptr [ebp+8]
0040D783   cmp         ecx,dword ptr [ebp+10h]
0040D786   jle         getMax+2Dh (0040d78d)
10:               return i;
0040D788   mov         eax,dword ptr [ebp+8]
0040D78B   jmp         getMax+42h (0040d7a2)
11:           }else{
12:               return k;
0040D78D   mov         eax,dword ptr [ebp+10h]
0040D790   jmp         getMax+42h (0040d7a2)
13:           }
14:
15:       }else{
16:           if(j>k){
0040D792   mov         edx,dword ptr [ebp+0Ch]
0040D795   cmp         edx,dword ptr [ebp+10h]
0040D798   jle         getMax+3Fh (0040d79f)
17:               return j;
0040D79A   mov         eax,dword ptr [ebp+0Ch]
0040D79D   jmp         getMax+42h (0040d7a2)
18:           }else{
19:               return k;
0040D79F   mov         eax,dword ptr [ebp+10h]
20:           }
21:       }
22:   }

參數(shù)分析

Windows逆向安全(一)之基礎(chǔ)知識(shí)(八),Windows逆向,windows,安全,算法,網(wǎng)絡(luò)安全

i>j

先來(lái)看看i>j的反匯編語(yǔ)句

0040D778   mov         eax,dword ptr [ebp+8]
0040D77B   cmp         eax,dword ptr [ebp+0Ch]
0040D77E   jle         getMax+32h (0040d792)

比較第一個(gè)參數(shù)和第二個(gè)參數(shù)

jle:jump less equal,小于等于則跳轉(zhuǎn)(有符號(hào)數(shù))

跳轉(zhuǎn)地址:0040d792

16:           if(j>k){
0040D792   mov         edx,dword ptr [ebp+0Ch]

i>k

9:            if(i>k){
0040D780   mov         ecx,dword ptr [ebp+8]
0040D783   cmp         ecx,dword ptr [ebp+10h]
0040D786   jle         getMax+2Dh (0040d78d)

比較第一個(gè)和第三個(gè)參數(shù)

jle:jump less equal,小于等于則跳轉(zhuǎn)(有符號(hào)數(shù))

跳轉(zhuǎn)地址:0040d78d

11:           }else{
12:               return k;
0040D78D   mov         eax,dword ptr [ebp+10h]
0040D790   jmp         getMax+42h (0040d7a2)

可以分析出,如果第一個(gè)參數(shù)小于等于第三個(gè)參數(shù)則跳轉(zhuǎn)到0040D78D,并將第三個(gè)參數(shù)賦值給eax作為返回值,這條線路為(k>i>j)

否則執(zhí)行返回指令,將第一個(gè)參數(shù)賦給eax作為返回值,這條線路為(i>j且i>k)

10:               return i;
0040D788   mov         eax,dword ptr [ebp+8]
0040D78B   jmp         getMax+42h (0040d7a2)

j>k

16:           if(j>k){
0040D792   mov         edx,dword ptr [ebp+0Ch]
0040D795   cmp         edx,dword ptr [ebp+10h]
0040D798   jle         getMax+3Fh (0040d79f)

比較第二個(gè)和第三個(gè)參數(shù)

jle:jump less equal,小于等于則跳轉(zhuǎn)(有符號(hào)數(shù))

跳轉(zhuǎn)地址:0040d79f

18:           }else{
19:               return k;
0040D79F   mov         eax,dword ptr [ebp+10h]

可以分析出,如果第二個(gè)參數(shù)小于等于第三個(gè)參數(shù)則跳轉(zhuǎn)到0040D79F,并將第三個(gè)參數(shù)賦值給eax作為返回值,這條線路為(i<=j<=k)

否則返回執(zhí)行返回命令,將第二個(gè)參數(shù)賦值給eax作為返回值,這條線路為(i<=j且k<=j)

17:               return j;
0040D79A   mov         eax,dword ptr [ebp+0Ch]
0040D79D   jmp         getMax+42h (0040d7a2)

總結(jié)

不難發(fā)現(xiàn),三個(gè)數(shù)求最大值,只需兩兩比較就可以得出結(jié)果

分析if else的關(guān)鍵在于觀察涉及的參數(shù)和jcc語(yǔ)句

此案例中就是直接采取了cmp 外加 jle來(lái)進(jìn)行分支的選擇和跳轉(zhuǎn)

因?yàn)椴环蠗l件的才要跳轉(zhuǎn)走,所以在條件比較中,是大于的比較如i>j,所使用的匯編為jle 小于等于的比較

不按套路比較

此次案例并不能代表所有情況,實(shí)際分析要具體看情況來(lái)采取分析,有的程序可能就是不按套路出牌,先看看按套路出牌的程序,然后我們自己來(lái)模擬個(gè)不按套路的

正常套路

拿兩個(gè)數(shù)的比較為例

#include "stdafx.h"
int getMax2(int i,int j){
        if(i>j){
                return i;
        }else{
                return j;
        }
}
int main(int argc, char* argv[])
{
        getMax2(1,2);
        return 0;
}

先看一般的匯編代碼:

9:        if(i>j){
0040D778   mov         eax,dword ptr [ebp+8]
0040D77B   cmp         eax,dword ptr [ebp+0Ch]
0040D77E   jle         getMax2+25h (0040d785)
10:           return i;
0040D780   mov         eax,dword ptr [ebp+8]
0040D783   jmp         getMax2+28h (0040d788)
11:       }else{
12:           return j;
0040D785   mov         eax,dword ptr [ebp+0Ch]
13:       }
14:   }

依舊是采用cmp 和 jle來(lái)進(jìn)行判斷,和套路一致

不按套路

完整代碼

#include "stdafx.h"
int __declspec(naked) myGetMax(int i,int j){
        __asm{                                
                                //保留調(diào)用前堆棧
                push ebp
                //提升堆棧
                mov ebp,esp
                sub esp,0x40
                //保護(hù)現(xiàn)場(chǎng)
                push ebx
                push esi
                push edi
                //初始化提升的堆棧,填充緩沖區(qū)
                mov eax,0xCCCCCCCC
                mov ecx,0x10
                lea edi,dword ptr ds:[ebp-0x40]
                rep stosd
                //函數(shù)核心功能

                //取出參數(shù)
                mov eax,dword ptr ds:[ebp+8]
                //比較參數(shù)
                cmp eax,[ebp+0xC]
                jge _ret
                mov eax,[ebp+0xC]
_ret:
                //恢復(fù)現(xiàn)場(chǎng)
                pop edi
                pop esi
                pop ebx
                //降低堆棧
                mov esp,ebp
                pop ebp                
                //返回
                ret 
        }
}
int main(int argc, char* argv[])
{

        int result=myGetMax(1,2);

        printf("%d\n",result);

        result=myGetMax(4,3);

        printf("%d\n",result);

        return 0;
}

功能代碼分析

這里截取出我們自己實(shí)現(xiàn)比較的那段代碼

                //函數(shù)核心功能
                //取出參數(shù)
                mov eax,dword ptr ds:[ebp+8]
                //比較參數(shù)
                cmp eax,[ebp+0xC]
               jge _ret
               mov eax,[ebp+0xC]
_ret:
                //恢復(fù)現(xiàn)場(chǎng)
                pop edi
                pop esi
                pop ebx
                //降低堆棧
                mov esp,ebp
                pop ebp                
                //返回
                ret 

首先我們這里將第一個(gè)參數(shù)賦值給eax

然后比較eax和第二個(gè)參數(shù),也就是比較第一個(gè)參數(shù)和第二個(gè)參數(shù)

這邊使用的就不是jle而是jge了

jge:jump greater equal,即大于等于則跳轉(zhuǎn)

前面已經(jīng)將第一個(gè)參數(shù)賦值給了eax,而eax又是作為返回值來(lái)傳遞的

當(dāng)?shù)谝粋€(gè)參數(shù)大于等于第二個(gè)參數(shù)時(shí),就可以直接返回了

如果不是則不跳轉(zhuǎn),執(zhí)行下面的將第二個(gè)參數(shù)賦值給eax作為返回值

這里注意到我在匯編中自己定義了一個(gè)段:_ret,來(lái)作為跳轉(zhuǎn)的地址來(lái)使用

最后測(cè)試一下結(jié)果:

Windows逆向安全(一)之基礎(chǔ)知識(shí)(八),Windows逆向,windows,安全,算法,網(wǎng)絡(luò)安全

可以正確得到兩個(gè)數(shù)中的最大值文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-530063.html

到了這里,關(guān)于Windows逆向安全(一)之基礎(chǔ)知識(shí)(八)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Windows逆向安全(一)之基礎(chǔ)知識(shí)(一)

    Windows逆向安全(一)之基礎(chǔ)知識(shí)(一)

    前言 逆向是一種新型的思維模式也是軟件開(kāi)發(fā)領(lǐng)域中極為重要的技術(shù),涵蓋各種維度去深挖軟件架構(gòu)的本質(zhì)和操作系統(tǒng)原理,學(xué)習(xí)逆向后可以在各領(lǐng)域中發(fā)揮至關(guān)重要的作用,其中包括黑灰色,安全開(kāi)發(fā),客戶端安全,物聯(lián)網(wǎng),車(chē)聯(lián)網(wǎng),游戲安全,紅隊(duì)免殺等行業(yè)中繪制出更

    2024年02月07日
    瀏覽(19)
  • Windows安全基礎(chǔ):認(rèn)證基礎(chǔ)知識(shí)

    Windows安全基礎(chǔ):認(rèn)證基礎(chǔ)知識(shí)

    目錄 Windows憑據(jù) Windows訪問(wèn)控制模型 訪問(wèn)令牌: 安全標(biāo)識(shí)符(SID): 安全描述符: 令牌安全防御 1、禁止域管理員異機(jī)登錄 2、開(kāi)啟“審核進(jìn)程創(chuàng)建”策略 SSPI(Security Support Provider Interface ,安全支持提供程序接口):是windows操作系統(tǒng)中用于執(zhí)行各種安全相關(guān)操作的公用API,

    2024年02月02日
    瀏覽(23)
  • windows pwn 基礎(chǔ)知識(shí)

    windows pwn 基礎(chǔ)知識(shí)

    winchecksec winchecksec 是 windows 版的 checksec ,不過(guò)有時(shí)候結(jié)果不太準(zhǔn)確。 checksec(x64dbg) x64dbg 的插件 checksec 檢查效果比較準(zhǔn)確,并且可以連同加載的 dll 一起檢測(cè)。 將 release 的插件按 32 和 64 位分別放到 x32dbg 和 x64dbg 的 plugins 目錄,如果找不到 plugins 目錄則打開(kāi)調(diào)試器然后關(guān)閉

    2024年02月15日
    瀏覽(22)
  • Windows Api 學(xué)習(xí)筆記 1——基礎(chǔ)知識(shí)(上)

    Windows Api 學(xué)習(xí)筆記 1——基礎(chǔ)知識(shí)(上)

    推薦閱讀《深入淺出:Windows Api 程序設(shè)計(jì)》。《深入淺出:Windows Api 程序設(shè)計(jì)》是 王端明 先生的著作,是2022年人民郵電出版社出版的圖書(shū)。 Microsoft Windows是美國(guó)微軟公司開(kāi)發(fā)的一套操作系統(tǒng)。自1985年問(wèn)世以來(lái),隨著軟硬件的升級(jí),Microsoft Windows不斷迭代更新,變得更加人性

    2024年02月08日
    瀏覽(28)
  • MySQL基礎(chǔ)知識(shí)(一)-超詳細(xì)Windows系統(tǒng)安裝MySQL詳細(xì)教程

    MySQL基礎(chǔ)知識(shí)(一)-超詳細(xì)Windows系統(tǒng)安裝MySQL詳細(xì)教程

    1.簡(jiǎn)介 原計(jì)劃,今天這篇想要給小伙伴們講解一下python操作mysql數(shù)據(jù)庫(kù),但是由于近期換了一臺(tái)新的電腦,所以一看mysql數(shù)據(jù)庫(kù)都沒(méi)安裝,所有才有了這篇文章。盡管網(wǎng)上不乏此類(lèi)型的文章,但是剛好自己要安裝,所以就總結(jié)和分享一下下了 這篇博文看起來(lái)可能有點(diǎn)長(zhǎng),那是

    2024年02月13日
    瀏覽(15)
  • 安全算法(一):安全技術(shù)、加密的基礎(chǔ)知識(shí)、哈希函數(shù)的簡(jiǎn)單介紹

    安全算法(一):安全技術(shù)、加密的基礎(chǔ)知識(shí)、哈希函數(shù)的簡(jiǎn)單介紹

    通過(guò)互聯(lián)網(wǎng)交換數(shù)據(jù)時(shí),數(shù)據(jù)要經(jīng)過(guò)各種各樣的網(wǎng)絡(luò)和設(shè)備才能傳到對(duì)方那里。數(shù)據(jù)在傳輸過(guò)程中有可能會(huì)經(jīng)過(guò)某些惡意用戶的設(shè)備,從而導(dǎo)致內(nèi)容被盜取。 因此,要想安全地使用互聯(lián)網(wǎng),安全技術(shù)是不可或缺的。 傳輸數(shù)據(jù)時(shí)的四個(gè)問(wèn)題:竊聽(tīng)、假冒、篡改、事后否認(rèn) 竊聽(tīng)

    2024年02月04日
    瀏覽(31)
  • 安全測(cè)試基礎(chǔ)知識(shí)

    軟件安全測(cè)試是評(píng)估和測(cè)試系統(tǒng)以發(fā)現(xiàn)系統(tǒng)及其數(shù)據(jù)的安全風(fēng)險(xiǎn)和漏洞的過(guò)程。沒(méi)有通用術(shù)語(yǔ),但出于我們的目的,我們將評(píng)估定義為分析和發(fā)現(xiàn)漏洞,而不嘗試實(shí)際利用這些漏洞。我們將測(cè)試定義為發(fā)現(xiàn)和嘗試?yán)寐┒础?安全測(cè)試通常根據(jù)要測(cè)試的漏洞類(lèi)型或正在執(zhí)行的測(cè)

    2024年02月11日
    瀏覽(26)
  • 安全 --- 內(nèi)網(wǎng)基礎(chǔ)知識(shí)(01)

    安全 --- 內(nèi)網(wǎng)基礎(chǔ)知識(shí)(01)

    (1)概念 內(nèi)網(wǎng)也稱(chēng)局域網(wǎng)(Local Area Network,LAN)是指在某一工作區(qū)域內(nèi)由多臺(tái)計(jì)算機(jī)互聯(lián)形成的計(jì)算機(jī)組,一般是方圓幾千米內(nèi)。局域網(wǎng)可實(shí)現(xiàn)文件管理、應(yīng)用軟件共享、打印機(jī)共享、工作內(nèi)的歷程安排、電子郵件和傳真通信服務(wù)等功能。 內(nèi)網(wǎng)為封閉性網(wǎng)絡(luò),一定程度上能

    2024年02月10日
    瀏覽(55)
  • 【網(wǎng)絡(luò)安全】有趣的基礎(chǔ)知識(shí)

    【網(wǎng)絡(luò)安全】有趣的基礎(chǔ)知識(shí)

    逐條記錄網(wǎng)絡(luò)安全學(xué)習(xí)中有趣的內(nèi)容和知識(shí)。 CNNIC(中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心)是中國(guó)國(guó)家域名.cn的管理組織。 中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心于1997年6月3日組建,現(xiàn)為工業(yè)和信息化部 直屬事業(yè)單位 ,行使國(guó)家互聯(lián)網(wǎng)絡(luò)信息中心職責(zé)。 CNNIC是亞太互聯(lián)網(wǎng)絡(luò)信息中心(APNIC)的國(guó)家級(jí)I

    2024年02月03日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包