2018-05-17 10:39:59 u010960265 阅读数 10604
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

最近用户遇到苹果审核guideline4.3问题, 也就是大家说的马甲包4.3, 这里来说说原因。

首先,要看你是什么产品和使用的什么技术框架, 不同的框架对应的解决方案是不一样的。 
先说说为什么会遭受到4.3, 苹果的审核目前分为机器审核和人工审核。不喜勿喷!!!谢谢

1 机器审核

当前苹果机器审核的具体原理,估计只有苹果内部自己的人才知道, 而且这个审核原理应该也是会不断的升级和变化, 只是速度快慢而已。 具目前大家测试的结果来看, 当前主要原理是对App扫描。App扫描分为两部分, 一部分是对代码进行扫描, 一部分是对资源文件进行扫描。

  • 1 代码扫描部分主要是对编译器会对每个函数生成编译器内部才识别的函数名, 所以这里就需要针对不同的语言进行不同的修改,而且修改的量也需要比较大, 才能绕过苹果的识别库。 对代码进行修改可以人工进行修改, 比如函数增加一些默认参数啊,修改类名和函数名, 也是可以应对和解决的,只是比较费时费力。 如果想省时省力, 最好是写代码进行批量修改或生成。

  • 2 针对资源文件的识别, 主要是针对各个文件扫描出来的MD5进行比对,如果文件和苹果识别库里的App相似达到一定程度,就会触发4.3, 这时候我们可以人工增加大量小文件进行混淆, 当前技术实力强一点, 也可以通过代码进行生成。

2 人工审核

其实苹果4.3条款不是最近才有的, 苹果很久很久以前, 就一直有4.3这个条款存在。 只是以前一直都是人工进行4.3审核,那当然效率就很慢了。 被人工审核出来的, 基本上要么是被人举报, 要么就是你的App实在是太明显了, 比如被大家做烂了的传奇类游戏, 仿非常出名的游戏(梦幻西游、王者荣耀), 不然一般是很难查出来的。

但是, 凡是都有个但是, 如果你的账号之前就有个4.3被查出来了, 后面再次提交的时候,账号上有4.3的记录, 苹果审核人员这时候就会高度怀疑了, 这种情况被人工4.3的概率就要大很多了。

注:H5类游戏和应用是很容易被人工4.3的, 你再如何混淆都绕不过人工4.3

3 总结

当然, 以上都是我猜的, 把握不是100%, 但也能有个9成, 因为已经有大量成功过审经验。我们写了有不少针对代码扫描和资源扫描的批量自动生成和修改的脚本代码。 

以上就是4.3的大概原理, 希望大家都能通过审核, 如果有希望用上我们写的自动混淆脚本的, 我们可以帮您解决问题, 节省您的宝贵时间。让您自己不需要修改任何东西就能通过苹果审核,解决4.3问题, 早日上架,早上赚钱。 联系QQ:3095501410

这里写图片描述

君凯商联网-iOS-字唐名僧

2018-05-21 13:39:24 lyzz0612 阅读数 17876
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

本文只适用于机审 4.3,区分机审和人审请找你们后端或运维看看审核期间有没有IP登陆。

1. 机审原理

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

1.1 首先OC和C++代码编译出的二进制文件,有点经验和反编译过的应该都知道:
  • 删注释神马的是没用的,因为注释是不会被编译进包里
  • 改类名是靠谱的,因为反编译出来能看到类名,改掉它显然是会造成包不一样
  • 增改函数也是靠谱的,同样是因为反编译能看到
  • 改文件夹或者文件名应该是不太靠谱的,编译的时候会根据路径来引用查找,编译之后应该是根据在包里的相对内存地址来查找类和函数,跟你编译时的文件名称和路径关系应该不大。不过为了方便和代码的统一,更换时可以顺便换了。
1.2 然后是一些资源文件如图片、音效
  • 路径和文件名相当可能或者绝对是有用的,可惜修改代价有点高
  • 文件的md5值以程序员的角度来看才是真正区分文件是否一致的标准,我们有理由相信我们的苹果同行也用了这个来判断是否重复。所以一些修改md5值的操作如添加空行、注释、额外字节,应该也被考虑加上。
1.3 最后是相似的判定,应该是相似率高于某个值才认为你跟其他的重复了,针对像改资源文件名这种代价太高的可能暂不考虑的操作,我们只能添加垃圾文件提高总值来降低重复率了。

2. 混淆方法

2.1 修改类名文件名

先说下手动操作,无非是在xcode上修改文件名类名,然后在可能引用的地方替换类名和文件名(header),要注意的地方是替换的时候要选中匹配大小写;然后是文件夹名称跟文件名一样的时候,可能文件夹名称也要跟着改名,否则替换之后路径引用可能找不到。
如果是要脚本批量操作,那最好先对工程整理下,确保以下几点能让脚本写的更简单更可靠:

  1. 要修改的类和文件最好都放到一个文件夹下,万一搞出事不用东找西找,备份和回滚也简单一点
  2. 类名和文件名尽量带上前缀,这样修改只替换前缀即可,也不太会跟函数名、变量名什么的重复
  3. 最好过一遍把不能修改类名的列出来,比如外面太多地方调用的、第三方的类库。在写脚本的时候把他们排除在外

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

2.2 添加垃圾函数

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

2.3添加垃圾类

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

2.4修改资源md5值

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

2.5创建资源垃圾文件

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

3. 其他事项

上面的基本都能脚本自动化执行,完了后工程名最好也在xcode改下;info.plist会被打包进ipa,最好也多加几个字段上去;target能改也改下方便识别;scheme关联到导出的ipa文件名,不是特别麻烦也顺手改掉;包名、启动页、图标应该都是基本的东西不会被忽略。

这些改完之后,希望你自己也不认识它了!
相关工具会慢慢整理到iosMixTools,欢迎大家讨论和提Issues。

2018-08-17 14:02:25 u013857988 阅读数 5789
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

一. 先说说为什么要制作马甲包  (马甲包应用比较广泛的几种app:金融类,彩票类,付费视频类)

①防止app因为违规被苹果下架后"一无所有"

付费视频类,彩票类的app多少都会违反苹果的一些规范有被下架的风险,马甲包可以在app被下架的时候顶上去,那什么情况下会被下架呢

1.之前审核的时候用到开关,审核过了之后APP的内容和审核时的内容差异较大,苹果复查的时候发现被下架

2.用户举报,被下架

3.竞品方举报,被下架

②为主app导入流量,因为马甲包一般和主app用的是同一套后台,用户数据上是互通的,可以通过在马甲包里添加跳转链接等方式引导用户去下载使用主app,往主app里导入流量

③广撒网,增加收入.

之前做过付费视频APP,其实那个时候付费视频的黄金期已经快过了,上架的第一个APP通过做aso优化,一天的用户充值可以达到15000左右,但是再想提高充值就很难了(针对我们当时APP的情况).但是再上架一个功能一样马甲包,通过aso优化很轻松就能做到日充值10000左右,可以脑洞大开一下如果上架100个马甲包会是一种怎样的体验.其实一般的小公司能做上架七八个就很够用了,日流水近10万,很可观了

二.如何制作马甲包,注意事项

①先说说机审

如果是机器审核被拒,一般收到的被拒信息第一句话基本上是这样的:

Guideline4.3 - Design - Spam

Yourapp duplicates the content and functionality of apps submitted to the AppStore, which is considered a form of spam.

苹果会对你的代码进行扫描,如果发现跟已经上架的app代码重复度高就会被认定为马甲包,也就是4.3,下边说说如何规避

1.添加大量的垃圾文件,就是导入一些不调用的文件

2.往之前的代码中添加费代码,进行混淆(记住添加注释是没有用的,)

3.文件夹,文件名重命名

4.资源文件的属性进行修改,就是md5编码与之前的资源文件不同(其实很简单,让ui把素材放入ps中再重新导出就可以了)

5.app重命名

②人工审核

如果是人工审核被拒,一般收到的被拒信息第一句话基本上是这样的:

Guideline4.3 - Design - Spam

Wefound that your app provides the same feature set as other apps submitted tothe App Store, which is not appropriate to the App Store.

1.UI界面尽量跟之前有大的区别(这里可以做开关)

2.修改截图,icon,logo,ui,ue,url,界面风格,配色

3.马甲包功能不能太简单容易被苹果送上2.1大礼包

其实苹果2018年5月份之前对马甲包的审核力度还不是很大,但是七月份之后苹果对马甲包的审核处理力度增大了很多.是因为在这期间世界杯的到来,很多博彩类的app马甲包上架,这种情况也被央视报道,说苹果审核不够严谨,应用市场上充斥着大量的马甲包,导致应用市场混乱,引起了苹果的重视,大量下架了这类app,理所应当马甲包的上架审核也严格了很多.

在这之后马甲包上架就更加困难了,苹果对代码层面的审核也严格了很多,所以马甲包的代码混淆就要比之前力度更大,包括资源文件,费代码,混淆都要尽量多的添加和修改.马甲包的功能也要尽可能的完善丰富起来(功能单一容易被2.1大礼包),而且这些功能不能太大众化,同类产品也很用可能用类似的马甲.

总结一下

说起来简单:就是代码尽量多的混淆,跟之前包的代码有大的区别.马甲包内容尽量与众不同,功能尽量完善

做起来难:做一个完美的马甲包其实跟做了一个新的App差不多了

 

ios开发技术,提交审核讨论群 加qq群:695614778 一起讨论

2019-09-25 15:00:21 u014220518 阅读数 1085
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

前言

最近iOS卡审严重,很多小伙伴都被拒了,也有很多小伙伴收到4.3礼包,这里就说说4.3吧!

规避4.3的重心,切断当前马甲包与以往马甲包的所有相似性关联;

相似关联

a. ipa包特征;    

b. 开发者帐号;       

c. 打包电脑;      

d. 上传IP;      

e. 材料相似;

分项细述

1. ipa包特征:

包括有代码相似性,资源相似性;

代码相似性解决办法:

a. 已有代码的混淆(改类名、改函数名、改属性名、垃圾代码、垃圾类等等)

b. 添加一些无用的代码;

:详细代码混淆ZFJObsLib https://zfj1128.blog.csdn.net/article/details/95482006

资源相似性解决办法:

a. 资源文件改名;

b. 适当添加一些无用的资源;

c.修改资源文件的HASH值;

翻新工程:

a.修改工程名;

b.修改工程目录结构;

2. 开发者帐号:

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

3. 打包电脑:

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

4. 上传IP:

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

5. 材料相似:

itu后台材料如宣传图,ICON,版权人不要出现相同;

注:即使是前边没审核过的包,也不要跟他们有关联。尤其是前边被4.3拒绝的包,更不能跟他们有相似性。

混淆相关

最重要的就是代码混淆了,混淆相关的可以移步看我的另一篇博客:

?《Python-iOS代码混淆-马甲包混淆工具(Python脚本混淆iOS工程)》?

2019-01-04 10:24:12 weixin_36255868 阅读数 1108
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

iOS 马甲包过包注意事项

核心代码(非马甲代码)的注意事项

  1. 版本控制
    由于开发过程中核心代码会随着需业务需求的改变,需要考虑做好版本控制,个人认为可以将核心代码通过git进行版本控制。
  2. 避免”代码重复“的问题(苹果审核规则4.3)
    随着核心业务功能的增加和代码量的增加,核心代码也需要考虑“代码重复”问题,个人建议可以将核心代码打包成.a的SDK,只暴露方法调用的.h文件。
  3. 避免“关键字”问题
    核心代码里避免敏感的关键字,如“alipay”,“支付宝”,“彩票”,“微信支付”等,如果确实需要上述字符串,可以进行base64编码后进行处理。

马甲包产品设计的注意事项

  1. 苹果审核4.2原则问题(最小产品设计原则)
    从前期提交马甲包的尝试来看:没有服务器端交互的App不容易过审;竞品较多并且没有明显特色的App不容易过审;苹果提倡的设计风格的App容易过审(参考Year Timer和Apple Design文档)。
    自己设计的马甲产品,从根本上避免了4.3(代码重复)问题,但是如何让设计的产品更能符合苹果审核员的“胃口”,避免4.2原则,还需要继续尝试。
    以后的产品设计可以以苹果审核员为最终用户,忽视所谓的“虚无缥缈”的用户体验,才能系统的解决4.2问题。

马甲包开发过程中的注意事项

  1. 通过接口和时间双重开关确认是否进入cp主页
    由于考虑到苹果审核过程中会抓取数据包,所以设置一段时间(两周)之后去请求cp主页链接的接口,在苹果审核过程中,App只会显示马甲包的内容。

  2. App的敏感权限问题
    着重考虑App内的地理位置,通讯录,麦克风,相机,相册等App的敏感权限,针对不同的权限在info.plist中增加相应的权限说明,注意权限说明一定要够具体,比如:“App中的XX功能使用到了XX权限,需要用户同意”。

  3. App的机型适配问题
    马甲包在UI的展示上应满足基本的适配问题,特别是iPhone X,iPhone XR,iPhone XS等全面屏机型。对于不支持iPad的App,也应该考虑App在iPad上运行时的展示情况,不能有明显的遮挡,显示内容超出范围等情况。从审核截图来看,苹果审核员很“喜欢”用iPad审核App。

  4. App中的敏感内容问题
    有个马甲App由于可以提交色情,暴力内容被拒。在以后的产品开发中,需要针对图片和内容提交的App增加举报,屏蔽等功能,避免由于此类问题被审核员拒绝。

提交App Store 的注意事项

  1. App的预览图
    由于苹果审核员可以从你提交App的预览图上得知你用户的大致功能,所以需要尽可能多的提交App预览图。

  2. App的描述,关键词
    一定要写符合App功能的描述和关键词,否则会因为基本信息与应用本身不符被拒。后期可以考虑加上cp的关键词,但是需要在本地化的基础上进行添加,比如说在日文,韩文的描述里增加中文的关键字。

  3. App的隐私政策和技术支持URL
    苹果审核员会有一定概率审核你提供的隐私政策和技术支持URL,所以一定按照网上的模板和要求准备多套url,可以考虑在简书或者CSDN上发表相关的个人博客和个人文章代替。

  4. 神奇的2.1大礼包
    由于在同一台电脑或者同一个ip提交过多(大于3个)App,会被2.1大礼包。需要此种情况不要着急,也不要急着重新提交包,逐条用英语进行回复,表明没有违反相应的政策,请苹果审核方指出具体违反了哪一条。

马甲包的更新问题

  1. 线上版本的屏蔽
    马甲包是可以进行更新的,但是苹果审核员会根据上一个版本安装测试新版本,线上版本一定要做好屏蔽cp主页显示的工作。目前的做法是在请求cp主页时,会根据bundleId判断是哪个马甲包,针对不同的马甲包做相应的屏蔽。
没有更多推荐了,返回首页