上周因为别的事情(帮忙校验电子取证的书,所以上周的题也就没有怎么搞。还有一个原因是我做安卓逆向的工具AndroidKiller挂了,一直也没修好(到现在还没修好……最后只能用Android逆向助手。
DDCTF-Android Easy
dex2jar,然后jd-gui:
1 | public class FlagActivity extends d |
我们按照它给的逻辑分别算出
arrayOfByte2=”DDCTF-3ad60811d87c4a2dba0ef651b2d93476@didichuxing.com“
flag{DDCTF-3ad60811d87c4a2dba0ef651b2d93476@didichuxing.com}
WELCOME TO JNI
JNI 全称 Java Native Interface,Java 本地化接口,可以通过 JNI 调用系统提供的 API。操作系统,无论是 Linux,Windows 还是 Mac OS,或者一些汇编语言写的底层硬件驱动都是 C/C++ 写的。Java和C/C++不同 ,它不会直接编译成平台机器码,而是编译成虚拟机可以运行的Java字节码的.class文件,通过JIT技术即时编译成本地机器码,所以有效率就比不上C/C++代码,JNI技术就解决了这一痛点,JNI 可以说是 C 语言和 Java 语言交流的适配器、中间件。
总而言之,我们现在还是要搞这个apk嘛~
先找到入口点,然后jd-gui看一下:
根据图中逻辑,我们现在要去native-lib中寻找loginUtils:
Codegate CTF Redvelvet
根据提示内容,我们要用angr解题,在IDA64里面不难看出我们要find 0x4015F2(最后输出结果的位置),avoid 0x401621:
为了提高angr的速度和正确率,我们直接把exit函数设置为avoid:
1 | import angr |
嗯????为什么没有答案呢???我去问了一下万能的Rx神,他是这么给我解释的(大意):最后一个加密的函数是SHA256,而众所周知SHA256是不可逆算法,所以z3是跑不出结果的。但是在跑到SHA256的时候它的输入内容相当于已经确定了,所以我们把find定位在它进入SHA256的时候,也就是0x40152d:
1 | import angr |
插一个题外话,我用wsl貌似才4mins左右……




