前言 我認為要從0開始學習Pwn是一件很難的事情,就算想要做簡單的Stack buffer overflow return 到程式碼當中的 system(&qu...
組合語言x86 組合語言分很多種,常見的有x86和ARM等,這邊介紹這次實作以及常用的指令,當然除了介紹的這些以外還會有很多沒有介紹到的,比如組合語言中的假指令...
這次的Reverse會用兩種作業系統和反編譯工具來操作,這邊先介紹GDB的基本操作,這些指令都有縮寫,比如disassemble可以寫成disas,但這邊先介紹...
接下來是Windows的IDA使用方式,在這次的操作中,使用IDA Free就可以達成所需要的目的了。一開始將程式丟進去之後,會是一個方塊狀的分析圖。 如果有條...
終於要準備開始逆向了,首先先用C語言寫兩個小程式在兩個系統中的HelloWorld的C語言程式簡單來說就是Helloworld字串會跑6次之後結束。 把它送到I...
接著就是最重要的Stack部分,兩邊都是做一樣的事情。IDA顯示的30h等同於0x30,同樣的Ubuntu的0x10等同10h。 這邊開始就是程式在做Stack...
程式一開始可以在IDA看到程式Call了一個__main函數,但在Ubuntu的GDB中,程式則直接開始執行其他運算,這是因為IDA這邊會進行初始化的動作,而不...
這次要來說明Hex在存放時為什麼是顛倒的。 這是記憶體排放順序的問題,目前常用的記憶體排放順序主要有兩種,大端序(Big Endian)和小端序(Little...
接下來是將暫存器內的值放入Stack當中,也就是放入RBP的相對位址當中。 在Windows和Ubuntu的環境底下,下一行做的事情是一樣的,將RAX的值放入...
再來就是做迴圈內的事了,兩邊都做了Jump的動作。 GDB比較快知道,跳到main+58的位址,因此我們直接看到+58的位址,簡單來說就是進行比較,是剛剛放入的...