上周因为别的事情(帮忙校验电子取证的书,所以上周的题也就没有怎么搞。还有一个原因是我做安卓逆向的工具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
左右……