国赛ciscn2024-WP-re2-androidso_re(frida+objection-hook解题)

0.解题思路

首先查看数据的apk需要什么运行环境:

环境:

  1. 雷电模拟器安卓版本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)

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值