小白最近做了一些reverse題目,整理整理
import base64
defencode
(message)
: s =
''for i in message:
x =ord(i)^32
x = x +
16 s +=
chr(x)
return base64.b64encode(s)
correct =
'xlnkvmtui1mgxwbzxcfeky+aaxnt'
flag =
''print
'input flag:'
flag =
raw_input()
if encode(flag)
== correct:
print
'correct'
else
:print
'wrong'
import base64
correct =
'xlnkvmtui1mgxwbzxcfeky+aaxnt'
s=''
correct_d=base64.b64decode(correct)
for i in correct_d:
x=ord
(i)-
16 x=x^
32 s+=
chr(x)
print s
執行程式就可得到flag
在ida中開啟程式,將main函式f5檢視偽** sub_4007c0()函式為失敗
根據**知道輸入的password長度應該大於18,即v3>strlen(s)
根據這個知道s應該是v7與v8的異或
對於v7,ll是長長整型,v7要轉換為16進製制然後在轉換為字串,而且字元是小端序,所以把得到的字元翻轉然後和v8的每一位進行異或
mk_fp是乙個巨集。功能是做段基址加上偏移位址的運算,也就是取實際位址。簡單分析程式知道while迴圈計算的應該就是flag,檢視t的值
說明t存放的應該就是flag
我們用python**編寫迴圈過程,輸出得到flag
s=
'c61b68366edeb7bdce3c6820314b7498'
v6=0
v3=0
t='sharifctf'
t=list
(t)//在python中,數字,字串和元組都是不可變物件。列表是可變物件
while v6<
len(s):if
(v6&1)
: v3=
1else
: v3=-1
t[v6+10]
=chr
(ord
(s[v6]
)+v3)
v6 +=1t=
"".join(t)
print t
reverse 練習3 攻防世界 hackme
拿到題,查殼後用ida64開啟。老樣子查詢字串,找到 點選進入,找到交叉函式f5反編譯,由下到上分析,如果要輸出 即v18不為0,即v13 v16 v12,v13可以查到資料,不是flag,v16是整型,也不會是flag,所以猜測v12是我們要求的flag,v12 i v13 i v16就可以求出v...
攻防世界新手區題目wp
雖然是菜雞題目,但俺依然不太會做 上網看了一下wp,就是ida開啟,然後shift f12,搜尋flag ord 的作用是返回字元相應的ascii十進位制編碼,比如ord a 會返回97 另外如果a b ca oplus b c a b c,可以推出來a b b a 0 aa oplus b opl...
攻防世界題目greeting 150
1.printf 函式的格式化漏洞。2.可以通過修改.fini array的內容使得main函式一直迴圈執行。3.printf 格式化修飾符中,hn為word 字 hhn為byte 位元組 n為dword 雙字 lln為qword 四字 1.首先通過printf 函式得到輸入的相偏移。2.得到偏移為...