工具
IDA+X64dbg
思路展开
查壳无壳,IDA载入 ,大量函数似乎每个都有用。
遇到大量函数;1.以前没见过的新知识,题目会给提示,例如vm逆向 2.主逻辑简单,大量函数只是障眼法
shift+F12查看字符串,对整体先有个把握
发现有个文件。但在路径下找不到这个文件。找到成功语句Congrats You got it!
点进去,找到函数调用sub_401100。
找到主函数:
找到成功的关键条件(红框),sub_4020C0函数我推测是字符串比较判断是否相等。
字符串传入需要地址,所以锁定篮框内容,向上追踪找到sub_402E90(&Dst, &v37);
这里推测&Dst
给&v37
,简单的赋值操作,向上追踪&Dst
,直到遇到sub_401620
,
sub_401620(&Dst, v5, v6, v7, v8);
sub_401620
再次聚焦sub_402550
发现和文件路径有关,猜测从文件中读取flag,与某个字符串比较。再回到sub_4020C0,点进去
和v7有关,v7跳出来是v12,v12是Memory,字符串就是Memory。
整体逻辑明朗:从某个文件读取flag,和Memory比较,相等即正确。
两种思路:x64dbg动态调试和写Memory生成脚本
x64dbg动态调试:
文件路径先创建一个flag.txt,sub_4020C0(我这里的地址不是4开头,但后面20C0一样)下断。
Memory生成脚本静态脚本:
str1 = "themidathemidathemida"
str2 = ">----++++....<<<<."
key =""
flag=""
for i in range(18):
key += chr((ord(str1[i]) ^ ord(str2[i]))+22)
for i in key:
flag+=chr(ord(i)+9)
print(flag)
idg_cni~bjbfi|gsxb