逆向學習記錄 Pwntool常用的資料處理方式

2021-09-23 17:00:14 字數 1923 閱讀 6171

偶爾在pwn的題目中,使用pwntool工具,由於不熟練,經常性遺忘,尤其是接收位址的時候,會卡在資料處理上,因此單獨起一篇文章,用來記錄日常用到的各種語句,後面如果發現了心得,可以繼續補充。

參考文章:

pwntools常見用法

pwntool 官方文件

send(payload) 傳送payload

sendline(payload) 傳送payload,並進行換行(末尾\n)

sendafter(some_string, payload) 接收到 some_string 後, 傳送你的 payload

sendlineafter(some_string, payload) 接收到 some_string 後, 傳送你的 payload(末尾\n)

# 後面兩個經常用,相當於recvuntil

recvn(n) 接受 n(數字) 字元

recvline(

) 接收一行輸出

recvlines(n) 接收 n(數字) 行輸出

recvuntil(some_string) 接收到 some_string 為止

##如果接受到的是位址,可以使用recv之後,直接進行int強轉

data = p.recv(

"10"

)libc_start_main_addr =

int(data,16)

-247

##如果接受到的是位址,但是是反向的\x10\x00\x40,可以使用recv之後,直接進行int強轉

data = p.recv(

"10"

)libc.address =

int(data[:6

][::

-1].encode(

"hex"),

16)- libc.symbols[

"read"

]libc.address = u64(data[:6

].ljust(8,

"\x00"))

- libc.symbols[

"read"

]#這兩種寫法都行,其中[::-1]的意思是逆序取字串,可以使用u64 強制轉換

p32/p64: 打包乙個整數,分別打包為32或64位,主要是傳送的時候需要打包

u32/u64: 解包乙個字串,得到整數,接收的時候需要解包

symbols[

'a_function'

] 找到 a_function 的位址

##libc.symbols['read']

got[

'a_function'

] 找到 a_function的 got

##elf.got["read"]

plt[

'a_function'

] 找到 a_function 的 plt

##elf.plt["read"]

next

(e.search(

"some_characters"

)) 找到包含 some_characters(字串,彙編**或者某個數值)的位址

##libc.next(e.search("/bin/sh"))

#

context.log_level =

'debug'

context(arch=

'amd64'

, os=

'linux'

)context(os=

'linux'

, arch=

'amd64'

, log_level=

'debug'

)

gdb.attach(process)

逆向學習 BUUCTF xor

int cdecl main int argc,const char ar const char envp 由此,我們知道,在global存放的字串是執行過上述演算法後得到的字串,所以,將上面的字串反過來處理也就能得到flag了。str1 f 0x0a k 0x0c w o 0x11 x 0x0d ...

逆向學習法

第一次聽說逆向學習法是在上大學時,一次上網看英語學習的 有人提出了逆向學習英語的方法宗旨就是聽寫,也就是直接聽錄音,然後寫下錄音中的句子,之後再學習句子。到現在自己也一直在學習,更在不斷的探尋學習的最佳方法,現在回望自己的學習之路,總結了下發現很多的學習效果不明顯,效率低下,因為都是先去看書學習一門...

IOS逆向學習 Cycipt

cycript 進入cycript語言程式設計環境 ctrl d 退出除錯環境 ctrl c 取消輸入 定義變數 var 變數名 變數值 objectivec.classes 已載入的所有oc類 檢視物件的所有成員變數 物件 遞迴列印view的所有子控制項 跟lldb一樣的函式 view.recur...