美文网首页移动知识iOS APP加固保护
iOS苹果审核被拒 4.3怎么办?iOS马甲包审核以及常见审核问

iOS苹果审核被拒 4.3怎么办?iOS马甲包审核以及常见审核问

作者: fac0a1764c91 | 来源:发表于2018-11-02 14:37 被阅读482次

    一、前言

    1. 苹果的审核,分为机器审核和人工审核; 目前大多数4.3是死在机器审核阶段。(如何区分机审与人审主要看被拒原因,这里就不贴图了,最可靠的信息看后台)

    2. 苹果对开发者帐号会进行权重管理;权重越低的帐号,审核越严格; 同样的包,可能在权重高的帐号上就能过,在权重低的帐号上就是4.3。

    3.目前苹果已经开始对已上架的包也进行相似应用检测,即首次上传的应用与更新的应用.

    二、机审4.3原理

    我们虽然无法得知苹果实际的机审原理,但从程序员的角度还是能分析出一些东西的。

    1.1 首先OC和C++代码编译出的二进制文件,有点经验和反编译过的应该都知道:

    删注释神马的是没用的,因为注释是不会被编译进包里

    改类名是靠谱的,因为反编译出来能看到类名,改掉它显然是会造成包不一样

    增改函数也是靠谱的,同样是因为反编译能看到

    改文件夹或者文件名应该是不太靠谱的,编译的时候会根据路径来引用查找,编译之后应该是根据在包里的相对内存地址来查找类和函数,跟你编译时的文件名称和路径关系应该不大。不过为了方便和代码的统一,更换时可以顺便换了。

    1.2 然后是一些资源文件如图片、音效

    路径和文件名相当可能或者绝对是有用的,可惜修改代价有点高

    文件的md5值以程序员的角度来看才是真正区分文件是否一致的标准,我们有理由相信我们的苹果同行也用了这个来判断是否重复。所以一些修改md5值的操作如添加空行、注释、额外字节,应该也被考虑加上。

    1.3 最后是相似的判定,应该是相似率高于某个值才认为你跟其他的重复了。

    三、解决方案(通用思路)

    人工4.3:  A.大面积更换UI,嫌麻烦直接更换一下主题色,Logo,预览图;   B.如果在原账号上提审,一定要更换BundleID,原BundleID打个空包上传,icon随便用一个,删除itc所有资料;  C.搞定; D.如果要换账号,一定要混淆代码(需要混淆哪些如下);

    机审4.3: A.混淆代码.B.搞定

    1. 切断当前马甲包与以往马甲包的所有相似性关联;相似性关联包括:ipa包特征;开发者帐号;打包电脑;上传IP(不确定);材料相似;收款账号(不确定);

    2. 分项细述:

    1). ipa包特征:包括有代码相似性,资源相似性;代码相似性解决办法:    a.已有代码的混淆(改类名、改函数名、改类名)    b.添加一些无用的代码, 切记一定要调用, 这是重点;  资源相似性解决办法:    a.资源改名;    b.适当添加一些无用的资源;

    2). 开发者帐号:两个马甲包不要关联到同一个开发者帐号的信息;比如打包时关联。

    3). 打包电脑:有条件的最好用不同的MAC来打包(每台MAC上最好打包马甲包不要超过5个)

    4). 上传IP:上传马甲包时,IP不要跟其他马甲包的IP相同;

    5). 材料相似:itu后台材料如宣传图,icon,版权人不要出现相同;应用内部UI最好也做调整,规避人工4.3问题.

    如果能做到以上的几点,基本上都能通过4.3。目前,经过我们3个多月测试,打包电脑和上传IP没有关系,通过分析上架协议也可以得知,但是为了切断关联,尽可能的做到切换关联吧.

    四、代码混淆解决方案

    4.1 修改类名文件名

    先说下手动操作,无非是在xcode上修改文件名类名,然后在可能引用的地方替换类名和文件名(header),要注意的地方是替换的时候要选中匹配大小写;然后是文件夹名称跟文件名一样的时候,可能文件夹名称也要跟着改名,否则替换之后路径引用可能找不到。

    如果是要脚本批量操作,那最好先对工程整理下,确保以下几点能让脚本写的更简单更可靠:

    要修改的类和文件最好都放到一个文件夹下,万一搞出事不用东找西找,备份和回滚也简单一点;

    类名和文件名尽量带上前缀,这样修改只替换前缀即可,也不太会跟函数名、变量名什么的重复;

    最好过一遍把不能修改类名的列出来,比如外面太多地方调用的、第三方的类库。在写脚本的时候把他们排除在外;

    脚本的话就是遍历文件,判断前缀、是否排除在外,修改文件名类名,在其他文件中查找替换。用python的话应该不是什么大问题。一个小技巧是改完后可以替换一下xxx.xcodeproj/project.pbxproj里的相应字符串,这样xcode打开工程的时候就不用手动再添加进来。

    4.2 添加垃圾函数

    OC头文件的声明必然是在@interface @end之间,实现是在@implementation @end之间,C++的大部分应该是以}结尾,直接在相应的地方插入垃圾函数,模板可以直接写个HelloWorld输出个随机字符串。(个人建议,不要太简单,可以参考文章末尾我加的方法,要有一定的复杂度)在这一步随机名称是个坑,可以去网上找下常见英文单词,格式化后把太短的、太长的、看着不爽的,最重要的是语言的关键字如break,false,if,bool之类的删掉.

    4.3添加垃圾类(经过我们大量的测试,可以不加)

    根据我们猜测的路径应该是不影响打包的,所以我们可以简单的把垃圾类文件都放到同一个文件夹下方便管理,写好4.2后这一步应该就是顺手的事情了 。我不太确定的是如果外部不引用这些垃圾类,编译之后它们会不会因为太独立而被检测认为是垃圾代码。所以保险起见,我实现的时候写了一个单独的头文件include了所有这些生成的垃圾类,然后在外部include了这个单独的头文件

    4.4修改资源md5值(经过我们大量的测试,可以不改)

    资源文件有很多类型,通常来说文本文件添加随机数量的空格或空行应该就可以了。图片的话常见的png和jpg都是有固定的结尾字节块的,png是00 00 00 00 49 45 4E 44 AE 42 60 82,jpg是ffd9,用16进制查看工具打开图片应该能注意到这个规律,也可以参考下常见图片文件格式简析。在结尾字节块添加的内容是不会影响图片本身显示的,我们可以利用这个来改变图片的md5值。音效应该也有相应的格式,期待大佬科普下!

    4.5创建资源垃圾文件(经过我们大量的测试,可以不改)

    跟4.3类似,不过这个最好也随机下创建文件夹显得真实点,一些文本文件是什么格式都有各自定义,png和jpg的话就随机写任意长度的任意字符,最好结尾加上相应的结尾字节块,防止4.5后又执行4.4导致出错。

    五、分享其他一些材料,希望对你有帮助

    1.贝徕网络分享的卡审被拒攻略:贝徕网络被拒卡审攻略PPT(已授权)

    2.官方App Store Connect:官方 App Connect

    3.独立开发者CoderDwang开发的管理多AppID应用iOS端,目前可查看审核状态,被拒信息,功能会陆续完善补充,下载地址:管理多账号的App Store Connect

    3.我们自己混淆项目的顺序可供参考.

    4.我们插入的垃圾方法以及调用,可供参考

    有帮助的话,记得打赏噢~

    打个广告:

    如果觉得上述操作过分复杂,可以来找我哦. 但是目前只支持OC与Swift,新增Unity3D,其他语言没尝试过,

    我这边需要你提供源码, 可以运行的工程就行,核心功能你可以移除或者做成库.

    淘宝:

    QQ: 5894672

    相关文章

      网友评论

        本文标题:iOS苹果审核被拒 4.3怎么办?iOS马甲包审核以及常见审核问

        本文链接:https://www.haomeiwen.com/subject/yeqcxqtx.html