Android hacking event 2017
1.you can't find me,
老规矩先打开jeb,然后看下主活动,
发现又调用了mainthread类的startWrites方法,继续跟进去。
发现是新建了一个随机输入流的文件对象,然后新建了很多进程,往这个文件中去输入字符,不过里面是有时间限制的
所以flag应该是根据时间顺序来拼接就好了,
Aol jsvjrdvyr ohz ybzalk Puav h zapmm tvklyu hya zahabl, Whpualk if uhabyl, svhaolk if aol Thzzlz, huk svclk if aol mld. Aol nlhyz zjylht pu h mhpslk ylcpchs: HOL17{IlaalyJyfwaZ4m3vyKpl}
弄出来是这个东西,quipquip安排上,一把梭就出来了
2.aes-decrypt
jeb打开
主要逻辑应该在so层,ida打开一波,发现是静态注册的,直接找java_类名_native方法名
这里其实挺操蛋的,本来java层几行可以解决的问题,在so层就得这么多行。上面一大堆,其实从后面可以看出DA3E0BB0这个函数其实就是做的一个base64加aes解密,这里我也没管,
就是黑盒来用,发现上面一大堆只是为了获取app的签名而已,由于这是java的数组,如果c++要使用需要转换成本地数组,转换后,作为aes的key,iv已经给了,对那个字符串进行解密
至于怎么看出DA3E09E4和58函数的作用的,第一个是发现输入的字符串后,会发生变化,于是跟进去,发现里面有base64字样,只能动调,发现就是base64,然后下一个函数
基本可以从题目中猜出来,一个key和一个iv,恰好符合,剩下其实我也迷茫了,后面看了wp才知道,是需要照猫画虎,将app显示的字符串,按同样的key和iv解密就好了
from Crypto.Cipher import AES import base64 iv=[ 0x99, 0x3F, 0x76, 0x06, 0xA7, 0x88, 0x1C, 0x67, 0x49, 0x27, 0x66, 0x06, 0x8D, 0xE9, 0xD8, 0xAA ] key=[ 0x00, 0xC2, 0xB2, 0x00, 0xCB, 0xAF, 0xED, 0x4E, 0x14, 0xB3, 0x52, 0x93, 0x56, 0x36, 0xF6, 0x00, 0x65, 0x7C, 0x40, 0x6C, 0xBB, 0x8F, 0x29, 0xC0, 0xA1, 0x4F, 0xBB, 0xEC, 0xB6, 0xAD, 0x8E, 0x54 ] data="+NvwsZ48j3vyDIaMu6LrjnNn8/OAnexGUXn3POeavI8=" flag="T9WoXhrsQHgY3NLr8SwBbw==" iv=''.join(chr(a) for a in iv) key=''.join(chr(a) for a in key) cipher=AES.new(key,AES.MODE_CBC,iv) plain_data=cipher.decrypt(base64.b64decode(data)) print plain_data cipher=AES.new(key,AES.MODE_CBC,iv) plain_data=cipher.decrypt(base64.b64decode(flag)) print plain_data