资料
1. apk: com.ximalaya.ting.android.apk. 2020年8月 可以使用
2.
抓包分析
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。