1 Android SO加壳要是对针对以下两点
1. 对elf文件加壳及针对so文件
2. 对于在so加载,调用机制做特殊处理
2 加壳思路
简单 : 加密 + 拆解 + 混淆
复杂 : StolenCode 在VM中进行
如果想要自己写一套加壳工具的话,第一步必须要了解elf文件结构,了解so库的加载机制,然后自己写套加壳工具
解读
其实so库就相当于android中library库,在android runtime时期被加载进来通过java层去调用,所要对elf文件加壳后还需要一些特殊的处理 。
比如:
1。 在load so库以后,会将so中信息存储在一个全局的链表中,保证脱壳后的so文件可以被全局的链表访问到
2。android中so文件被java层调用有两种方式 :
1. registerNative注册
2. 通过java命名规则命名
因此在加壳的时候必须要保证所有的库函数都能被掉用,剩下的就只需要通过过反调试(Anti tricks)的方法增加破解者耐心,最后耗死他,比如现在的我。
3 对于新人来说一定会有几个问题
1 so中信息存储到全局的链表,链表在哪里?
2 registerNative 注册又是在哪里 ?