手把手教你反编译别人的app
虽然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-dump和Hopper Disassembler。
首先,先撸一个最简单的app来做小白鼠。下载地址(包含二进制文件&dump结果)
https://github.com/kuailejim/demo
看图,就是这样,我只改了ViewController这个类。
ViewController.h
ViewController.m
由代码可以看出,我就写了两个方法testClassDump和testHideClassDump,后者没有声明在.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的一样加上各种复杂的混淆呢。
其实我觉得大可不必,本身反编译成本就很大,代码这么多,一个个反编译过来是在蛋疼,就算有伪代码也需要理解,而且有些代码就算有伪代码也很难理解。
只要做好核心代码,做好混淆就行了,比如涉及到密码,核心算法。
手把手教你反编译别人的app的更多相关文章
- 怎么防止别人动态在你程序生成代码(怎么防止别人反编译你的app)
1.本地数据加密 iOS应用防反编译加密技术之一:对NSUserDefaults,sqlite存储文件数据加密,保护帐号和关键信息 2.URL编码加密 iOS应用防反编译加密技术之二:对程序中出现的U ...
- 从0开始,手把手教你使用React开发答题App
项目演示地址 项目演示地址 项目源码 项目源码 其他版本教程 Vue版本 小程序版本 项目代码结构 前言 React 框架的优雅不言而喻,组件化的编程思想使得React框架开发的项目代码简洁,易懂,但 ...
- android app反编译
最新在反编译别人的apk,有时候看到别人的app有很炫的效果,就想知道别人是怎么样实现的,顺便自己参考,借鉴一下,下一次如果工作中碰到这个问题就知道怎么实现了.最近恰好放假三天,就研究了一下,一般别人 ...
- Java 7 中的Switch 谈 Java版本更新和反编译知识
Java 7 中的Switch 谈 Java版本更新和反编译知识 学习编程,享受生活,大家好,我是追寻梦的飞飞.今天主要讲述的是Java7中的更新Switch实现内部原理和JAD反编 ...
- 【转】安卓apk反编译、修改、重新打包、签名全过程
首先明确,反编译别人apk是一件不厚道的事情.代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的.这也说明,代码混淆是非常重要的.本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么 ...
- - 反编译 AndroidKiller 逆向 实践案例 MD
目录 目录 反编译 AndroidKiller 逆向 实践案例 MD AndroidKiller 简介 插件升级 基本使用 实践案例 修改清单文件 打印 debug 级别的日志 方式一:直接代理 Lo ...
- 安卓apk反编译、修改、重新打包、签名全过程
首先明确,反编译别人apk是一件不厚道的事情.代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的.这也说明,代码混淆是非常重要的.本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么 ...
- NX二次开发-C#使用DllImport调用libufun.dll里的UF函数(反编译.net.dll)调用loop等UF函数
在写这篇文章的时候,我正在头晕,因为下班坐车回家,有些晕车了.头疼的要死.也吃不下去饭. 版本:NX11+VS2013 最近这一年已经由C++过度到C#,改用C#做应用程序开发和NX二次开发. C#在 ...
- Android Cocos2dx引擎 prv.ccz/plist/so等优化缓存文件,手把手ida教你逆向project反编译apk库等文件
前段时间在 Android play 上看到一个非常牛逼的 3D 动态天气预报,效果真的非常炫.二话不说动手 dex2jar.bat/apktool 发现这并没 有什么卵用,在核心的地方看见 nati ...
随机推荐
- @Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别 .(转)
mvc renderaction renderpartial 杂谈 Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. ...
- c#编程指南(四) 组元(Tuple)
(1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...
- 【jQuery日期处理】两个时间大小的比较
function checkEndTime(){ var startTime=$("#startTime").val(); var start=new Date(startTime ...
- Mobile testing基础之Native、Web、Hybrid、activity、webview
应用一词指的是app,即application.原生应用指的是能直接运行于当前操作系统的应用程序:web应用指需要在浏览器中运行的网页应用,由于界面体验.功能上都更加强大,可媲美原生应用,故称web应 ...
- .net之单元测试
一.单元测试的目的是为了提高项目的质量 二..net单元测试的实施步骤是:在已经创建的类文件的某个方法上右键-->选择创建单元测试-->系统会创建单元测试解决方案--->单元测试解决 ...
- 【Spark学习】Spark 1.1.0 with CDH5.2 安装部署
[时间]2014年11月18日 [平台]Centos 6.5 [工具]scp [软件]jdk-7u67-linux-x64.rpm spark-worker-1.1.0+cdh5.2.0+56-1.c ...
- Bnuoj-29359 Deal with numbers 线段树
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=29359 题意:一个数列,有三种操作: 1.区间[a,b]之间大于零的数整出c. 2.区间[ ...
- openstack python sdk list tenants get token get servers
1,openstack python sdk 获取token 获取租户tenants projects #!/bin/bash export OS_PROJECT_DOMAIN_ID=default ...
- 【转】 hive简介,安装 配置常见问题和例子
原文来自: http://blog.csdn.net/zhumin726/article/details/8027802 1 HIVE概述 Hive是基于Hadoop的一个数据仓库工具,可以将结构化 ...
- 浅谈iOS中MVVM的架构设计与团队协作
说到架构设计和团队协作,这个对App的开发还是比较重要的.即使作为一个专业的搬砖者,前提是你这砖搬完放在哪?不只是Code有框架,其他的东西都是有框架的,比如桥梁等等神马的~在这儿就不往外扯了.一个好 ...