RE
easyRE
一头雾水,只根据DirWangK的文章了解到出题人可能在初始化函数__scrt_common_main()
用一些奇怪的玩意做了点手脚,并且开了非常严的反调试(一气之下搬来ghidra还是不得劲):
搜字符串也没有查找到程序显示的语句,也没有看到Thread相关函数,不排除是做了高度混淆和反调试的高明子进程,又或者是什么新东西。无奈只能查找程序是否含有奇怪字串。在sub_140002760
找到_MEIPASS2
字串,经查是python系统环境里的东西,基本确认这个玩意是个python exe,遂尝试用pyinstxtractor把这个exe反编译成pyc来逆。
还真是.jpg,但是接下来使用各种工具反编译pyc的时候都因为魔数问题挂了,一查可能是python版本不对,但是py2和py3一直到3.10都挂了,怀疑用的3.11编译的(实际上确实如此,python3.11的编译魔数是3495)。遂直接用python的dis库进行反编译然后强行读汇编:
import dis
import marshal
with open('easyRE.pyc', 'rb') as f:
f.seek(16)
dis.disassemble(marshal.load(f))
字符长度46,伪随机根322376503,先进行输入并编码,然后另开一个数组,存放input[i]^randint(0,255)
的结果。
道理都懂,实践开始。
import random
r = random.seed(322376503)
encans = b'\x8b\xcck\xd3\xed\x96\xffFb\x06r\x085\x82\xbc \xb2\xde)p\x88Q`\x1bf\x18\xb6QUSw\x10\xcd\xd9\x13A$\x86\xe5\xcd\xd9\xff'
for i in encans:
print(chr(i ^ random.randint(0, 255)), end = '')
flag{69858b56-4987-438f-a02c-5ab5c09e5138}