《加密與解密》筆記四(二)

繼續基礎部分的記錄

3:

全局變量:

全局變量一般在調用的時候是直接以
mov dword ptr [********],0x….
來表示賦值的,也就是說直接對全局變量的地址進行解引用操作,在書中有一個圖:
這裏寫圖片描述
注意紅色框部分,這裏實際上是初始位置和大小,實際上這個是加上了00400000段以後的結果(圖片中全局變量的地址)

數組:

實際上數組非常類似於入棧操作,只不過用了sub(減法)操作來代替,比如:

#include<stdio.h>
int _stdcall a(int b, int c,int d)
{
    _asm
    {
        xor eax,eax
        add eax,[ebp+8]
        add eax,[ebp+0xc]
        add eax,[ebp+0x10]
    }
}
int main()
{
    int b[] = { 1,2,3 };
    _asm 
    {
        push eax
    }
    int c = a(b[0], b[1], b[2]);
    _asm
    {
        pop eax
    }
    printf("%d", c);
    return 0;
}

我們其實是可以看見,在定義b的那一行語句對應的彙編大概是:
mov dword ptr [b],1 //ebp-14h
mov dword ptr [ebp-10h],2
mov dword ptr [ebp-0Ch],3
如果爲全局的話那麼大概就是:

int main()
{
    static int a[] = { 1,2,3 };
    int j = 0;
00411D2E  mov         dword ptr [j],0  
    for (int i = 0; i < 3; ++i)
00411D35  mov         dword ptr [ebp-14h],0  
00411D3C  jmp         main+37h (0411D47h)  
00411D3E  mov         eax,dword ptr [ebp-14h]  
00411D41  add         eax,1  
00411D44  mov         dword ptr [ebp-14h],eax  
00411D47  cmp         dword ptr [ebp-14h],3  
00411D4B  jge         main+4Fh (0411D5Fh)  
        j += a[i];
00411D4D  mov         eax,dword ptr [ebp-14h]  
00411D50  mov         ecx,dword ptr [j]  
00411D53  add         ecx,dword ptr [eax*4+418034h]  
00411D5A  mov         dword ptr [j],ecx  
00411D5D  jmp         main+2Eh (0411D3Eh)  
}

發現add那一行(00411D53)的解引用方式.

虛函數:

虛函數時C++面對對象最核心的部分,只要一個類中出現了虛函數那麼它的第一個4字節大小的數據就是一個虛函數表指針。
這裏又要運用到我以前學C++時的筆記(學習資料)裏面的一個圖了:
這裏寫圖片描述
(圖是自己分析出來的,所以如有錯誤歡迎指正)
還有一個更細緻的圖:
這裏寫圖片描述
這個內容大概就是虛函數表內的情況
但是我們只需要瞭解:
對應虛函數表指針解一次引用則是一個函數指針,兩次引用則到了函數位置,所以有書上的一個彙編描述:
這裏寫圖片描述
第一次是將虛函數表的指針給eax
然後是將虛函數表指針給esi保存
然後對虛函數表解一次引用給eax得到第一個虛函數的指針
然後對虛函數的指針再解一次引就相當於call了一個函數(跳轉到地址,並且將下一行的地址入棧先)

4:

if else switch case

這幾個實際上在逆向的時候遇到的就是一處比較(
一般爲cmp,或是test,
cmp的話就是將兩者的值相減,然後判斷0標誌寄存器位是否位0(jnz,jz),
test就是兩者執行與運算然後判斷標誌寄存器是否爲0,
但是有的時候可能會用到dec,這個就是將後面的值減一,
判斷是否爲0的方法如 :(case 1,2->dec eax jz … dec eax jz…就相當於第一次減一爲0測試跳轉第二次再減1測試跳轉)
或者是一些跟高級的類似於跳轉表: jmp dword ptr [4*eax + ……],
這個只是適用於執行一些特定的如
這裏寫圖片描述
)然後執行測試跳轉

發佈了46 篇原創文章 · 獲贊 24 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章