偶爾在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...