基于Frida的脱壳工具
frida环境搭建,参考frida官网:frida。
利用frida hook libart.so中的OpenMemory方法,拿到内存中dex的地址,计算出dex文件的大小,从内存中将dex导出。
ps:查看OpenMemory的导出名称,可以将手机中的libart.so通过adb pull命令导出到电脑,然后利用:
nm libart.so |grep OpenMemory命令来查看到出名。
其中android 10为/apex/com.android.runtime/lib/libdexfile.so方法为OpenCommon。
执行./inject.sh 要脱壳的应用的包名 OpenMemory.js
/data/data/应用包名/目录下此脚本在以下环境测试通过
python frida_unpack.py 应用包名
利用c++filt命令还原C++ name managling之后的函数名
c++filt _ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_
输出:
art::DexFile::OpenMemory(unsigned char const*, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, art::MemMap*, art::OatDexFile const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)
715 followers · starred Oct 2025
129 followers · starred Jun 2025
734 followers · starred Jul 2025
752 followers · starred Dec 2018
基于Frida的脱壳工具
frida环境搭建,参考frida官网:frida。
利用frida hook libart.so中的OpenMemory方法,拿到内存中dex的地址,计算出dex文件的大小,从内存中将dex导出。
ps:查看OpenMemory的导出名称,可以将手机中的libart.so通过adb pull命令导出到电脑,然后利用:
nm libart.so |grep OpenMemory命令来查看到出名。
其中android 10为/apex/com.android.runtime/lib/libdexfile.so方法为OpenCommon。
执行./inject.sh 要脱壳的应用的包名 OpenMemory.js
/data/data/应用包名/目录下此脚本在以下环境测试通过
python frida_unpack.py 应用包名
利用c++filt命令还原C++ name managling之后的函数名
c++filt _ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_
输出:
art::DexFile::OpenMemory(unsigned char const*, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, art::MemMap*, art::OatDexFile const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)
715 followers · starred Oct 2025
129 followers · starred Jun 2025
734 followers · starred Jul 2025
752 followers · starred Dec 2018