關于GDB的簡單使用
題目鏈接:simple-check-100
GDB安裝教程(以及peda插件)我的另一篇文章
注:本博文記錄壓縮包中ELF檔案flag的獲取程序,exe檔案flag是亂碼,具體程序就不給大家演示了,著重分享GDB的內容,
GDB的實作原理:其他師傅的文章,很詳細
step 1 獲取資訊
我們拿到了題目,老樣子獲取資訊,

step 2 放入IDA分析一下
int __cdecl main(int argc, const char **argv, const char **envp)
{
void *v3; // rsp
const char **v5; // [rsp+0h] [rbp-60h]
int v6; // [rsp+Ch] [rbp-54h]
char v7; // [rsp+1Ch] [rbp-44h]
char v8; // [rsp+1Dh] [rbp-43h]
char v9; // [rsp+1Eh] [rbp-42h]
char v10; // [rsp+1Fh] [rbp-41h]
char v11; // [rsp+20h] [rbp-40h]
char v12; // [rsp+21h] [rbp-3Fh]
char v13; // [rsp+22h] [rbp-3Eh]
char v14; // [rsp+23h] [rbp-3Dh]
char v15; // [rsp+24h] [rbp-3Ch]
char v16; // [rsp+25h] [rbp-3Bh]
char v17; // [rsp+26h] [rbp-3Ah]
char v18; // [rsp+27h] [rbp-39h]
char v19; // [rsp+28h] [rbp-38h]
char v20; // [rsp+29h] [rbp-37h]
char v21; // [rsp+2Ah] [rbp-36h]
char v22; // [rsp+2Bh] [rbp-35h]
char v23; // [rsp+2Ch] [rbp-34h]
char v24; // [rsp+2Dh] [rbp-33h]
char v25; // [rsp+2Eh] [rbp-32h]
char v26; // [rsp+2Fh] [rbp-31h]
char v27; // [rsp+30h] [rbp-30h]
char v28; // [rsp+31h] [rbp-2Fh]
char v29; // [rsp+32h] [rbp-2Eh]
char v30; // [rsp+33h] [rbp-2Dh]
char v31; // [rsp+34h] [rbp-2Ch]
char v32; // [rsp+35h] [rbp-2Bh]
char v33; // [rsp+36h] [rbp-2Ah]
char v34; // [rsp+37h] [rbp-29h]
__int64 v35; // [rsp+38h] [rbp-28h]
const char ***v36; // [rsp+40h] [rbp-20h]
unsigned __int64 v37; // [rsp+48h] [rbp-18h]
v6 = argc;
v5 = argv;
v37 = __readfsqword(0x28u);
v7 = 84;
v8 = -56;
v9 = 126;
v10 = -29;
v11 = 100;
v12 = -57;
v13 = 22;
v14 = -102;
v15 = -51;
v16 = 17;
v17 = 101;
v18 = 50;
v19 = 45;
v20 = -29;
v21 = -45;
v22 = 67;
v23 = -110;
v24 = -87;
v25 = -99;
v26 = -46;
v27 = -26;
v28 = 109;
v29 = 44;
v30 = -45;
v31 = -74;
v32 = -67;
v33 = -2;
v34 = 106;
v35 = 19LL;
v3 = alloca(32LL);
v36 = &v5;
printf("Key: ", argv, 3LL, 16LL, 20LL, 0LL, argv);
__isoc99_scanf("%s", v36);
if ( (unsigned int)check_key(v36) )
interesting_function(&v7);
else
puts("Wrong");
return 0;
}
我們可以得出check_key是核心函式,只要使得if ( (unsigned int)check_key(v36) )成功即可,這樣我們就可以進入GDB進行除錯了,
step 3 進入GDB進行動態除錯
GDB的常用命令如下:

peda的常用命令如下:

現在來看我們的程式,需要輸入指令如下:
gdb
file task9_x86_64_46d01fe312d35ecf69c4ff8ab8ace75d080891dc
b main
r

我們單步步過直到check_key函式,單步步過的指令是n
step 4 跳過check_key函式
把test eax,eax改為真即可,也就是把eax改為1,
set $eax=1

這樣我們就得到了這個題目的flag:flag_is_you_know_cracking!!!
希望大家可以有所識訓!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256326.html
標籤:其他
