jarvis oj DebugMe writeup
来源:互联网 发布:粉尘防护口罩知乎 编辑:程序博客网 时间:2024/06/06 18:38
话说这题真的是玄学做出来的。。。
首先看一波main函数
sub_A30这里是fork了一个子进制,然后调用ptrace post了一些东西到子进程那里
然后这里就是异或了一波输入的东西
接着在下面看到有这个东西,也是输入异或了一波
这里的判断条件有点看得不是很懂,这里也不多说。。。免得误导
这里插了一个breakpoint,目测就是跟上面子进程那里有关
在sub_c14里面就是主要的判断逻辑的地方
v3就是传进来的第二个参数,就是7
然后根据v3的顺序来判断输入的字符串是否正确,根据题目所说,有8个字符,这里应该所有判断条件都要用上
在case9那个label 那里就是更新v3的地方,这里的反编译成c语言的结果有点问题
看了下arm的汇编,准确的是
v3=7 * (v3 + 1) - 11*sub_E14(7 * (v3 + 1), 11)
然后编个程序,看下验证的顺序,发现是 7 1 3 6 5 9 4 2 只验证了7个字母,这里感觉就有点奇怪了
于是想动态调试一波
把所有可疑的反调试的全部nop掉
然后开了安卓虚拟机,用gdbserver 调了一下,发现的确是这个顺序。。。感觉就更奇怪了。。。
于是想了想,是不是输入的第二个参数不是7,而是其他呢?
又跑了下,发现输入为0的时候,完整的验证了8个字母 ,然后这个时候就能猜测出上面那个可疑的breakpoint和fork的程序到底干了啥,目测就是停在这个breakpoint,然后父进程把输入的参数改成0,再继续运行验证
然后关键上面有两个异或的操作,到底真正执行了哪一个呢?
这个时候爆破一波就可以了,总共的可能性也不多
代码如下,s4就是flag
a=[105,115,101,110,103,97,114,100]b=[i^1 for i in a]c=[b[i]^i for i in range(len(b))]d=[a[i]^i for i in range(len(a))]s1=''s2=''s3=''s4=''for i in range(len(a)): s1+=chr(a[i]) s2+=chr(b[i]) s3+=chr(c[i]) s4+=chr(d[i])print(s1)print(s2)print(s3)print(s4)
- jarvis oj DebugMe writeup
- Jarvis OJ writeup Web
- Jarvis OJ writeup Basic
- jarvis oj 软件密码破解-3 Writeup
- Jarvis oj 文件数据修复 writeup
- Jarvis OJ
- jarvis oj Web By Assassin
- Jarvis OJ Login【MD5拼接php字符串】
- Jarvis OJ PHPINFO【审计代码反序列化】
- Jarvis easycrackme
- Jarvis后台管理模板
- 171219 JarvisOJ(DebugMe)(1)
- 171225 逆向-JarvisOJ(DebugMe)(2)
- ACTF writeup
- ACTF writeup
- ISCC2014 writeup
- hctf2014 writeup
- UCTF WriteUp
- Windows server安装Oracle 11g 停在2%
- git学习四:eclipse使用git提交项目
- java除法保留n位有效位
- shellinabox
- java Collection.sort
- jarvis oj DebugMe writeup
- tomcat启动错误:Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
- 1001-Hello, world!
- java中配置文件properties的读取
- 去掉excel下面不用的空白行
- 关于傅里叶
- 雾霾入侵机房会产生哪些危害?该如何防护?
- 欢迎使用CSDN-markdown编辑器
- 基于RK3399的USB转串口驱动模块的编译