手把手教你反编译别人的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-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的一样加上各种复杂的混淆呢。

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

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

总结:

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

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

http://stevenygard.com/download/class-dump-3.5.dmg

时间: 2024-12-30 00:16:07

手把手教你反编译别人的app的相关文章

教你如何动态调试 iOS App(反编译App)

教你如何动态调试 iOS App(反编译App) 开篇 通过本文你能了解 iOS 逆向的基本知识,对 iOS App 的安全有一定了解.然后能举一反三,在自家 App 找到危险漏洞加以预防,保证用户数据安全. 在安全领域,攻与防永远存在.哪怕是 iPhone 有着强大的安全防护机制,也挡不住那些极客们一次又一次的好奇,开发了很多强大且便利的工具.本文就是在这些极客们提供的工具的基础上完成的! 准备工具 Mac 电脑和越狱 iPhone 手机 查看手机系统目录工具 iFunbox 或 iTools

Android 反编译初探 应用是如何被注入广告的

本文由我的微信公众号:鸿洋(hongyangAndroid)原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/53370414: 本文出自:[张鸿洋的博客] 一.概述 最近和朋友聊天,发现一些灰色产业链通过批量反编译市场上的apk,然后进行注入广告,再重新打包上渠道. 我想大家都不希望自己家的产品或者自己的app那么容易被"占据",但是想要自身能够防御,首先要知道对方的手段.所以本篇博客的目的不是教大家如何

Android 反编译与防止被反编译

泉贸软件工作室原创.原帖地址:http://www.svch0st.com/cont.asp?id=38 Android App使用Java语言进行开发,因此十分容易就可以被反编译出近乎原始的程式码.也因为这个特性,许多人在写Android App的时候会喜欢去反编译别人写好的程式,再挪为己用,虽然很不道德,但这也是一种有效提升软体开发速度的方法.但换个角度想,如果是自己写的程式码被盗走的话,这就对自己不太有利了,所以学习如何防止自己程式码被偷也是一个很重要的课题. Android App的安装

Android反编译和二次打包实战

作为Android开发者,工作中少不了要反编译别人的apk,当然主要目的还是为了学习到更多,取彼之长,补己之短.今天就来总结一下Android反编译和二次打包的一些知识.首先声明本文的目的是为了通过例子讲解反编译和二次打包的原理和方法,继而作为后续讲解防止二次打包和App安全的依据,并不是鼓励大家去重新打包别人的App,盗取他人劳动成果. 本文首先介绍几种Android反编译工具的使用,然后实现在不需要知道源代码的情况下,仅通过修改反编译得到的smali文件实现修改apk逻辑功能的目的. And

apk 反编译

反编译别人的程序不是什么值得炫耀的事,希望大家最好只是兴趣探索,而不是利益驱动.本文主要目的是绕开一个简单的激活程序. 什么是反编译 我们知道,Android的程序打包后会生成一个APK文件,这个文件可以直接安装到任何Android手机上,因此,反编译就是对这个APK进行反编译.Android的反编译分成两个部分: 一个是对代码反编译,也就是java文件的反编译. 一个是对资源反编译,也就是res文件的反编译. 所需的工具 Android Studio:安卓开发IDE下载地址:https://d

最新反编译嵌入广告sdk教程(附成功项目)

本人程序员屌丝一枚,不善言语,直接谈技术. 反编译大多用于App的破解.App的汉化.App植入广告,出于兴趣,我下班花了6个晚上终于反编译嵌入了个有米广告然后又成功回编译回去,打包签名. 可下载打开看看效果,百度网盘下载地址:http://pan.baidu.com/s/1GpEJ8,这个APP我本人也很喜欢,如果有喜欢的朋友可以下载看看那个广告平时点点广告下载下载,哥们后半辈子就靠它了. 反编译植入代码的思路与方法. 其实思路很简单, 1.首先我们要反编译 targetapk.apk,得到源

Android Cocos2dx引擎 prv.ccz/plist/so等优化缓存文件,手把手ida教你逆向project反编译apk库等文件

前段时间在 Android play 上看到一个非常牛逼的 3D 动态天气预报,效果真的非常炫.二话不说动手 dex2jar.bat/apktool 发现这并没 有什么卵用,在核心的地方看见 native 字段果断放弃了治疗,立刻转向 so 的逆向project.发现了cocos2dx so 引擎,搜噶.我就说 嘛这么炫酷的效果, Android 源代码是做不了的.即使达到了这样的程度,预计性能也特别不好.由于那个动态效果是不会循环播放 的,也就是不会反复.是自己绘制的依据资源文件,在反编译的

教你如何反编译app,拿到加密方式

大家知道app 有安卓和ios 安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的 IOS是ipa 今天我主要讲的是这个 准备好反编译设备 1.一套越狱的ios手机 我的设备是iphone6 ios8.3 已越狱 2.一个mac系统 可以是vmware上的mac 黑苹果 或者直接用自己的mac电脑 我为了方便就用了黑苹果(如何搞黑苹果可以看我之前发表的博客) 给大家看下我的环境吧: 准备反编译环境 1. 越狱手机上 1.1 Cydia上面安装 OpenSSH 安装成功

手把手教你搞懂 Android 反编译

我们知道,Android的程序打包后会生成一个APK文件,这个文件可以直接安装到任何Android手机上,因此,反编译就是对这个APK进行反编译.Android的反编译分成两个部分: 一个是对代码反编译,也就是java文件的反编译. 一个是对资源反编译,也就是res文件的反编译. 所需的工具 Android Studio:安卓开发IDE下载地址:https://developer.android.com/studio/index.html 反编译代码的工具: dex2jar: 把dex文件转成j