安卓逆向系列七-脱壳点原理(二)

上次我们提到了还有另外一个脱壳点,这个脱壳点就是DexClassLoader

根据上次我们写到的脱壳:正确的时机,dex起始位置的大小

前人已经指出来时DexClassLoader,那么我们只要跟踪就好了

安卓逆向系列七-脱壳点原理(二)

从这里我们可以看到DexClassLoader也是继承BaseDexClassLoader,构造方法也是从BaseDexClassLoader来到的

查找BaseDexClassLoader

安卓逆向系列七-脱壳点原理(二)

可以看到又来到了DexPathList,DexPathList跟原来上篇文章写的很像

安卓逆向系列七-脱壳点原理(二)

从DexPathList到了 makeDexElements。

跟踪 makeDexElements

安卓逆向系列七-脱壳点原理(二)

从for循环里面了,无论是if 还是else都走了 loadDexFile,看着这个应该是加载Dex文件的

查找loadDexFile

安卓逆向系列七-脱壳点原理(二)

loadDexFile如果if最终就是走到了DexFile构造函数无下文,如果是else就是走到了loadDex

跟踪loadDex,最终都是回到了DexFile

安卓逆向系列七-脱壳点原理(二)

查看DexFile,DexFile又是回到了我们第一个脱壳点,但是这个脱壳点和第一个是不一样的。从这里可以看到DexFile里面已经存在了2个脱壳点

安卓逆向系列七-脱壳点原理(二)

可以可以看到在经过一个try catch是没有做任何调整的。第一个调整的地方在openDexFile。跟踪openDexFile

安卓逆向系列七-脱壳点原理(二)

openDexFile最终到了 openDexFileNative。Native函数,这个时候进入到c里面查看这个函数

openDexFileNative

dalvik_system_DexFile.cc

安卓逆向系列七-脱壳点原理(二)

第一个对dex相关的是OpenDexFilesFromOat,查看OpenDexFilesFromOat

安卓逆向系列七-脱壳点原理(二)

从这个里面已经看到了dex location,意味着我们已经接近了dex的起始位置

第一对dex有相关动作的是oat_file_assistant

跟踪oat_file_assistant在oat_file_manager.cc

安卓逆向系列七-脱壳点原理(二)

又是回到了Open函数,这个地方就和上次的Open一样了,只不过调用的不一样

安卓逆向系列七-脱壳点原理(二)

第一个与file相关的就是OpenAndReadMagic

跟踪OpenAndReadMagic,与脱壳点能够对应上了

安卓逆向系列七-脱壳点原理(二)

安卓逆向系列七-脱壳点原理(二)

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任


欢迎关注公众号“呼啦啦安全”,原创技术文章第一时间推送。



原文始发于微信公众号(呼啦啦安全):安卓逆向系列七-脱壳点原理(二)

版权声明:admin 发表于 2024年6月12日 下午4:48。
转载请注明:安卓逆向系列七-脱壳点原理(二) | CTF导航

相关文章