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。

相关推荐
m0_748230212 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
SunshineBrother2 小时前
Flutter求职、面试20+面试官总结:Dart篇
android·前端·flutter
鸿儒5172 小时前
利用adb工具安装卸载安卓平板(手机)软件
android·adb·智能手机
软件聚导航5 小时前
uniapp 安卓和ios震动方法,支持息屏和后台震动,ios和安卓均通过测试
android·ios·uni-app
zhangphil5 小时前
Android叠加双RecyclerView ScaleGestureDetector AnimatorSet动态放大缩小,Kotlin(1)
android·kotlin
studyForMokey5 小时前
【Android零碎笔记】
android·笔记
冷眼看人间恩怨5 小时前
【Android】Android Studio打包APK、精简APK大小与规范处理详解
android·ide·android studio·apk
vincent_woo6 小时前
再学安卓 - init进程
android·操作系统
zhoujun7987 小时前
Hybrid APP 移动开发-客户端
android
for_syq7 小时前
Android res复制脚本
android·linux·服务器