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。

相关推荐
快乐觉主吖31 分钟前
Unity的日志管理类
android·unity·游戏引擎
明月看潮生39 分钟前
青少年编程与数学 01-011 系统软件简介 06 Android操作系统
android·青少年编程·操作系统·系统软件·编程与数学
snetlogon2042 分钟前
JDK17 Http Request 异步处理 源码刨析
android·网络协议·http
消失的旧时光-19432 小时前
Android USB 通信开发
android·java
吃汉堡吃到饱2 小时前
【Android】浅析View.post()
android
咕噜企业签名分发-淼淼2 小时前
开发源码搭建一码双端应用分发平台教程:逐步分析注意事项
android·ios
betazhou3 小时前
mariadb5.5.56在centos7.6环境安装
android·数据库·adb·mariadb·msyql
doublelixin8 小时前
AOSP (Android11) 集成Google GMS三件套
android
xzkyd outpaper11 小时前
onSaveInstanceState() 和 ViewModel 在数据保存能力差异
android·计算机八股
CYRUS STUDIO12 小时前
FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
android·安全·逆向·app加固·fart·脱壳