本来是一名pwn选手。可能因为疫情的关系,最近不务正业喜欢上了搞逆向,真的是消磨时间的神器,一道题玩一天不是梦,而且感觉看反汇编代码更有感觉了XD。题目都放在附件里了,对于大佬来说应该都不难,不过对于我这种基础差的还是比较有挑战性的。 比赛持续三天,一共11道逆向,赛后我又连着肝了两天,感觉踏上了修仙的路,一共搞出来九道半的题目,还有一个太难了。下面分享一下我的解题思路。
VM题目,而且是极其规范的那种,所以直接用angr梭哈了:
flag{vm_is_not_easy}
可以对文件进行加密,不过测试发现只能加密16个字节,后面都是明文。程序被ollvm混淆过,本来想用现成的脚本解混淆,结果angr版本总是有问题。后来直接IDA里硬看,其实也很容易找到逻辑,AES的ECB加密而已,flag最后是个png。
flag{3ff32148-e229-41fd-b7b9-d09e76d35daf}
日常消费卢老爷,程序是用QT写的,一开始OD里找不到关键点,所以我就跑到IDA里慢慢找,发现0x402150
是关键函数。然后OD调到对应位置,输入”lubenwei“,“abcd”,在经过一些处理后有加密结果,怎么加密的并不用关注,只要看到最后的比较过程就可以了。看到此时EDI是我们的输入转化而成,EAX就是对应的结果,直接输入这段结果就行。
flag{41d26f00}
程序逻辑大致为把输入进行处理作为key,之后对key进行某些验证,然后对一段密文进行xxtea解密。其他的部分并不用关心,因为这些本来就不是我们控制的。sub_7FF6E5231890
找到对key进行判断的算法,只要让其绕过you are wrong!
这里就行了,后面的不用关注。 把算法模拟了出来,爆破就可以找到key,这道题比赛的时候本来可以做出来,不过因为比赛的时候只爆了八个字节,结果绕过了检测导致后面解密失败,之后才发现原来是九个.
会出现好几个结果,最后在输出下断点依次尝试,最后发现8ab86897
是正确的:
flag{8ab86897-25c9-811a-ce9a-18547ae6801e}
真 病毒分析,模拟DNA的序列配对,其实是在做简单的单表替换。最后三个字符一组会产生固定的字符串,但是固定的字符串对应的输入可能有多个,这里需要爆破。 这个写得有点粗糙,可能有的情况被不小心遗漏了,而且速度很慢了.
flag{AUGUGCCUUGCAAGACUUUUCUCGAUACUUAACGUCUGUGGAAAACUUUAA}
安装过程中会要求输入密码,不过即使错误也可以解压,解压后的文件是NES模拟器,就是PC机上模拟FC游戏的,还带了个赤色要塞文件hhh,应该是在安装包里搞了一些操作,有点难调。 后来发现这个东西叫NSIS,file命令可查,用1505的7zip就可以提出来脚本。 key是明文,不过也没啥用:
NSIISSOEASY
nsis的脚本跟汇编类似,所以也能明白个大概:
第二个函数在我眼里基本啥也没干,应该是想实现字符转ascii码把,所以其实就是简单的异或1而已:
flag{e696a6cc-f63e-483c-9af0-bf87902d9eaa}
因为SEH的机制,IDA的F5会显示得很奇怪,大段地逻辑是无法看到伪C的,所以就OD+IDA看汇编硬做,差不多玩了一天XD。 不过看反汇编的代码可以看到代码的逻辑,loc_4154A1
应该是函数的主要逻辑,OD里可以调试,注意这里会先弹出hook再跳转到这里。 说实话,逆了很久才逆明白,程序要求输入格式是:flag{xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx},里面是uuid格式,第一部分和第二部分各少一个字节。 我把算法还原了,这里处理的是uuid格式识别之后的数据:
我这个是按照它这个32位逻辑一点点逆的,还原的时候直接按照64位处理就行。 关于42立方和问题,早就被玩烂了:42=(-80538738812075974)^3 + 80435758145817515^3 + 12602123297335631^3
最后的脚本:
flag{ed82ab5-5c7a-da78-b7a8-d2f5fbef453}
虽然没有mac,不过IDA里逻辑看起来跟源代码基本没啥区别了,写爆破脚本硬算:
flag{m3Rkl3_h3LLMaN_KNaPsacK_Al90R17Hm!}
这个题差不多也玩了一天,是一个通过父子进程信号传递opcode和变量的虚拟机。我觉得很复杂了,分析了非常非常久,最后在IDA里设置虚拟机的结构体: 我把逻辑用python复现出来了,可以帮助理解,运行起来会有一些奇怪的问题hhhh。
之后写了个稀碎的大致流程:
然后就可以写出最后的加密逻辑和反向的解密逻辑了:
flag{e171a284-49e7-4817-ad8d-b704c02309e0}
没做上,不过说一下我分析出来的东西吧。 首先会根据规则将输入数据插入:
之后每九个字符进行一次检测,分析完可以确定每9个字符只能是0-9数字,且每九个字符不重复,所以推测这个东西是数独。网上随便找了个脚本跑,得到第一段输入序列:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
上传的附件: