android so分析之 os.trptbil
仅仅分析so层,鉴于防止被非法利用,这里将so的名字改名。关键信息隐去。
首先观察init_array层,发现以下:
一个一个分析。
sub_28D0
打开以后,是thumb指令集,
不急,慢慢来分析。
sub_88AC这个方法,多次调用,应该是个解密方法,那么有理由对他进行一波分析。
流程比较大,那么我们尝试对他进行还原。还原以后的c++代码如下:
这里,自己还原的代码,大量引用了变量r0,r1这种寄存器风格,其实不如ida的f5插件,当然我们也可以直接用ida的f5插件大概的看一下:
其实到这里,我们会发现,这是一个解码函数,用于解码字符串,当然为了快速得出结果,我们完全可以hook或者调试,最终得出的结果,是"HackMeShollApplication",“Ljava/lang/String”,等等的字符串,这里,对应原程序java层的HackMeShollApplication类的一些方法签名,后面会用到jni注册成对应的native函数.那么回到一开始的主函数,可以这样还原:
这个sub_28D0 改名为prepare_native_string;
好了。现在回过头来,init_array的第一个方法,就是准备字符串。给某个类注册native方法。用于Registernatives注册。
接下来看第二个方法。
sub_2A74
这个函数看起来没多大用,暂时不去分析他(可能后面会用到,但是这里,我们暂时跳过,如果分析不下来了,接着再分析他。)。
跳过以后,分析下一个
sub_2B60
先简单的f5看一下,这里会调用一些api了。
他这里,会调用字符串解密函数,加载某个so,调用某个so的方法。但是包括so的名字和方法名,都是隐藏的。我们暂时把他命名为 call_lib_functions
。结果如下:(init_array部分)
目前为止,并没有深入分析,仅仅从直观上,看到这个so,在init_array里面,做了两件事情:1、注册一些native的字符串对应jni层 2、加载另一个so,调用另一个so的指定方法。
静态分析的差不多了,那么下一步,就是动态分析,为此,我们需要,对这个程序,进行动态调试,以得出一些具体的结果用以分析。
未完待续
本文地址:https://blog.csdn.net/XIAONIAOCAICAI/article/details/108728125