手把手教你反编译别人的app

作者: kuailejim | 来源:发表于2016-04-25 00:01 被阅读56132次

    虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈。此文想以实际例子出发,告诉大家,如何去反编译一个app,并且从某个角度来说,iOS没有传说中的“安全”。

    这里只最简单的结论给大家,具体原理以及工具的详细使用,请各位自行Google,为什么这么做呢,因为我想用最简单的语言,让没有汇编基础的同学也能明白。

    将用以下几个方面来阐述我的观点:

    • iOS app可以“有条件”地被反编译
    • 脱掉App Store给“二级制文件”穿上的外衣
    • 如何利用工具去反编译
    • 在感兴趣的地方生成伪代码
    • 如何预防反编译
    iOS app可以“有条件”地被反编译

    首先,告诉大家一个不幸的消息,上架至App Store的app,被apple加密了。所以标题才是“有条件”才能进行反编译,令人欣喜的是,在debug下产生的ipa或者是release下的ipa包或者是渠道包(各种应用市场能下的ipa包)都能直接反编译。

    脱掉App Store给“二级制文件”穿上的外衣

    当然,引言已经说了,道高一尺魔高一丈,就算是被apple加密的ipa,其实也是可以反编译的,只不过相对麻烦罢了。
    来来来,给你们几个工具,就可以解掉apple的加密了。

    • clutch
    • dumpdecrypted
    • gdb
    • AppCrackr

    由于AppCrackr被很多开发者吐槽,这个傻瓜式的解密会严重导致盗版泛滥,所以这个工具已经很不好用了。
    这里就不展示demo了,感觉如果把App Store上的东西反编译出来发到网上去,我感觉我的程序员生涯可能就要到头了。

    如何利用工具去反编译

    这里会介绍两个工具class-dumpHopper Disassembler
    首先,先撸一个最简单的app来做小白鼠。下载地址(包含二进制文件&dump结果)
    看图,就是这样,我只改了ViewController这个类。

    ViewController.h ViewController.m

    由代码可以看出,我就写了两个方法testClassDumptestHideClassDump,后者没有声明在.h中(ps:我想试验这样能不能被反编译到)。

    ok,前戏都做完了,可以开始干活了。

    我们run一下工程,然后打开Products文件夹下的DecompilingTest.app所在目录,显示包内容,拿到二进制文件

    二进制文件

    然后我是复制到桌面,然后执行下述命令,即可拿到工程中的.h文件。

    执行命令

    OK,得到下述结果,我们看看拿到的ViewController.h里面,能拿到什么方法

    结果

    事实证明,没有声明的方法也被dump出来了。

    下一步我们要做的就是看看能不能拿到这两个方法的具体实现了,接下来我们用Hopper Disassembler来试试。

    Hopper Disassembler的用法很简单,只要将二进制文件拖进去就行了。看看拖进去之后的结果。

    反编译之后

    此时心中一万头草泥马飞奔而过,what's the fk!!一堆汇编语言宝宝看不懂啊。(当然那个ret应该是return的意思我猜)

    在感兴趣的地方生成伪代码

    Don't worry!点右上角的if(b)f(x);按钮,我们能看到这个方法的伪代码,大部分的时候我们能从伪代码中看出我们需要的信息。

    结果如下:

    伪代码1 伪代码2

    至此,两个方法都被反编译出来了!!

    这里需要注意,就算方法没有声明在.h中,也能被dump,之后就能被反编译了。

    如何预防反编译

    说了这么多,我们预防呢,是不是需要像Java的一样加上各种复杂的混淆呢。

    其实我觉得大可不必,本身反编译成本就很大,代码这么多,一个个反编译过来是在蛋疼,就算有伪代码也需要理解,而且有些代码就算有伪代码也很难理解。

    只要做好核心代码,做好混淆就行了,比如涉及到密码,核心算法。

    总结:

    没有绝对安全的系统,也没有黑客破不掉的系统,所有需要的只是时间而已。

    OK,就到这了,明天早起实习去。

    个人微博:kuailejim
    个人博客:http://kuailejim.com

    相关文章

      网友评论

      • bcff9dc6f873:这只能将一个简单方法大致解密翻译过来,但如果代码使用面向对象特性去编码,你这个方法得到的内容就没有意义了,因为任何的反编译方法都无法破解出软件在开发时所设计的数据结构,如果把所有的方法都写成虚方法,你得到的反编译结果只能得到方法名称和一些实现方法,但是他们之间的所有联系和逻辑你将一点也得不到,反编译程序如果获得不到数据结构逻辑,又有何意义?实现的代码从百度获得好不好呢?
      • 十二栗子:class-dump -H DecompilingTest 我执行这一句什么都没出来,class-dump工具也安装了。电脑系统10.13.1
      • FeoniX_Fly:图片挂了。。。
      • 午马丶:Products 这个文件夹在哪里?
      • 西叶lv:嘿嘿,学习了
      • 59c1601a7210:swift能反编译吗
      • 小包包包:怎么拿到二进制文件?
        小包包包:弄出来了,之前是没有安装 class-dump 现在可以了,感谢大神
        小包包包:提示: -bash: class-dump: command not found 怎么解决
      • dedenc:楼主你好 我在反编译的的时候 最后一步开始砸壳的时候 因为是中文app,无法获取路径 所以在ssh上都是乱码 无法进行下一步 不知道有没有什么解决办法
      • NS西北风:大神,能不能写一篇如何砸壳的?:stuck_out_tongue_winking_eye:
      • NS西北风:我成功了。但是如何砸壳子呢?
      • b9d84779d06c:你好,你的个人博客是用wp搭建的吗?
      • Sanchain:谢谢大神分享,学习中
      • ios小菜:哥哥
      • XiaoYin:试了下 只有没有加密的app才能拿到.h文件 对于AppStore上的由于加密了无法使用class-dump获取有用的文件,还需要进行脱壳才行 关于脱壳楼主有的话拿出来分享下
      • c240bce84ccb:Hopper Disassembler 有破解版的吗?
      • Exia_L:请问二进制文件在哪个目录
      • midmiss:兄弟 Hopper Disassembler的if(b)f(x)按钮不能点是怎么回事
      • 只有NO1:看到先撸一…,我邪恶了…,我以为作者要说:先撸一管回来再讲…:joy:
      • 开小飞:这种方式对.a文件有效 么?
        大爱丶ALi:@开小飞 我反正没发现有效,.a文件不好反编译啊
      • 大爱丶ALi:The CPU backend cannot create pseudo-code
        for this CPU or CPU mode.
        这个怎么回事?
      • 70f82b95aca7:Hopper Disassembler 有破解版吗??
      • 星___尘:有些加密了的dump不出的。
      • Faith_K:-bash: class-dump: command not found
        是怎么回事楼主
        FlameGrace:@lessfish 这一篇是专门讲class-dump的使用的:http://www.jianshu.com/p/2add936e8bdd
        writeSpace:@XiaoYin The file /usr/local/bin does not exist.
        XiaoYin:@Faith_K 表示你未安装class-dump,下载链接http://stevenygard.com/download/class-dump-3.5.tar.gz 下载完成将文件夹下面的class-dump文件复制到bin目录下,可以在终端通过open /usr/local/bin来打开该目录,复制完成通过sudo chmod 777 /usr/local/bin/class-dump设置权限 :relieved: 然后就可以使用了
      • yourbigbug:非常好
      • 小赢一场:只要做好核心代码,做好混淆就行了,核心代码混淆如何做,什么事代码混淆哦
      • rainbowboy:Hopper Disassembler 工具请给个地址
        嫌疑人zx:https://www.waitsun.com/hopper-disassembler-4-0-8.html
      • 小赢一场:反编译
      • ddaa8dae50b0:ida也不错
      • 4edf19ee025b:求反编译工具地址
        Detailscool:@淡若青衣 http://stevenygard.com/download/class-dump-3.5.dmg
      • JanzTam:厉害 :clap:
      • 张xd:App Store上的ipa反编译可以看看这个: :smiley:
        http://mp.weixin.qq.com/s?__biz=MzIwMTYzMzcwOQ==&mid=403204191&idx=1&sn=514664cc05597f8b76730cbf9f3a57f5#rd
      • 半夏吖:很棒啊!
      • Jerry4me:赞一个,又学到东西
      • b72744bb671b:大神,还没睡啊
        b72744bb671b:@kuailejim 早点睡吧
        kuailejim:@Poison丶biting宝 秒回啊 吓尿了 打算睡了

      本文标题:手把手教你反编译别人的app

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