帮助中心当前位置:星游娱乐 > 帮助中心 > >

星游娱乐官网:Android安全攻防战反编译与混淆技

  我们都知道,步伐打完包之后得到的是一个APK文件,这个文件是可以直接安装到任何Android手机上的,我们反编译实在也就是对这个APK文件举行反编译。Android的反编译重要又分为两个部门,一个是对代码的反编译,一个是对资源的反编译,我们立刻来逐个学习一下。

  在开始学习之前,起首我们必要预备一个APK文件,为了恭敬全部开辟者,我就不拿任何一个市面上的软件来演示了,而是本身写一个Demo用来测试。

  这里我盼望代码越简朴越好,因此我们创建一个新项目,在Activity里参加一个按钮,当点击按钮时弹出一个Toast,就这么简朴,代码如下所示:

  code >

  activity_main.xml中的资源如下所示:

  code >

  然后我们将代码打成一个APK包,并定名成Demo.apk,再把它安装得手机上,效果如下所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  好的,到这里预备事情就已经根本完成了,接下来就让我们开始对这个Demo步伐举行反编译吧。

  反编译代码

  要想将APK文件中的代码反编译出来,我们必要用到以下两款东西:

  dex2jar这个东西用于将dex文件转换成jar文件

  下载地点:http://sourceforge.net/projects/dex2jar/files/jd-gui这个东西用于将jar文件转换成java代码

  下载地点:http://jd.benow.ca/

  将这两个东西都下载好并解压,然后我们就开始对Demo步伐举行反编译。解压dex2jar压缩包后,你会发明有许多个文件,如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  此中我们要用到的是d2j-dex2jar.bat这个文件,固然假如你是linux或mac体系的话就要用d2j-dex2jar.sh这个文件。

  然后我们将Demo.apk文件也举行解压,假如不知道怎么直接解压的可以先将文件重定名成Demo.zip,然后用解压软件打开。解压之后你会发明内里有一个classes.dex文件,如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  这个classes.dex文件就是存放全部java代码的地方了,我们将它拷贝到dex2jar解压后的目次下,并在cmd中也进入到同样的目次,然后实行:

  code >

  实行效果如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  没有报任何错误,这就阐明我们已经转换乐成了。如今视察dex2jar目次,你会发明多了一个文件,如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  可以看到,classes-dex2jar.jar这个文件就是我们借助东西之后乐成转换出来的jar文件了。但是对付我们而言,jar文件也不是可读的,因此这里还必要再借助一下jd-gui这个东西来将jar文件转换成java代码。

  下面就很简朴了,利用jd-gui东西打开classes-dex2jar.jar这个文件,效果如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  OK,由此可见,我们的代码反编译事情已经乐成了,MainActivity中的代码非常清楚,根本已经做到了90%以上的还原事情。但是假如想要做到100%的代码还原照旧非常有难度的,由于像setContentView()要领传入的参数,实在就是一个资源的id 罢了,那么这里反编译也就只能将相应的id 举行还原,而无法酿成像R.layout.activity_main如许直观的代码展示。

  上一篇:果然是宝能15亿抢筹明日万科五大悬念待解

  别的,除了MainActivity之外,另有许多别的的代码也被反编译出来了,由于当前项目有引用support-v4和support-v7的包,这些引用的library也会作为代码的一部门被打包到classes.dex文件当中,因此反编译的时间这些代码也会一起被还原。

  好的,学完了反编译代码,接下来我们看一下怎样反编译资源。

  反编译资源

  实在仔细的朋侪大概已经视察到了,适才Demo.apk的解压目次当中不是已经有资源文件了吗,有AndroidManifest.xml文件,也有res目次。进入res目次当中,内容如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  这不是全部资源文件都在这里了么?实在这些资源文件都是在打包的时间被编译过了,我们直接打开的话是看不到明文的,不信的话我们打开AndroidManifest.xml文件来瞧一瞧,内容如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  可以看到,这代码是完全没法阅读的。固然假如你去打开activity_main.xml看看,效果也不会好到哪儿去:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  由此可见,直接对APK包举行解压是无法得到它的原始资源文件的,因此我们还必要对资源举行反编译才行。

  要想将APK文件中的资源反编译出来,又要用到别的一个东西了:

  apktool这个东西用于最大幅度地还原APK文件中的9-patch图片、结构、字符串等等一系列的资源。

  下载地点:http://ibotpeaches.github.io/Apktool/install/

  关于这个东西的下载我还要再增补几句,我们必要的就是apktool.bat和apktool.jar这两个文件。现在apktool.jar的最新版本是2.0.3,这里我就下载最新的了,然后将apktool_2.0.3.jar重定名成apktool.jar,并将它们放到同一个文件夹下就可以了,如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  接下来的事情就很简朴了,我们将Demo.apk拷贝到和这两个文件同样的目次当中,然后cmd也进入到这个目次下,并在cmd中实行如下下令:

  code >

  此中d是decode的意思,表现我们要对Demo.apk这个文件举行解码。那除了这个根本用法之外,我们还可以再加上一些附加参数来控制decode的更多举动:

  -f假如目的文件夹已存在,则逼迫删除现有文件夹(默认假如目的文件夹已存在,则解码失败)。-o指定解码目的文件夹的名称(默认利用APK文件的名字来定名目的文件夹)。-s不反编译dex文件,也就是说classes.dex文件会被保存(默认会将dex文件解码成smali文件)。-r不反编译资源文件,也就是说resources.arsc文件会被保存(默认会将resources.arsc解码成详细的资源文件)。

  常用用法就这么多了,那么上述下令的实行效果如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  这就阐明反编译资源已经乐成了。

  固然纵然你在和我实行千篇一律的操纵,也有大概会在这里反编译失败,好比说会报如下错误:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  出现这个错误的缘故原由很有大概是你之前利用过apktool的老版本举行过反编译操纵,然后apktool就会在你体系的C:\Users\Administrator\apktool\framework这个目次下天生一个名字为1.apk的缓存文件,将这个缓存文件删撤除,然后再重新实行反编译下令应该就可以乐成了。

  上一篇:果然是宝能15亿抢筹明日万科五大悬念待解

  如今你会发明在当前目次下多了一个Demo文件夹,这个文件夹中存放的就是反编译的效果了。我们可以打开AndroidManifest.xml来瞧一瞧,如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  怎么样?如许就完万能看得懂了吧,然后可以再到res/layout中看一下activity_main.xml文件,如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  可以看到,activity_main.xml中的内容根本和源代码中的内容是同等的,外层是一个RelativeLayout,内里则是一个Button。你可以再到别的目次中去看一看别的资源,根本上都是可以正常还原的,如许我们就把反编译资源的要领也已经把握了。

  那么对付反编译出来的文件夹,我们能不能重新把它打包成APK文件呢?答案是肯定的,只不外我着实想不出有什么义正言辞的来由可以让我们这么做。有的人会说汉化,没错,汉化的方法确实就是将一个APK举行反编译,然后翻译此中的资源再重新打包,但是不管怎么说这仍旧是将别人的步伐举行破解,以是我并不以为这是什么庆幸的事变。那么我们就不去讨论自己这件事变的对或错,这里只是站在技能的角度来学习一下重新打包的相干知识。

  起首我们来看一下通过apktool反编译后的包目次环境,如下图所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  此中,original文件夹下存放的是未经反编译过、原始的AndroidManifest.xml文件,res文件夹下存放的是反编译出来的全部资源,smali文件夹下存放的是反编译出来的全部代码,AndroidManifest.xml则是颠末反编译还原后的manifest文件。这里 得一提的是smali文件夹,假如你进入到这个文件夹中你会发明它的目次布局和我们源码中src的目次布局是险些一样的,重要的区别就是全部的java文件都酿成了smali文件。smali文件实在也是真正的源代码,只不外它的语法和java完全差别,它有点类 于汇编的语法,是Android假造机所利用的寄存器语言,语法布局大概如下所示:

星游娱乐官网

  Android安全攻防战,反编译与混淆技术完全解析(上)

  看上去有点晕头转向是吗?但是假如你一旦可以或许看得懂smali文件的话,那么你就可以做很可怕的事变了——你可以随意修改应用步伐内的逻辑,将其举行破解!

  不外我对这种黑技能并没有什么太大的爱好,因此我也没有去做详细研究,但纵然是如许,也已经可以对步伐的逻辑做肯定水平的修改了。好比说当我们点击按钮时会弹出you

  clicked button如许一句Toast,逻辑是写在MainActivity按钮点击变乱的匿名类当中的,因此这段代码反编译之后肯定就会在MainActivity$1.smali这个文件当中,让我们打开瞧一瞧,部门代码如下所示:

  Android安全攻防战,反编译与混淆技术完全解析(上)

  虽说多数的代码我是看不懂的,但此中第47行着实太显着了,Toast表现的内容不就是在这里界说的么,那么假如我们想把Demo步伐hack掉,就可以将这段字符串给改掉,好比说我把它改成Your

  app is been hacked。

  关于smali的语法,网上的资料也非常多,假如你对这门技能非常感爱好的话可以直接上网去搜,这里我只是简朴先容一下,就不再深入解说相干知识了。

  改了一处代码后我们再来改一处资源吧,好比这里想要把Demo的应用图标给换掉,那么起首我们要预备好一张新的图片,如下图所示:

  上一篇:果然是宝能15亿抢筹明日万科五大悬念待解

  作者:沈源林  来源:本站  点击:119  发布时间:2016-07-06 00:04:33

(责任编辑:admin)

上一篇:微企汇名师空降椰城龙平教授“支招”企业如何

下一篇:星游娱乐:成长股投资之“道”与“术”|成长

推荐内容