注:这篇文章是北京大学移动平台软件开发课程 课后技术报告,如有错误,敬请指出。
转载请注明出处:http://blog.csdn.net/mafia1989/article/details/27815697
背景:
所谓破解,具体就是指反编译APK(APK文件就是android操作系统的应用程序安装文件)文件进行汇编级的代码分析,并修改代码,以改变原程序的功能。
相对于在Windows平台下复杂的加壳,脱壳以及反汇编技术,我们在android平台下不仅可以进行汇编级的分析 --smali字节码,也可以通过一些工具直接转化成java源代码(以下将详细说明),并相对于PC平台的加壳技术,Google在android中引入了ProGuard进行了代码混淆。
概念及基本准备:
dalvik虚拟机:Google为Android平台设计了一套虚拟机来运行Android程序,它就是Dalvik Virtual Machine。Dalvik虚拟机运行的是Dex字节码,其以一个DEX(Dalvik Ececute) 可执行文件形式存在,Dalvik虚拟机通过解释DEX文件来执行代码。
smali文件:就是Dalvik虚拟机运行的Dex字节码所对应的汇编文件,类似于java虚拟机的汇编语言Jasmin,实际上这2者的 语法是非常相像的,如果你想了解更多,请访问Google Code上的Smali项目主页:https://code.google.com/p/smali/。
ProGuard:ProGuard是一个SourceForge上非常知名的开源项目。官网网址是:http://proguard.sourceforge.net/。Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。ProGuard的主要作用就是混淆。当然它还能对字节码进行缩减体积、优化等。
第一个工具:APKTool (下载地址 http://pan.baidu.com/s/1i363Qtv),APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境。可以对APK进行反编译,使用它可以将其反编译成非常接近打包前的原始格式。逆向AndroidManifest.xml、资源文件resources.arsc以及将dex文件反编译成可以调试的smali文件。修改后,可以将其编译回apk文件。APKTool也可以用来汉化Android软件然后重新打包发布。
第二个工具:dex2jar (下载地址 http://pan.baidu.com/s/1CNKwI),将Dalvik虚拟机的dex文件转换回标准Java的class文件的工具,然后可以用JD-GUI工具直接打开查看。
第三个工具:JD-GUI (下载地址 http://pan.baidu.com/s/1c0tMNOc),一款用C++开发的JAVA反编译工具,该工具省掉了将jar文件转换成java源文件步骤,直接以源码的形式显示jar文件中的内容。
下面是我们这次要进行破解的APK:
三国志2霸王之大陆,下载地址(http://pan.baidu.com/s/1hql7mvy)这是曾经fc时代很流行的游戏,也是我小时候经常玩的一个游戏,但是这次在手机上下载了这个游戏,要积分才能玩。。如下图所示:
步骤一:
先将sanguo2.apk 重命名为sanguo2.zip ,然后解压缩,得到一个文件包,包里文件如图所示:
步骤二:
此时,使用dex2jar这款工具,将dex文件转化为jar文件,在CMD下 命令格式为 dex2jar.bat
生成classes_dex2jar.jar文件。
步骤三:通过jd-gui将jar文件反编译为java文件
运行jd-gui.exe,打开文件classes_dex2jar.jar,可以看到源码,这里的源码有可能使用了Google的 ProGuard将类与变量名混淆成了无意义的abc字符,如图: