XCTF-Reverse:logmein
題目地址:https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=0&id=5078&page=1
發(fā)現(xiàn)程序是一個ELF文件,將其放入Linux環(huán)境中進(jìn)行分析,發(fā)現(xiàn)程序是64位的
直接拖進(jìn)ida64
step1、從main函數(shù)開始分析,使用F5查看偽代碼
題目說是涉及算法逆向,應(yīng)該是通過一系列比較可以得到正確的結(jié)果
補:這里(char)(((_BYTE )&v7 + i % v6) ^ v8[i])
BYTE 經(jīng)查詢,是相當(dāng)于unsigned char
然后可以得到一個二進(jìn)制碼與后面v8[i]進(jìn)行異或運算,然后轉(zhuǎn)換為char類型依次比較
所以把每一個比較的字符存儲進(jìn)行輸出就可以得到flag
證明輸入的字符串就是flag
發(fā)現(xiàn)算法的關(guān)鍵在于 V6、V7、V8 的異或處理,通過分析得到如下代碼:
key1=":\"AL_RT^L*.?+6/46" #v8 key2="harambe" #v7 key3=7 #v6 flag='' for i in range(0,len(key1)):flag += chr(ord(key1[i])^ord(key2[i%key3])) print(flag)
RC3-2016-XORISGUD
ord():是將字符串轉(zhuǎn)換為ascii格式,為了方便運算
chr():是將ascii轉(zhuǎn)換為字符串
至于為什么要倒序使用harambe也是看了大佬的WP才知道的 [●′?`●] ~~
x86系列的CPU都是以小端序儲存數(shù)據(jù)的,即低位字節(jié)存入低地址,高位字節(jié)存入高地址,所以正確的字符串應(yīng)該反過來
總結(jié)
以上是生活随笔為你收集整理的XCTF-Reverse:logmein的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明显调用的表达式前的括号必须具有函数类型
- 下一篇: git rebase --skip_可冒