2016zctf_android1-200 writeup-【详细】
Q群里的教材,入侵发过来了~ 现在一帮人打我{:5_191:} 如果没用请恒大大删帖!!!{:6_223:}ctf题目就不说了,不重要~~(原题在最后有下载)使用JEB查看源码,发现对username和passwd进行部分验证后,再将将username+passwd及一个数据库查询结果作为Auth.auth()方法的参数,如果返回值为1则激活另外一个活动app仔细查看类app的源码发现这个类对传入的passwd参数做了是否为空的校验,后面将密码传入jni中把passwd作为des解密密钥使用了,所以需要知道passwd是什么。如下的数据库查询,是将key.db使用select * from key where id = 0语句查询,结果为zctf2016。(数据库为SQLite,可以工具打开key.db直接查看)有趣的是源码中不但有加密函数,也有解密函数。所以带入文件内容和解密函数写一小段代码就能把密
码算出来。 byte[] bsrc = { (byte) 0xd3, 0x3a, (byte) 0x60, (byte) 0xc4, (byte) 0x74, (byte) 0xf1, (byte) 0x0a, (byte) 0x0a,(byte) 0x0d, (byte) 0x71, (byte) 0x64, (byte) 0x82, (byte) 0x57, (byte) 0x26, (byte) 0x68,(byte) 0xd1 };
byte[] bres = new byte;
try {
bres = decrypt(src, "zctf2016".getBytes());
} catch (Exception e) {
e.printStackTrace();
}
String s_res = new String(bres);
System.out.println(bres);
输出结果为”}sihttoN{ftcz”,记得字符串是被反向的,正确的应该为zctf{Notthis}。故用户名为zctf密码为{Notthis}
接着在app中有结束进程的代码所以这里要修改代码 例如将!=0改成==0。即,if-eqz改成if-nez(汇编代码和反编译代码逻辑有些许不同)然后JNIclass的add貌似是一个检测是否为调试状态的函数,并不知道参数的1和2有什么用,反正我没有修改这里也没有任何问题。最后调用了sayHelloInc()
在IDA中f5查看源码,首先判断了是否为调试状态(later_Java_com_zctf_app_JNIclass_add函数),如果不是就打开bottom文件,读取并以{Notthis为密码做des解密。然后马上释放掉存储解密内容和源文件的空间,最后返回。需要在later_Java_com_zctf_app_JNIclass_add执行完后面下断点,调试时修改返回值在这里停下来之后修改r0的值并且在free前面停下来,在f5反编译出的代码中可以看出v15为bottom文件内容,v23存放解密后的内容,即R5和R7,找到R7所指向的,并在hex view下选定范围并另存为png文件。最后用stegsolve打开图片发现flag。
这个写得比较粗略。见谅一下! 有用的拿走评分~{:5_193:} {:5_184:}吊死链接:
链接: http://pan.baidu.com/s/1o7i0oQ2 密码: vvx6转载主题禁止使用回复可见功能。 沙发自己做~ 怎么申请置顶~{:5_192:} 转载技术帖只给予加分。。不能置顶。么么哒 Shark恒 发表于 2016-2-27 16:57
转载技术帖只给予加分。。不能置顶。么么哒
{:5_188:}老恒又风骚了 奈何看不懂啊 智商不够用了 太高科技了,看上去很高大上,虽然看不懂 脑洞大开,看不懂{:5_116:} 点赞支持一下吧
[快捷回复]-感谢楼主热心分享!
页:
[1]
2