Android实用技能:你应该掌握的APK反编译技巧以及重新打包发布

需要的工具

1,apktool: 反编译获取资源文件的工具,包括图片资源和布局文件等的获取
下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads
2,dex2jar:反编译获取源码的工具,将classes.dex 转化为jar文件
下载地址:https://sourceforge.net/projects/dex2jar/files/
3,jd-gui:jar文件源码查看工具
下载地址:http://jd.benow.ca/

这里提供一个我自己的下载地址:同时包含上面三个工具的压缩包

为了方便进行反编译,我们将上述下载好的3个工具统一放到一个文件夹中,并将相应的zip解压缩,如下:
在这里插入图片描述

使用apktool反编译apk得到图片、XML配置、语言资源等文件

1,进入CMD命令行,切换到上述的3个工具的所在目录,如:E:\AndroidDevelopTool\Android反编译工具包:
在这里插入图片描述
使用如下的命令运行apktool_2.0.1.jar反编译MMTS-release-1.0.2.apk

java -jar apktool_2.0.1.jar d -f E:\AndroidDevelopTool\Android反编译工具包\测试apk\MMTS-release-1.0.2.apk -o MMTS

上面命令的含义为:启动apktool_2.0.1.jar将位于【E:\AndroidDevelopTool\Android反编译工具包\测试apk\】目录下的"MMTS-release-1.0.2.apk"这个apk反编译,然后将反编译生成的文件存放到当前目录(apktool_2.0.1.jar所在的目录,也就是"E:\AndroidDevelopTool\Android反编译工具包"目录)下的一个【MMTS】文件夹中,这个文件夹MMTS的名字可以自定义。
如下图:
在这里插入图片描述
反编译成功后,会在当前目录(E:\AndroidDevelopTool\Android反编译工具包)下生成一个MMTS文件夹,打开MMTS里面就有反编译后生成的文件,如下图所示:
在这里插入图片描述
打开MMTS文件夹,就可以看到反编译后的生成的文件,如下图所示:
在这里插入图片描述

使用dex2jar反编译apk得到Java源代码

1,将要反编译的APK后缀名改为.rar或者 .zip,并解压,得到其中的classes.dex文件。
2,将获取到的classes.dex放到之前解压出来的工具【dex2jar-2.0】文件夹内,如下图所示:
在这里插入图片描述
3,在命令行下定位到dex2jar.bat所在目录,输入"d2j-dex2jar classes.dex",效果如下:
在这里插入图片描述
4,命令执行完成之后,在当前目录下就可以看到生成的Jar文件了,如下图所示:
在这里插入图片描述
5,启动源码查看工具【jd-gui】:
在这里插入图片描述
6,将生成的classes-dex2jar.jar文件直接拖进jd-gui就可以看到源代码了,如下图所示:
在这里插入图片描述
注意:JD-GUI虽然可以将class反编译成java源代码,但是对于一些被混淆过的class,反编译的效果就不是那么理想了,被混淆过的class反编译后的效果图(类文件名称以及里面的方法名称都会以a,b,c…之类的样式命名):
在这里插入图片描述

重新打包

对于反编译出来的文件夹我们是可以进行重新打包发布的,但是这种破解别人应用的做法是很不道德的,汉化的方式其实就是将一个APK进行反编译,然后翻译其中的资源再重新打包,那么如何重新打包呢?
这里我们自己新建一个应用,然后签名打包,命名为Demo.apk,运行效果如下:
在这里插入图片描述
可以看到这个应用很简单,就是在主界面上有一个按钮,然后点击该按钮弹出一个Toast提示:“you clicked button”。
接下来我们就演示下如何对这个apk进行反编译后重新打包。

1,首先我们使用apktool工具反编译apk,获取到如下的目录:
在这里插入图片描述
其中,original文件夹下存放的是未经反编译过、原始的AndroidManifest.xml文件,res文件夹下存放的是反编译出来的所有资源,smali文件夹下存放的是反编译出来的所有代码,AndroidManifest.xml则是经过反编译还原后的manifest文件。这里值得一提的是smali文件夹,如果你进入到这个文件夹中你会发现它的目录结构和我们源码中src的目录结构是几乎一样的,主要的区别就是所有的java文件都变成了smali文件。smali文件其实也是真正的源代码,只不过它的语法和java完全不同,它有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言,语法结构大概如下所示:
在这里插入图片描述
看上去有点晕头转向是吗?但是如果你一旦能够看得懂smali文件的话,那么你就可以做很恐怖的事情了——你可以随意修改应用程序内的逻辑,将其进行破解!
不过我对这种黑技术并没有什么太大的兴趣,因此我也没有去做具体研究,但即使是这样,也已经可以对程序的逻辑做一定程度的修改了。比如说当我们点击按钮时会弹出you clicked button这样一句Toast,逻辑是写在MainActivity按钮点击事件的匿名类当中的,因此这段代码反编译之后一定就会在MainActivity$1.smali这个文件当中,让我们打开瞧一瞧,部分代码如下所示:
在这里插入图片描述
虽说多数的代码我是看不懂的,但其中第47行实在太明显了,Toast显示的内容不就是在这里定义的么,那么如果我们想把Demo程序hack掉,就可以将这段字符串给改掉,比如说我把它改成Your app is been hacked。
关于smali的语法,网上的资料也非常多,如果你对这门技术十分感兴趣的话可以直接上网去搜,这里我只是简单介绍一下,就不再深入讲解相关知识了。
改了一处代码后我们再来改一处资源吧,比如这里想要把Demo的应用图标给换掉,那么首先我们要准备好一张新的图片,如下图所示:
在这里插入图片描述
然后从AndroidManifest.xml文件中可以看出,应用图标使用的是ic_launcher.png这张图片,那么我们将上面篮球这张图片命名成ic_launcher.png,然后拷贝到所有以res/mipmap开头的文件夹当中完成替换操作。
在做了两处改动之后,我们现在来把反编译后的Demo文件夹重新打包成APK吧,其实非常简单,只需要在cmd中执行如下命令:

apktool b Demo -o New_Demo.apk

这里的Demo文件夹对应上面的MMTS文件夹。

其中b是build的意思,表示我们要将Demo文件夹打包成APK文件,-o用于指定新生成的APK文件名,这里新的文件叫作New_Demo.apk。执行结果如下图所示:
在这里插入图片描述
现在你会发现在同级目录下面生成了一个新的APK文件:
在这里插入图片描述
不过不要高兴得太早了,目前这个New_Demo.apk还是不能安装的,因为它还没有进行签名。那么如果这是别人的程序的话,我们从哪儿能拿到它原来的签名文件呢?很显然,这是根本没有办法拿到的,因此我们只能拿自己的签名文件来对这个APK文件重新进行签名,但同时也表明我们重新打包出来的软件就是个十足的盗版软件。这里大家学学技术就好了,希望不要有任何人去做什么坏事情。
那么这里我就用一个之前生成好的签名文件了,使用Android Studio或者Eclipse都可以非常简单地生成一个签名文件。
有了签名文件之后在cmd中执行签名命令就可以进行签名了,命令格式如下:

手动签名:(JDK8版本下进行手动签名的完整命令)
jarsigner  -keystore yiyou.jks(签名文件) -storepass tingxue666(密钥)  -signedjar 22.apk(已签名apk) 11.apk(未签名apk) yiyou(别名) 
-digestalg SHA1 -sigalg MD5withRSA -tsa http://timestamp.digicert.com

其中jarsigner命令文件是存放在jdk的bin目录下的,需要将bin目录配置在系统的环境变量当中才可以在任何位置执行此命令。
签名之后的APK文件现在已经可以安装到手机上了,不过在此之前Android还极度建议我们对签名后的APK文件进行一次对齐操作,因为这样可以使得我们的程序在Android系统中运行得更快。对齐操作使用的是zipalign工具,该工具存放于/build-tools/目录下,将这个目录配置到系统环境变量当中就可以在任何位置执行此命令了。命令格式如下:

// zipalign -v 4 22.apk(需优化的apk) 33.apk(优化后生成的apk)
zipalign -v 4 New_Demo.apk New_Demo_aligned.apk

运行这段命令之后就会生成一个New_Demo_aligned.apk文件,如下所示:
在这里插入图片描述
这个New_Demo_aligned.apk就是我们重新打包签名对齐后的文件了,现在把它安装到手机上,效果如下图所示:
在这里插入图片描述
可以看到,应用图标已经成功改成了篮球,另外点击按钮后弹出的Toast的提示也变成了我们修改后的文字,说明重新打包操作确实已经成功了。

猜你喜欢

转载自blog.csdn.net/gpf1320253667/article/details/84786545