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

摘要:
本文想根据一个实际示例告诉您如何反编译应用程序。从某种意义上说,iOS并不像传说中那样安全。因此标题是“有条件的”,可以反编译。令人欣慰的是,调试中生成的ipa、发布中的ipa包或频道包都可以直接反编译。如何使用工具反编译。这里介绍了两种工具,类转储和HopperDisassembly。首先,用最简单的应用程序制作鼠标。

虽然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这个类。

手把手教你反编译别人的app第1张
ViewController.h
手把手教你反编译别人的app第2张
ViewController.m

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

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

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

手把手教你反编译别人的app第3张
二进制文件

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

手把手教你反编译别人的app第4张
执行命令

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

手把手教你反编译别人的app第5张
结果

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

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

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

手把手教你反编译别人的app第6张
反编译之后

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

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

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

结果如下:

手把手教你反编译别人的app第7张
伪代码1
手把手教你反编译别人的app第8张
伪代码2

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

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

如何预防反编译

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

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

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

总结:

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



原文链接:http://www.jianshu.com/p/10873c5c1e08

免责声明:文章转载自《手把手教你反编译别人的app》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kafka 基础知识梳理-kafka是一种高吞吐量的分布式发布订阅消息系统偶遇 smon 进程cpu 开销高异常分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CrossApp简介

简介 CrossApp简介     CrossApp是一款完全免费、开源、跨平台的移动app开发引擎。CrossApp以C++作为开发语言,图形渲染基于OpenGL ES 2.0,采用MVC框架模式。使用CrossApp开发的应用程序支持导出到各大主流移动平台,真正实现“一次编码,多处运行”的跨平台开发技术。     CrossApp主要由9miao.c...

Android 电量优化

极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 电量优化一直是Android 开发中的头等问题。本篇将分析一下Android M 以上电量优化措施电量优化相关的部分知识点。 注:文章参考MTK手机解决方案文档 通过本篇文章阅读,你将收获以下知识点: 1.Doze 模式 2.空闲状...

html网站网址一键打包成App平台-开心App平台

开心APP在线打包平台可以快速封装网站变成APP,一键打包网站APP平台的出现,极大的降低的开发费用,几百块就可以制作一个体验不错的APP。 网站封装成APP的流程方便快捷!无需懂代码,会上网就能制作APP! 下面介绍使用开心APP平台将一个网站快速打包成APP 分七步进行 1、注册开心APP平台账号 2、创建APP、配置基本信息 3、配置扩展插件 4、配...

Vue 基础篇一

Vue框架介绍 之前大家学过HTML,CSS,JS,JQuery,Bootstrap,,现在我们要接触一个新的框架Vue Vue是一个构建数据驱动的web界面的渐进式框架 目标是通过尽可能简单的API实现响应式的数据绑定和组合的视图组件. 能够构建复杂的单页面应用.现在我们开始认识一下Vue // HTML 页面 <div id="app">...

如何知道一个App的包名呢

本文转载自http://www.cnblogs.com/by-dream/p/5157308.html 如何知道一个App的包名呢?它的启动页的Activity又是什么呢?   之前博客里也忽略了这一块,这一节我就专门来介绍一下。   包名(Package name)在Android系统中是判断一个App的唯一标识,不同的App可以有同样的名字,但是它的...

快速搭建angular7 前端开发环境

第一步:全局安装 Angular CLI (1)打开npm(终端)安装angular-cli 第二步:创造工作区和初始应用 (1)运行命令 ng new my-app 第三步:启动开发服务器 (1)cd my-app (2)ng serve --open (3)运行成功后app.component.js/app.component.css/app.comp...