flag文件已知同样的构造方法即得flag
看别人的wp发现一道类似的题
由于提示是由源码的,所以疯狂找源码因为是压缩包形式,用www.zip
找到源码密码是弱口令,猜测是njctf2017
得到源码
然後就是一个简单的数字型的sqlite注入
注:补充sqlite的注入方法
并且注释#
需转码成%23
根据别人的提示是宽字节注入,测试一下
打开后发现了两串密文第②个打开有点类似于莫尔斯密码,但没有间隔所以只能放弃将第一个文本中的密文
尝试维吉尼亚后无果,然后放进quipquip网站直接解密发现結果
正好与第二个密文间隔一致,然后可以发现后面是乱的根据提示,将后面的栅栏一下得到结果
这题坑了我半天解密代码很快都写絀来了,就是因为key找错了看了一下给的文件,发现plain.txt
与cipher.txt
字节数一样这两个就是用来求key值的,然后用求出的key直接对flag.txt
解密
nc过去发现需要输叺一个正确的数字,爆破吧发现是22
发现不管输什么都是回显,尝试进行长度的爆破
发现当我输入1500个1时有返回说文件名过长且返回了有416長度,得知长度在1024个有漏洞
没有回显啦尝试执行命令
得到flag文件夹,直接获取发现有问题无法运行
那尝试一下linux重定向
在进行输入时,上方会动态显示状态:
同时可以查看DDMS囿日志输出:
主活动只有一个,Java代码量不大
但是解压缩后发现有so库
这里是一个TextWatch监听文本框的变化并进行状态显示,可以看到关键函数是:
这里还要注意初始化了一个字符串:
将程序改为Java代码直接得到结果:
反编译出的函数中,有分析字符串的函数parseText
另外几个so函数中没有找到,但肯定也有
分析发现主要有以下关键点:
对输入字符串及V7D=^,M.E
進行循环异或(即异或到第9位再返回V7D=^,M.E
继续异或),但是暂时不知道输入字符串的长度
从后往前看想要输出success
,要与compare
比较通过
还要注意前面的I_am_the_key
,为初始化时传入的字符串
这个函数首先生成了一个长度为的字符串数组 首先循环存储了I_am_the_key
(这裏开始不知道v6是怎么变化的,两种可能:一直为定值由0~11循环,尝试以后发现是第二种情况)
生成后进行了位置交换没有仔细研究规则。
编写函数得到初始化的结果:
这个函数不是很复杂得到的结果是最后的加密字符串,利用compare解密得到中间字符串:
此即是开始循环异或後的字符串
这个不限制中间两位必须相等而且后面有+10,此时得到或,按新规则得到结果NJCTF{have05if4n}
(此时用的是)提交正确。
这才想到题目的提示 不要相信看到的
据说要去除控制流平坦化导致的混淆,据说爆破flg函数可以得到答案:
是不是可以用符号化执行工具angr
还不会这个题。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。