0.解题思路
首先查看数据的apk需要什么运行环境:
环境:
- 雷电模拟器安卓版本7.1
别的版本会闪退,后面分析原因!
打开jadx进行代码伪代码分析:
很显然校验位置在这里了!
private boolean legal(String paramString) {
return paramString.length() == 38 && paramString.startsWith("flag{") && paramString.charAt(paramString.length() - 1) == '}' && !inspect.inspect(paramString.substring(5, paramString.length() - 1));
}
这里是第一层校验:flag{aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}
继续找第二层校验:
很明显校验就在这个位置了!
主要是获取native层的jni.getkey()和jni.getiv()的返回值就可以进行DES解密了就可以获得flag!
我采用的方法是通过frida+objection+雷电模拟器的方法hook掉这两个方法获取返回值!
需要学习objection进行hook的可以自行搜索学习
或者移步:安装frida-objection-Android的hook框架-CSDN博客
版本信息:
雷电模拟器安卓版本7.1
C:\Users\Administrator>objection version
objection: 1.11.0
C:\Users\Administrator>frida --version
16.1.11
由于雷电模拟器安卓版本7.1第一次点check不会报错,点第二次才会闪退,所以需要手动hook两次!
输入的数据要求可以触发so文件的方法:flag{aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}
得到IV:‘Wf3DLups’
得到KEY:‘A8UdWaeq’
1.程序闪退原因分析
先查看一下apk闪退的原因:
先使用adb shell ps查看一下apk的进程id:
u0_a19 1996 1119 1783056 88000 0 7ffff5a827ea S com.android.flysilkworm:filedownloader
u0_a36 2096 1119 1375044 110416 0 7ffff5a827ea S com.example.re11113
root 2205 1117 9940 2712 0 7ffff7c8c6c7 R ps
再打开adb shell logcat 看卡系统日志输出了什么!发现是输入中莫名其妙多了一个0xbb!
所以报错原因是因为编码问题奔溃!
adb shell logcat
再来是一次,发现第一次点击不会报错第二次才会,不理解:
adb shell logcat
Button ID: Button ID: 2131230723
libnb : enter native_bridge2_isSupported /data/app/com.example.re11113-1/lib/arm64/libSecret_entrance.so
libnb : enter native_bridge2_loadLibrary /data/app/com.example.re11113-1/lib/arm64/libSecret_entrance.so
audio_hw_hal: raw_start_output_stream, stream=0xf6e43140, sampleRate=48000, channel=2, bps=16, bufSize=4096
AudioFlinger: mixer(0xf5983b80) throttle end: throttle time(20)
houdini : [2288] Added shared library /data/app/com.example.re11113-1/lib/arm64/libSecret_entrance.so for ClassLoader by Native Bridge.
libnb : enter native_bridge2_getTrampoline JNI_OnLoad, trampoline_addr 0x0
libnb : enter native_bridge2_getTrampoline Java_com_example_re11113_jni_getkey, trampoline_addr 0x7fffd3e7ef90
libnb : enter native_bridge2_getTrampoline Java_com_example_re11113_jni_getiv, trampoline_addr 0x7fffd3e7eee0
System.err: java.lang.Exception: Toast callstack! strTip=You are wrong.
System.err: at android.widget.Toast.show(Toast.java:130)
System.err: at com.example.re11113.MainActivity.onClick(MainActivity.java:51)
System.err: at android.view.View.performClick(View.java:5637)
System.err: at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
System.err: at android.view.View$PerformClick.run(View.java:22429)
System.err: at android.os.Handler.handleCallback(Handler.java:751)
System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
System.err: at android.os.Looper.loop(Looper.java:154)
System.err: at android.app.ActivityThread.main(ActivityThread.java:6305)
System.err: at java.lang.reflect.Method.invoke(Native Method)
System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:892)
System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)