REVERSE-PRACTICE-BUUCTF-29
- [FlareOn1]Shellolololol
- [CFI-CTF 2018]powerPacked
- [INSHack2018]Tricky-Part2
- [CFI-CTF 2018]Automated Reversing
[FlareOn1]Shellolololol
exe程序,直接不能运行,无壳,ida分析
简单F8单步调试发现,在sub_401000函数最后,有个lea eax, [ebp+var_201],然后call eax,这里会报错退出
上x32dbg,来到call eax那里,F7单步步入
可以看到对ds:[esi]进行异或运算,执行完这一段,在内存窗口看到"and so it begins"字符串
继续向下走,可以看到又有对ds:[esi]进行异或运算
执行完,在内存窗口可以看到另一段字符串
继续向下,再执行完两段对ds:[esi]的异或运算后,在内存窗口看到flag
[CFI-CTF 2018]powerPacked
elf for powerpc文件,有upx壳,使用工具脱壳后,ida分析
搜索字符串,看到一段不明意义的字符串
交叉引用过去,来到main函数,有个strcmp,还有个减2的运算
由"EHK"减2得"CFI",刚好和比赛的名字一样,于是可以确定程序的运算逻辑是将已知字符串循环减2,再和输入进行比较
写脚本,最后加上"}"即为flag
data=[ord(c) for c in "EHK}kanqxgarqygtre"]
for i in range(len(data)):data[i]-=2
print(''.join(chr(i) for i in data))
# CFI{i_love_powerpc
[INSHack2018]Tricky-Part2
elf文件,无壳,ida分析
main函数,整体的效果是反调试
交叉引用字符串"Enter password : ",有两个地方引用,先来到abort_trap这里
获取输入,进入check函数验证输入
check函数,直接比较输入和已知数据
写脚本即可得到flag
data=[73,78,83,65,123,89,48,117,95,115,104,48,117,108,100,95,107,110,48,119,95,116,104,52,116,95,49,95,99,52,110,95,116,114,49,99,107,95,121,48,117,114,95,100,51,98,117,103,103,51,114,125]
print(''.join(chr(i) for i in data))
#INSA{Y0u_sh0uld_kn0w_th4t_1_c4n_tr1ck_y0ur_d3bugg3r}
另一个引用"Enter password : "的地方,是对输入进行sha256散列,再与已知比较
哈希运算不可逆,而且对已得到的flag进行sha256散列,结果与已知不相同
import hashlib
s="INSA{Y0u_sh0uld_kn0w_th4t_1_c4n_tr1ck_y0ur_d3bugg3r}"
h=hashlib.sha256()
h.update(s.encode(encoding='utf-8'))
print(h.hexdigest())
# 6765e72305447e0c0bc65758ef29be67c8abe2a582ee5104fc2e5f7700f5fc6b
[CFI-CTF 2018]Automated Reversing
两个py文件,一个binaries文件夹
generator.py是对明文的变换,变换结果写到binaries文件夹的各个binary文件里,在那段明文中可以直接看到flag
solution.py是对变换结果进行逆变换,从binaries文件夹的各个binary文件里读取运算符和参与运算的数据,最后打印明文,也可获得flag