赞
踩
本文简要说明一个 apk(未加固) 的反编译步骤以及所使用到的工具,下列工具在网上均可以下载到
在此处编写一个简单的 app,并且该 app 没有进行过加固,并将 app 打包成 apk,例如此处的为 release-app.apk
将 release-app.apk 改扩展名为 release-app.zip(apk 其实是基于 zip 文件格式的文件),并执行解压缩,得到如下目录结构
由于 dex 文件是汇编指令级别的,不可阅读,所以通过 dex2jar 工具将汇编代码转换为 jar 文件
$ d2j-dex2jar classes.dex
会在当前目录下生成一个 classes-dex2jar.jar 文件
可以通过 jd-gui 来阅读你关注的代码逻辑
如果想要修改 app 的内部逻辑,光是阅读代码逻辑是不够的,还需要进行内部逻辑的修改,这时,apktool 就派上了用场
$ apktool d app-release.apk -o release-out
可以得到 release-out 的内部结构大致如下:
smail 文件的大体样式如下
.class public Lcom/example/ndkdemo/MainActivity; .super Ljava/lang/Object; .source "MainActivity.java" # direct methods .method static constructor <clinit>()V .locals 1 const-string v0, "ndkdemo" .line 6 invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V return-void .end method .method public constructor <init>()V .locals 0 .line 3 invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void .end method # virtual methods .method public native stringFromJNI()Ljava/lang/String; .end method
smail 的汇编指令,可以自行在网上进行学习
对 smail 中相关逻辑进行修改,可对 apk 进行回编
$ apktool b -o repackaged.apk release-out
$ keytool -genkey -v -keystore custom.keystore -alias mykeyaliasname -keyalg RSA -keysize 2048 -validity 10000
# 签名 apk
$ jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore custom.keystore -storepass mystorepass repackaged.apk mykeyaliasname
# 校验你创建的 apk
$ jarsigner -verify repackaged.apk
# 对齐 apk
$ zipalign 4 repackaged.apk repackaged-final.apk
$ adb install repackaged-final.apk
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。