即刻体验FairGuard加固方案!
免费试用游戏游戏安全保护, 对接专业技术服务!
免费体验Android SO模块逆向分析有一个非常重要的线索就是导入函数,so使用的系统api都可以在导入函数表里看到。
某手游保护SDK所用so的导入表
导入函数的存在给了分析破解者非常有用的信息,对应用破解帮助很大。既然导入表对破解分析帮助这么大,是不是可以把导入表去掉或者不使用导入函数呢?
一个空间的C代码工程,代码里面不调用任何API,编译后也有10个左右的导入函数,因为编译器自动引入的运行时库也需要依赖系统API。
如果直接把导入表删除行不行?没有导入表,so加载会因找不到导入表而直接报错,app无法正常运行。
那有没有技术手段可以既把导入表清除掉,同时也让so能正常加载呢 ?
这里有几个高难度技术问题:
1. 没有导入函数,不能调用任何系统api,但是被加壳so会调用很多api,这些api地址如何在不使用系统api的条件下获取,像dlsym这样的函数也没有导入,不能使用。
2. 虽然理论上可以自己从系统模块里解析所有函数地址,但是实际上,Android4.4到7.0系统有些函数没有在系统模块里导出。在这些系统里,有些函数任何系统模块都没有导出。
3. 同样一个api名字,可能有多个系统模块都有导出,如何确定哪个才是正确的,如果用错了,会导致进程崩溃
4. 兼容模拟器问题。主流模块器都是在x86 CPU下运行的,其对arm指令集的兼容使用了很多类似硬编码的手段,会对特定函数有非常规的处理。尤其是在运行非x86模块的时候,进程里同时存在2套指令集模块,处理尤其复杂。如果存在导入函数,这些工作都由系统完成,无导入函数的话,需要把这些系统规则在没有任何文档的情况下分析清楚。
这几个技术问题,任何一个被卡住,就无法形成可商用的加壳产品。正是这些问题的难度之高,目前还没有其它厂家能做出无导入函数加壳的实现。
FairGuard技术团队凭借10多年的安全技术积累,完美解决上述所有难题。做成了可商用的产品,并已被多个游戏采用,线上稳定运行。
下面是无导入函数SO加壳后的效果,Imports下面无任何函数
SO加壳后无导入函数的效果
除了无导入函数的实现,FairGuard SO加壳还提供了如下安全功能:
1. 导出函数清除和加密
将导出函数进行清除或者加密。不给破解者留下导出函数的分析线索
2. 虚拟化elf结构
对so进行结构虚拟化,使得so原始结构被破解重构掉,无法还原出原始so,也就无法脱壳
3. 系统调用接管
系统函数可被通过动态hook的方式监控调用参数,FairGuard so加壳后对这些系统函数进行接管,使得动态hook无效
4. 代码加密
So加壳是手游加固的基石,关系着手游加固的保护强度、兼容性、启动耗时等安全核心指标,尤其是对于游戏引擎加固。因此花了很多精力来打磨这块技术,构建自己的技术壁垒。
丨结语
FairGuard 专注于游戏加固与反外挂,为 Unity / Cocos / UE 等引擎的游戏提供深度一体化加密保护方案。
目前产品已经被FunPlus、Garena、三七互娱、游族等多家头部公司采用。TapTap排行榜以及买量排行榜上亦有多个游戏使用。
产品咨询联系方式:
微信:fairguard01