在 Unity 引擎中,SO文件作为原生代码的核心载体,承载了游戏核心玩法逻辑、加密算法、支付验证等关键模块。这意味着,一旦破解者成功逆向分析SO文件,游戏的内存修改、协议破解、外挂开发都将变得轻而易举。
破解者会采用静态分析工具(如IDA Pro、Ghidra)读取SO文件的导入/导出表。如:通过检索libc.so、libcrypto.so等系统库的导入符号,破解者可以定位到网络发送、文件读写、加密解密等关键API的调用位置。

SO导入函数为破解分析提供了非常有用的线索
既然Unity SO文件导入表中的内容对逆向分析帮助这么大,是不是可以把导入表去掉或者不使用导入函数呢?
一个空白的C代码工程,代码里面不调用任何API,编译后也有10个左右的导入函数,因为编译器自动引入的运行时库也需要依赖系统API。如果直接把导入表删除,SO加载会因找不到导入表而直接报错,APP无法正常运行。
那是否可以通过技术手段把导入表清除掉,同时也让SO能正常加载?这样操作会面临几个高难度技术问题:
● 没有导入函数,不能调用任何系统API,但是被加固SO会调用很多API,这些API地址如何在不使用系统API的条件下获取,像dlsym这样的函数也没有导入,不能使用。
● 理论上可以自己从系统模块里解析所有函数地址,但是实际上,Android4.4到7.0系统有些函数没有在系统模块里导出。
● 同样一个API名字,可能有多个系统模块导出,如何确定哪个才是正确的?如果用错了,会导致进程崩溃。
● 兼容模拟器问题。主流模块器都是在x86 CPU下运行的,其对arm指令集的兼容使用了很多类似硬编码的手段,会对特定函数有非常规的处理。
尤其是在运行非x86模块的时候,进程里同时存在两套指令集模块,处理尤其复杂。
如果存在导入函数,这些工作都由系统完成,无导入函数的话,需要把这些系统规则在没有任何文档的情况下分析清楚。
FairGuard技术团队凭借多年安全技术积累,完美解决Unity SO加固技术难题。实现了业界首创的无导入函数Unity SO加固方案,该方案已接入多款热门游戏并验证了出色的保护能力。
下面是FairGuard无导入函数SO加固后的效果,Imports下面无任何函数:

Unity SO加固后无导入函数的效果
除了无导入函数的实现,FairGuard加固方案还提供了如下安全功能:
导出函数清除和加密
将导出函数进行清除或者加密。不给破解者留下导出函数的分析线索。
虚拟化elf结构
对SO进行结构虚拟化,使得SO原始结构被破解重构掉,无法还原出原始SO,也就无法脱壳。
系统调用接管
系统函数可被通过动态Hook的方式监控调用参数,Unity SO加固后对这些系统函数进行接管,使得动态Hook无效。
global-metadata.dat 文件加密
加密 global-metadata.dat 文件,同时做到对开发者透明。开发者只需使用加固工具运行一条命令行,即可实现加密,不需要上传额外文件。
丨结语
FairGuard作为专注于游戏安全领域的第三方服务商,致力于帮助游戏公司解决外挂和破解问题,为游戏提供深度一体化的加密保护方案。
目前产品已经被FunPlus、三七互娱、恺英网络、心动、杭州电魂等多家头部公司采用,接入600+款热门游戏。欢迎访问 www.fair-guard.com 了解试用。
产品咨询联系方式:
QQ:2079128588
微信:fairguard01
技术交流QQ群:1105310296
