Free Delivery
附件拖入jadx
程序看起来比较复杂,分析起来也不容易,最主要是没有验证部分,只是让找。跳过分析部分,说说怎么得到flag的。可以发现有native层函数
解包把so拖入ida
一个简单的异或。原来有两部分
题目描述中提到了网络和命令,第二部分在命令,那么第一部分应该在网络了。X0函数是base64解码函数
解码
调用了三次Q0函数,假设三次调用参数相同,那么前两次中a1函数的返回值应该等于第三次调用中的明文
一个异或。脚本
Fructose
附件拖入ida
main函数不能反汇编,这里要知道retn等价于pop eip。先push了一个地址,再retn,就相当于jmp那个地址,只不过多加了一个入栈再出栈步骤。输入部分
ecx表明了输入长度,rdx即s1即输入字符串地址
r9是一个256的数组,输入作为索引取值
然后加上r8的地址作为偏移基址,即得到需要进行加法操作的次数
加法做完后,进行移位操作,再做加法,最后和r8数组做比较
jrcxz表明需要rcx为0
挺考验汇编、逻辑功底的。脚本
Maltodextrin
很抽象的题。附件用文本编辑器打开
看起来应该是汇编,但是网上没搜到相关的,有相似的,不知道到底是不是
先不管这些,随便翻一下,发现有两个寄存器r31和r55都指向result,可以理解为两个指针,指向数组中两个相邻的位置
可以发现有125即’}’,但是是负数
不管,先提出来再说。因为是两个指针,所以我分两段了,两段之间用三个B隔开了。当看到’{’的时候以为对了
没看到U,白高兴,继续看。诶,有xor,而且有负数,负负得正,而且左右括号的负数异或后刚好没变,很明显了
脚本。显式并行指令集运算Explicitly Parallel Instruction Computing,EPIC
Aspartame
该下载的下载,该安装的安装,该解压的解压。照提示运行
是个俄罗斯方块游戏,用CE找字符串没找到。附件拖入ida,拖到最底下,再稍微向上翻。那怎么找到这个的呢?是这样我用winhex查看,一直拖到最下面就发现了这个
查引用,v41应该就是消掉的行数,好像需要消掉69次后才会给flag
那对于我这样的手残,肯定是过不了的。转到汇编,对跳转地址查引用
根据逻辑,改成必定跳转该地址
反汇编界面看是这样就行了
保存然后重新运行
Magic Conch
附件拖入ida
调试发现,附件解密数据段,生成了另一个程序
数据段很大,不存在静态解密的可能性,只能考虑dump内存
但是一开始被文件大小困住了,不知道应该什么时候截止。后面的题目做的差不多了,最后再看一眼这个题。突然发现,这里不是有个n嘛
写脚本dump
文件拖入ida
看thread_start
原文不一样,经过HASH后要一样,明显的hash碰撞,看看hash函数
SHA256函数是真的SHA256函数,Xor是自定义函数。那只需要每次输入的字符全相等就行了,至于长度,应该是32个字符,因为传入HASH函数时,参数为int64* a1,而且读取到了a1[3],即数组a1长度为4,元素大小为8byte,所以一共是32byte
结语
剩了两个图灵机没做,因为之前没接触过,与其绞尽脑汁做一个不一定能做出来的题目,不如睡大觉。难题天天有,谁知道以后会不会遇到简单点的类似的题目,到时候再入门也不迟。从难题入门太难了,头发都不够掉的