美文网首页ios专题
iOS 初探代码混淆(OC)

iOS 初探代码混淆(OC)

作者: iOS雯Ping | 来源:发表于2018-06-01 21:26 被阅读294次

    前言

    自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了。但是最近,客户方面提出了代码安全的要求。说是要做代码混淆,这方面的工作之前从来没有接触过。然后就上网查了一下,原来有很多应用程序都做了代码混淆。看来是我固步自封了......

    起因

    使用classdump对原程序进行dump,可以dump出所有源程序的函数所有信息:源程序所有函数类型,变量全部泄露。这样的话,让攻击者,也就是黑客们了解了程序结构方便逆向。因为在工程中,我们这些变量或函数命名都是有一定可读性的,例如跟用户名相关的,那一般里面会有 userName,跟密码相关的一般会有passWord,这样定义也是为了我们自己代码可读性更强,我们修改的时候才更加的方便。但是我们相信,这么个定义法,我们只是希望方便我们自己,我们可不希望方便黑客们去破解我们的APP。总结出来就是一句话:“会把你项目中的所有方法和变量都罗列出来”。

    开始混淆:

    1.

    在进行代码混淆之前,我们需要在我们的项目中增加两个文件:confuse.sh&func.list
    我们打开我们的终端命令行

    <figcaption style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(51, 51, 51); font-family: 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; font-size: 17px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: 0.544000029563904px; line-height: 27.2000007629395px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"></figcaption>
    

    先cd到你项目的路径下,然后回车

    然后在终端中分别输入 touch confuse.shfunc.list然后回车

    <figcaption style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(51, 51, 51); font-family: 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; font-size: 17px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: 0.544000029563904px; line-height: 27.2000007629395px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"></figcaption>
    

    这个时候打开我们的项目文件夹,就能看到多了两个文件。这个时候我们打开我们的工程,把我们创建的这两个文件添加到项目中去

    <figcaption style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(51, 51, 51); font-family: 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; font-size: 17px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: 0.544000029563904px; line-height: 27.2000007629395px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"></figcaption>
    

    2.

    这个时候我们点击我们的confuse.sh文件可以看到里面的内容是空的,我们要填一些代码进去,点这个链接地址https://blog.csdn.net/yiyaaixuexi/article/details/29201699可以把这位大神的代码粘贴到自己的confuse.sh文件中

    3.

    在项目中添加一个.PCH文件。如果你说你不知道怎么添加.pch,没关系。这里有个链接地址能帮到你ios中pch文件的创建与配置(https://www.cnblogs.com/wzdevelop/p/7339262.html)
    成功添加.pch文件之后,我们就要在.pch文件中添加这么一句代码#import"codeObfuscation.h然后我们编译一下,是不是报错了?是不是这样的?

    <figcaption style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(51, 51, 51); font-family: 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; font-size: 17px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: 0.544000029563904px; line-height: 27.2000007629395px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"></figcaption>
    

    我们先把报错的代码注释掉,然后去项目的Build Phases中的左上角的+号,选中那个New Run Script Phase,然后如下图所示,把你的confuse.sh文件的地址写进去

    <figcaption style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(51, 51, 51); font-family: 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; font-size: 17px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: 0.544000029563904px; line-height: 27.2000007629395px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"></figcaption>
    

    然后返回我们的PCH文件,把我们刚才注释的那行代码打开,然后再编译一下子,是不是通过了。这个时候就证明,代码混淆的前期工作,我们已经做好了。

    4.

    然后接下来的就是如何进行代码混淆了。

    这个时候你就找到一个你想要混淆的类(.h .m)文件都可以。把你想混淆的代码复制一下,然后粘贴到我们的func.list文件中去。然后编译一下,然后把切换到这个界面

    <figcaption style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(51, 51, 51); font-family: 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; font-size: 17px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: 0.544000029563904px; line-height: 27.2000007629395px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"></figcaption>
    

    我们就可以看到,我们定义的属性或者方法名都被混淆了。

    5.

    打完收工,Over!!!!!

    6.

    注意:该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆

    7.

    传送门:Objective-C代码混淆(https://github.com/cAibDe/CodeConfusion

    此文在一个微信公众号发现的对话,若有侵权请联系晓雯的微信,把文章删掉。


    (其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS学习交流群687528266,不管你是小白还是大牛欢迎入驻,大家一起交流学习)

    相关文章

      网友评论

        本文标题:iOS 初探代码混淆(OC)

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