# 第二题 简单 so

还是直接搜索找到如下位置

image-20220810102449541

编写 frida 脚本,hook 一下这个 encodeToString 是啥

Java.perform(function(){
        console.log("so start:")
        var ByteString = Java.use("com.android.okhttp.okio.ByteString");
        var NativeLib = Java.use('com.yuanrenxue.challenge.two.NativeLib');
        var Base64 = Java.use('android.util.Base64');
        NativeLib.encrypt.implementation = function(a, b){
            console.log('SigEntity.generatorSig.a: ', ByteString.of(a).utf8());
            console.log('SigEntity.generatorSig.b: ', b);     
            let result = this.encrypt(a, b);
            console.log('result:',  ByteString.of(result).hex());
            Base64.encodeToString.overload('[B', 'int').implementation = function (val1, val2) {
                // console.log(val1);
                // console.log(val2);
                let result1 = this.encodeToString(val1, val2);
                console.log(result1);
                return result1
            }
            return result;
        };  
    });

image-20220810145803770

很明显,这个就是我们想要的结果了,然后就跟进去 NativeLib.encrypt,发现是个 native 方法

大致翻译一下:

使用 native 方法加密,第一个参数是由页数冒号时间戳组成的 byte 数组第二个参数就是时间戳

image-20220804082551141

很明显,加密函数对应的 so 文件如图所示,直接用 ida 打开

image-20220804082634800

点进去 发现逻辑有点复杂,就不考虑继续分析 so 了

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

Mr2 WeChat Pay

WeChat Pay