使用APKTool+dex2jar+jd_gui反编译apk文件
在学习代码混淆之前,这里我先反编译一下从网上下载下来的apk。这里我以豆瓣电影作为例子,来进行反编译。在反编译过程中,我们主要用到了下面的三个工具: 
  1.apktool 
  这个工具主要是将android中的apk文件转换成dex文件。 
  2.dex2jar 
  顾名思义就是讲第一步的dex文件转换成jar文件 
  3.jd_gui 
  这个工具可以查看第二步中生成的jar文件的内容。
反编译查看apk代码
1.首先我们将下载下来的豆瓣的apk文件,更改后缀名称为.rar,然后解压,可以看到classes.dex文件。 
   
 
  2.将classes.dex拷贝到dex2jar.bat所在的目录下: 
   
 
  可以看到,这里我已经将classes.dex文件拷贝到dex2jar.bat所在的目录当中了。 
  在命令行下进入dex2jar.bat所在的目录,执行如下命令: 
  dex2jar.bat classes.dex 
  此时会在该目录下生成classes_dex2jar.jar这个文件 
   
 
  3.使用jd_gui查看jar文件中的代码: 
  jd_gui是一个可执行的exe文件,可以直接通过这个工具查看jar文件中的代码。直接双击运行该文件,将classes_dex2jar.jar文件拖动到jd_gui的界面即可。 
  
现在已经可以看到源代码了。
反编译得到布局文件和资源文件
这里我以网上的一个订餐apk来做测试,先来看看,如果我们只是单纯的解压apk,是没有办法看到布局图片等资源的,比如:看到的布局回像下面这种样子: 
   
 
  此时使用apktool工具来反编译布局和资源文件: 
   
 
  此时会在apktool工具所在的目录下生成一个文件夹,这个文件夹里边的布局manifest文件以及资源文件就都可以访问了。 
  登陆界面的布局: 
   
 
  manifest文件 
  
将反编译的apk植入广告,二次打包
首先这里我就拿登陆界面来作一个简单的案例: 
   
 
  可以看到我将该界面的所有文字相关的都改为”广告”了,并且将背景图片更换了。更换的背景图片如下: 
   
 
  接下来进行二次打包。我们在第一步当中通过apktool.bat d feifan.apk来反编译,成功之后,会看到一个名字叫做fenfan的文件夹,里面就是放的该apk的资源文件和布局以及清单文件。接下来需要执行:”apktool.bat b feifan advertisement.apk”,即可。需要注意的是,在这一步的操作当中可能会碰到这样的错误:
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 8, --target-sdk-version, 15, -F, C:\ Users\ADMINI~1\AppData\Local\Temp\APKTOOL5334589254772572111.tmp, -0, arsc, -I, C:\Users\Administrator\apktool\framework\1.apk, -S, E:\快盘\pc_demo_code\软件\an droid反汇编\apktool-install-windows-r05-ibot\apktool-install-windows-r05-ibot\.\ test_apk_name\res, -M, E:\apktool-install-window s-r05-ibot\apktool-install-windows-r05-ibot\.\test_apk_name\AndroidManifest.xml] at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.jav a:357) at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336) ... 5 more
这时因为apktool在打包的时候,需要用到aapt工具,需要将aapt的路径配置到环境变量当中即可。 
  这里我生成的apk名称叫做advertisement,但是注意,此时我们生成的这个apk是不能安装的,需要对其进行签名才可以。
对apk进行签名
在对apk签名之前,我们首先需要创建一个keystore文件,需要用到jdk中为我们提供的keytool.exe工具,如下: 
  keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore 
  说明一下: 
  -genkey 表示产生密钥 
  -keyalg RSA 表示使用RSA算法对签名加密 
  -validity 40000 表示有效期限4000天 
   
 
  完成之后,会在当前目录下生成一个demo.keystore文件。
使用jdk中的jarsigner 工具来和demo.keystore生成签名后的apk. 
  jarsigner -verbose -keystore demo.keystore -signedjar advertisement_signed.apk advertisement.apk demo.keystore 
  说明一下: 
  -verbose 表示输出签名的详细信息 
  -keystore demo.keystore 密钥库位置 
  -signedjar advertisement_signed.apk advertisement.apk demo.keystore正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库 
   
 
  此时会在该目录下生成一个签名后的apk文件advertisement_signed.apk,安装运行该文件,进入登陆界面如下: 
   
 
  bingo,可以看到经过二次打包以后,该apk已经是我们想要的效果了,这样可以植入一些广告。
说明一点:该博客只是为大家提供了一种思路和方法,仅供学习参考,严禁做非法的事情。
ok,今天就到这里了,希望大家能够喜欢,也算是为自己做一个笔记吧。
来自: http://blog.csdn.net//mockingbirds/article/details/46419693