新手一枚,如有錯誤(不足)請指正,謝謝!!
練習動調的文件
題目下載:點擊下載
參考資料:
IDA動態調試ELF
IDA載入,進入main函數,F5查看僞代碼
int __cdecl main(int argc, const char **argv, const char **envp)
{
time_t v3; // ebx
__pid_t v4; // eax
unsigned int v5; // ST18_4
unsigned int v6; // ST1C_4
char v7; // ST20_1
signed int i; // [esp+14h] [ebp-44h]
char s[40]; // [esp+24h] [ebp-34h]
unsigned int v11; // [esp+4Ch] [ebp-Ch]
v11 = __readgsdword(0x14u);
s[0] = 83;
s[1] = 69;
s[2] = 67;
s[3] = 67;
s[4] = 79;
s[5] = 78;
s[6] = 123;
s[7] = 87;
s[8] = 101;
s[9] = 108;
s[10] = 99;
s[11] = 111;
s[12] = 109;
s[13] = 101;
s[14] = 32;
s[15] = 116;
s[16] = 111;
s[17] = 32;
s[18] = 116;
s[19] = 104;
s[20] = 101;
s[21] = 32;
s[22] = 83;
s[23] = 69;
s[24] = 67;
s[25] = 67;
s[26] = 79;
s[27] = 78;
s[28] = 32;
s[29] = 50;
s[30] = 48;
s[31] = 49;
s[32] = 52;
s[33] = 32;
s[34] = 67;
s[35] = 84;
s[36] = 70;
s[37] = 33;
s[38] = 125;
s[39] = 0;
v3 = time(0);
v4 = getpid();
srand(v3 + v4);
for ( i = 0; i <= 99; ++i )
{
v5 = rand() % 40u;
v6 = rand() % 40u;
v7 = s[v5];
s[v5] = s[v6];
s[v6] = v7;
}
puts(s);
return 0;
}
將s[]數組按順序輸出,則爲flag,此時練習動調
隨便找行代碼,F2下斷點
動態調試步驟
在linux裏準備好linux_server64和待動調的文件
其中linux_server64在IDA目錄的dbgsrv文件夾
啓動linux_server64
代碼
./linux_server64
首次啓動時候要輸入代碼
chmod +x linux_server64
IDA中選擇調試器
對調試器進行配置
查看虛擬機IP命令
1. hostname -I
2. ifconfig
點擊OK
F9運行
動調時候提示錯誤
由於調試的文件爲ELF32,則應該用linux_server而不應該用linux_server64
重新配置
sudo apt-get install libstdc++6
sudo apt-get install lib32stdc++6
安裝這兩個東西
可以監聽了
報這個錯誤……
關閉linux防火牆
service iptables stop
這裏點確定
已經可以調試了
右上角有運行,點擊一下,然後就會斷在之前下的斷點那裏
然後F5可以查看僞代碼
這裏i的地址在棧上的ebp-44h處
EBP處的地址
可以算出變量i在棧上的地址
此時i等於4
每次F8單步可以執行一次代碼
部分快捷鍵
F2下斷點
F7,f8單步步入
p分析函數,把機器碼那些東西翻譯成函數
ctrl+s看見系統所有的模塊
ctrl+f搜索
單步調試注意右上角,寄存器變藍色表示被改了
在hex view-1按F2可以修改機器碼,再次按F2確定修改
f4移動到光標處
在寄存器窗口按E可以修改寄存器的值
在內存窗口f2可以修改內存的值