Pwn 學習第四課打卡!
原發(fā)帖者:hackbs 2020-7-12
0x00:堆棧內(nèi)存對齊
{
and esp,0xfffffff0
主流編譯器的編譯規(guī)則規(guī)定“程序訪問的地址必須向16字節(jié)對齊”,被16整數(shù)。
內(nèi)存對齊之后可以提高訪問的效率。
}
0x01:GDB簡單查看寄存器、內(nèi)存值命令
[
//查看寄存器eax的值
p/x $eax
x/x $eax
//查看內(nèi)存單元地址
p/x [$ebp-0x18]
p/x Address
x/x [$ebp-0x18]
p/x Address
//查看內(nèi)存數(shù)據(jù)
p/nfu addr=
n 代表要顯示內(nèi)存的長度
f 代表顯示的格式
u 表示從當前地址往后請求字節(jié)數(shù) 默認4Bytes
{
d:整數(shù)integer
s:字符串string
c:字符char
u:無符號整數(shù) unsigned integer
o:八進制格式顯示變量
x:十六進制格式
f: 浮點數(shù)格式float
}
{
b:表示一個字節(jié)顯示
h:表示雙字節(jié)顯示
默認:四個字節(jié)顯示
}
x/10cb 0x56555680
//標識顯示10個數(shù)據(jù),字符型,一個字節(jié)。
]
Cannary保護辨別,原理
原理:
{
在需要保護的開始地方,先把gs段:偏移0x14數(shù)據(jù)放入[ebp-0xc],最后函數(shù)結(jié)尾的地方把gs段:偏移0x14數(shù)據(jù)拿出來 和[ebp-0xc]進行異或比較,查看內(nèi)容是否有被修改,如果有被修改則 call _stack_chk_fail_local,無則正常運行。
}
辨別:
{
0x565555ae <main+17> mov eax, dword ptr gs:[0x14]
0x565555b4 <main+23> mov dword ptr [ebp - 0xc], eax
0x565555b7 <main+26> xor eax, eax
....
0x565555d8 <main+59> mov edx, dword ptr [ebp - 0xc]
0x565555db <main+62> xor edx, dword ptr gs:[0x14]
0x565555e2 <main+69> je main+76 <main+76>
}