行业动态
XSDK(手游平台SDK):iOS中的代码混淆工具
2021-03-25

在IOS版本的移动游戏平台SDK中,除了AppStore官方付款外,我们还集成了第三方付款(WeChat Pay H5和Alipay H5版本)。如果用于企业签名,则无需对其进行处理,只需直接使用即可。但是,如果我们需要列出AppStore,则需要阻止第三方付款。我们在后台设置了开关,并在后台直接切换了付款方式。列出以供审核时,它将切换为Appstore付款;批准后,它将切换为第三方付款。由于第三方付款是H5付款方式,因此计算机审核不会检测到该付款方式。同时,为了防止抽查,还可以设置后台设置,将每次付款的次数设置为AppStore付款,然后使用第三方付款以降低抽查的风险。

但是仅仅做到这一点还不够。如果您需要将此SDK用于多个游戏或多个背心。为了防止同一代码被4. 3或代码标记的风险,我们需要混淆SDK的代码,并一次生成一个背心SDK。

关于IOS代码的混淆,我已经查阅了Internet上的许多文章。模糊处理的原理是基于多年前纯字符的随机替换。根据当前的计算机审阅政策,很难通过审阅。还有一些混淆工具,但是它们是按时间收费的。

所以,我们来谈谈U8SDK下的XSDK(移动游戏平台SDK)项目中IOS中的代码混乱。

如果在开发之初,开发人员具有丰富的经验或丰富的操作经验,并且事先认真处理了混淆问题,那么混淆将非常简单。您可以预先指定代码编写规则,以确保类方法变量的唯一性。例如,所有类均以X开头,所有方法和函数均以F开头,所有属性均以P开头,所有内部变量均以S开头ios开发代码混淆,依此类推。然后,在随后的写混乱中,可以完成几行代码。

但是我相信大多数项目,例如XSDK,可能都是事后调查。仅在有必要这样做时,我才发现随意命名代码的代价。但是,为了方便混淆,无法重写该框架,并且该程序也不愿意。

因此,我们只能付出一些努力来编写模糊的脚本。我们使用python来编写模糊的脚本,因此使用python来执行此操作是适当的。

首先,让我们确定混淆目标:

ios开发代码混淆

列出了混淆目标,让我们设计混淆点。

一、单词替换

混乱,即替换,用新名称替换旧名称。以前,许多Internet都使用纯随机字符来代替,但是当前的方法具有很高的风险,并且很容易被Apple所隐藏,以隐藏该功能。

因此,我们使用两字数据库的形式进行混淆。我们准备两套词库。一套是常用的单词词典(大约1000个词汇);另一个是程序中常用的词库(约100个词汇)。

在混淆后生成新名称时,我们会根据需要从两组词库中拼接随机单词。

例如,当类名混淆时,当前存在一个类名AppStorePay。我们从拼接常用词汇开始,直到长度大于或等于AppStorePay的长度。然后,将程序字典中的随机词用作后缀。混淆的名称可能采用OneForTestListener的形式。似乎与正常的类名命名很接近。

在其他情况下,我们会记录一个已生成的新名称列表,如果新名称已经存在,请重新生成它们。防止重复生成的新名称引起问题。

二、令人困惑的想法

混合时,我们可以逐行混合,但是这样一来,误差可能会很大。我们希望执行混淆后,编译会一次通过,并且不需要手动修改某些混淆失败。因此,我们放弃了逐行混淆的方法。采用更精细的混淆方式。

除了混淆,我们希望尽可能地遵循通用的语法规则,而不是简单地适应XSDK项目。 (防止我们的其他项目在后续工作中也需要混淆)

首先,我们将所有代码文件加载到code目录中,因此我们设计了一个符合代码结构的级别:

ios开发代码混淆

如图所示,我们首先设计了四个类。

XFolder代表代码目录;

XClass类代表一个类文件;

XFunction类表示一个类中的函数;

XProperty类表示一个类中的属性。


393701618