美文网首页iOS入的那些坑iOS开发实录iOS第三方资料收集
如何混淆JSPatch热修复框架以绕过苹果的机器检测

如何混淆JSPatch热修复框架以绕过苹果的机器检测

作者: ccSundayChina | 来源:发表于2017-04-07 13:05 被阅读2407次

    本文方法已过期,不建议读者使用,等有新的方案后,再更新文章。

    前段时间, bang神 一手创建的iOS热修复框架被苹果强制下线的消息,真是在技术圈里让很多小伙伴们坐不住了,这个15年就问世的框架具备很多之前的类似框架所不具备的优点,更加的小巧便捷,并且处于持续维护中,不仅如此,还由此成为了一个生态圈,bang神还为此开发了oc转js的代码转换器、可以自动提示的JSPatchX插件、以及基于这个技术的JSPatchPlatform平台。总之让大伙可以很方便的进行patch。
    然而总有一些人想用它做坏事,以至于苹果爸爸震怒了,不再让人使用这个框架,所有集成了jspatch的软件都被强制下线,在这个风头下,很多人就开始唱衰JSPatch,典型代表就是那位所谓 有故事的
    卓同学的文章,写的好像JSPatch已经死掉了一样。我想说你丫的,以后别用!
    然而相信一句话,那就是方法总比困难多。苹果的检测无非是机器检测,扫描关键字而已。所以我们就做了最简单的混淆方案。
    首先是要移除掉原来项目里的JSPatchPlatform平台,去github上下载JSPatch源码,将其中的三个重要文件拖入你的项目中,分别是JSEngine.m、 JSEngine.h、 JSPatch.js。然后对这三个类重新命名,最好不要出现关于patch,engine之类的字眼,而是用一些根本不会联想到jspatch的词语来命名。改个类名是容易的,但是要想把里面的所有方法都进行修改的话,可能工作量会比较大一些,于是我们又参考了念茜的一篇文章对代码的方法名做了混淆。混淆后在通过class-dump工具检测头文件如下,已经分不出我们用了什么了。

    混淆后的代码.png

    其中有一点要注意的是,那就是不能按照念茜的博客里讲的,将codeObfuscation.h文件放在pch文件里,因为这个文件每次编译都会改变,放在pch里的话,会导致每次都要重新编译所有的文件,降低程序启动的速度,可以哪个文件需要就放在哪个文件里,这是需要注意的一点。

    既然我们用的是源码,那就要自己做代码下发的工作了,并且安全性也要有保障,为此我们做了一个上传代码的后台mac程序,里面运用RSA非对称加密对代码进行了加密,将加密后的代码字符串上传服务器,app端,在进行相应的解密就可以了,安全性可以媲美JSPatchPlatform平台。关于如何编写mac程序,这里不多讲,如何进行RSA非对称加密,也不在本篇文章的讲述范围内,读者可以到这里看如何自己动手做一个上传JSPatch补丁代码的Mac应用,最后附图一张mac程序的大致样子。

    后台mac应用

    至此就完成了JSPatch的混淆工作,最终我们也顺利地通过了苹果的审核。后来看到bang神的一篇文章,里面提到的思路跟本文大致相似。

    最后附上本文的demo,
    下载下来后运行demo,会看到控制台输出如下提示,说明就已经成功了。

    success.png

    使用的时候,可以将codeObfuscation.h、confuse.h、func.list三个文件挪到根目录下面,然后再target-BuildPhases 中添加RunScript,在RunScript中输入/bin/sh $PROJECT_DIR/confuse.sh即可。

    注意:每次编译程序的时候,codeObfuscation.h文件都会发生变化,因为每次都会生成不同的随机字符串,我们在提交代码的时候忽略掉这个文件还有一个symbols文件即可。另外使用的时候,建议对类名与方法名重新定义,而尽量不要采用demo中的类名。

    最后附一个小广告,开通了个人的公众号,不仅仅是程序猿,公众号接入了图灵机器人,你可以跟它对话哦。这是一个旨在分享知识、技术、思绪、情怀的公众号,包括但不局限于逗比。。

    个人公众号二维码.jpg

    相关文章

      网友评论

      • rgcyc:博主,求问下现在有什么混淆方式可以通过苹果审核?JSPatch平台提供的framework为什么可以通过审核?
      • ccSundayChina:建议大家暂时先不要按照以上的方式操作了。
        ccSundayChina:@02edb7ab0869 嗯嗯,先去掉吧,现在审核变的更严了。。在思考其他的解决方式
        02edb7ab0869:昨天提了一个混淆后的版本,被打回来了。
        02edb7ab0869:是不是现在混淆也能被检测到了:disappointed_relieved:
      • 4d16197b657b:如果代码混淆可行 那么应该可以直接代码混淆把类名方法之类的统一处理掉的吧
        ccSundayChina:@4d16197b657b 我这最新的是4月28日上传的,已经过审了。
        4d16197b657b:博主最近有上版本吗,我的刚刚混淆被拒了
        ccSundayChina:@4d16197b657b 可以的,混淆所做的也是这件事情,只是自动化了而已。
      • 989078cec84b:其实这种东西用不用主要看公司,国外公司和很多独立开发者是不用的。
        ccSundayChina:恩,技术国情不一样。。
      • ccSundayChina:后期会将后台的Mac程序开源出来,欢迎来拍砖。。
        ccSundayChina:https://github.com/sunday1990/JSPatch-BackgroundOperation
        ccSundayChina:之前的Mac程序,有一点小问题,文件的路径不对,给大伙造成不便了,可以去下载最新的。。
      • Keep丶Dream:你说的那个卓同学吹牛挺厉害不知道技术咋样
        ccSundayChina:啊哈哈,这样说好么:joy:
      • 大牛在郑州:你说的那个卓同事感觉中学作文写的不错
        ccSundayChina:文章写得很逗。哈哈。。
      • xietao3:是没故事的卓同学:flushed:
        xietao3:顺便问一下贵公司APP混淆JPEngine和JSPatch.js之后,审核过了吗?
        xietao3:@ccSundayChina 卓同学赶风口的能力特别强
        ccSundayChina:哈哈,我晓得的:joy: ,卓同学应该开的起玩笑吧。:sweat_smile:

      本文标题:如何混淆JSPatch热修复框架以绕过苹果的机器检测

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