reverse-android-实战喜马拉雅-ollvm

资料

  1. apk: com.ximalaya.ting.android.apk. 2020年8月 可以使用

抓包分析

java层分析

so层分析

登录的算法so是在 liblogin_encrypt.so中。 32位的, 用 IDA打开,查看 静态的导出函数。

打开 一个

首先看到 IDA VIEW 是一个横向 比较多的分支, 可能就是被混淆过的。

我们先点击 TAB 进入 c语言的。

看到 FindClass(a,&unk_D010); 的参数是个 _偏移地址 的。

点击进入偏移地址 查看函数或者数据, 也是密文。 基于以上3点, 判断混淆过了。

如果查看 这个加密 地址的数据, 可以 frida 去输出这个地址的 hexdump数据,可以看到解密的。

这样只能一个个解密看。

接下来通过 so dump 内存里面的 so, 完整的解密。

so dump

复制代码
function so_dump(so_name){
    console.log('so_name :',so_name+"\n");
    Java.perform(function(){

        var currentApplication = Java.use("android.app.ActivityThread").currentApplication();

        //so保存位置 /data/data/{package}/files/
        var dir = currentApplication.getApplicationContext().getFilesDir().getPath();

        send('dir: '+dir);

        var libso = Process.getModuleByName(so_name);
         
        send("[name]:"+ libso.name);
        send("[base]:"+ libso.base); //0x 地址
        send("[size]:"+ptr(libso.size)); // number
        send("so [path]:"+libso.path);

      
        // liblogin_encrypt.so_{baseaddr}_{sosize}
        let libname = libso.name+"_"+libso.base+"_"+ptr(libso.size)+".so";

        // 要输出so 保存的路径 
        var file_path = dir+"/"+libname
        send(' so dump file_path:'+file_path);

        var file = new File(file_path,"wb");
        if (file&& file!=null){
            Memory.protect(ptr(libso.base),libso.size,"rwx");
            var libso_buffer = ptr(libso.base).readByteArray(libso.size);

            file.write(libso_buffer);
            file.flush();
            file.close();
            send("[dump]: "+file_path);

        }


        function send(msg){
            console.log(msg+"\n");
        }
       
    })


}



//so_dump('liblogin_encrypt.so');

[Pixel 6::Ximalaya ]-> so_dump('liblogin_encrypt.so')
so_name : liblogin_encrypt.so

dir: /data/user/0/com.ximalaya.ting.android/files

[name]:liblogin_encrypt.so

[base]:0x98ac1000

[size]:0xe000

so [path]:/data/app/~~Cmz1GTeSFB27zA99PXlbkg==/com.ximalaya.ting.android-XtpyLCFbUg5tpXqybmHW6Q==/lib/arm/liblogin_encrypt.so

 so dump file_path:/data/user/0/com.ximalaya.ting.android/files/liblogin_encrypt.so_0x98ac1000_0xe000.so

[dump]: /data/user/0/com.ximalaya.ting.android/files/liblogin_encrypt.so_0x98ac1000_0xe000.so

复制到本地

复制代码
cp /data/user/0/com.ximalaya.ting.android/files/liblogin_encrypt.so_0x98ac1000_0xe000.so /sdcard/

adb pull /sdcard/liblogin_encrypt.so_0x98ac1000_0xe000.so ./

本地再打开 新的so。

相关推荐
robotx8 分钟前
安卓线程相关
android
消失的旧时光-194329 分钟前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon1 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon2 小时前
VSYNC 信号完整流程2
android
dalancon2 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户69371750013843 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android3 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才4 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶4 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle
汪海游龙5 小时前
开源项目 Trending AI 招募 Google Play 内测人员(12 名)
android·github