apk文件反编译、回编译和签名之完全教程

apk文件反编译、回编译和签名之完全教程

前提:需要安装JDK 、AndroidSDK
工具:apktool_2.0.1.jar
下载网址:
http://ibotpeaches.github.io/Apktool/

部分内容援引:
http://www.cnblogs.com/ayanmw/p/3720804.html
http://blog.sina.com.cn/s/blog_5eb1a2670100ku7g.html

注:下文的盘符、目录可按照使用者具体情况而定。

反编译:

在D盘下新建一个叫apktool的文件夹,将apktool_2.0.1.jar放进去。
在配置了jdk环境变量的前提下,进入D盘的apktool文件夹,在命令行输入java –jar,后面接apktool的名称,然后用命令d反编译目标apk文件。示例:
java –jar apktool_2.0.1.jar d ai.apk
然后回车就开始编译了。下图表示编译成功了。
这里写图片描述
编译成功后会在apktool文件夹下生成一个和apk同名的文件夹,文件夹中的内容就是编译出来的东西。如下图:
这里写图片描述

回编译:

将反编译后的内容修改过以后,想要回编译成apk文件之前要注意一点。
因为回编译需要用到aapt工具,所以在这之前先要配置aapt的环境变量,aapt文件一般都会在android SDK里面的build-tools文件夹中,如图:
这里写图片描述

将这个目录地址配置到环境变量中(不会可以百度如何配置环境变量,网上有很多)。在命令行敲入aapt,回车,会刷出一大堆代码,拉到最上面,看到这个画面就是配置成功了。
这里写图片描述

之后就可以继续了,依然是在D盘的apktool文件夹下敲入:
java -jar apktool_2.0.1.jar b ai
其中b就是回编译的命令,后面接目录名,注意最后的“ai”是目录名,其实就是之前反编译的目录,不要在后面加.apk。如下,回编译就完成了。
这里写图片描述
这时,会在ai的dist目录下生成一个与原来apk同名的apk文件:
这里写图片描述

但是这个文件还不能直接安装,因为还没有对它进行签名。

签名apk文件:

签名apk文件需要用到jdk环境,所以前提先安装jdk(同样,方法百度)。
签名文件需要用到keytool.exe和jarsigner.exe,这两个文件都在jdk的bin目录下:
这里写图片描述
所以只要你配置了bin目录的环境变量就可以直接使用了。首先我们需要创建一个签名文件,如果你已经有签名文件可以跳过这一步。如果没有就来创建吧,那么在你配置了bin目录的环境变量的前提下,打开命令行,进入一个目录,比如进入D盘根目录下,直接敲入:

keytool -genkey -alias key.keystore -keyalg RSA -validity 30000 -keystore key.keystore

对于上面的代码看不懂可以看下面的描述,按自己要求修改代码:

Keytool 选项 描述
-genkey 产生一个键值对(公钥和私钥)
-v 允许动作输出
-alias 键的别名。只有前八位字符有效。
-keyalg 产生键的加密算法。支持DSA和RSA。
-keysize 产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。
-dname 专有名称,描述谁创建的密钥。该值被用作自签名证书的颁发者和主题字段。注意你可以不在命令行指定。如果没有指定keytool会提示你(CN,
OU, and so on)。
-keypass 键的密码。 主要为了安全起见,如果没提供,keytool会提示你输入。
-validity 键的有效期,单位:天
-keystore.keystore 用于存储私钥的文件。
-storepass 私钥存储文件的密码。 主要为了安全起见,如果没提供,keytool会提示你输入。这个密码不会存储在你的shell历史记录中。

回车后会让你输入一些东西,自己看着填就行了:
这里写图片描述
最后敲入y确定。
这时在你的命令行当前的目录下,之前举例是进入D盘,所以在我的D盘目录下就会生成一个叫key.keystore的文件,这个文件就是你的签名文件。你也可以参考上面的表格修改相应项。
有了签名文件后就是将apk文件签名了,这时要用到jarsigner.exe文件了。首先要把你回编译完成的apk文件拷贝到和你签名文件的同一个目录下,我这里就是D盘根目录。然后在命令行里进入D盘,敲入:

jarsigner -verbose -keystore key.keystore -signedjar ***-signed.apk ***-unsigned.apk key.keystore

下面是描述:

Jarsigner 选项 描述
-keystore.keystore 包含你私钥的存储文件
-verbose 显示输出动作。
-sigalg 签名算法,用 SHA1withRSA.
-digestalg 消息摘要算法,用 SHA1.
-storepass 存储文件的密码。 主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
-keypass 私钥的密码。 主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。

上面的***-unsigned.apk代表的是你源文件的名称,按照上次我们的例子这里就改成ai.apk,***-signed.apk代表你签名完毕的文件名,我们可以改成ai-signed。要注意一点你的签名文件的文件名要和代码中敲入文件名相对应。最后回车,输入之前设置的密码,回车,就签名完毕了:
这里写图片描述
这样你修改后的apk就可以成功安装到设备上了。

查看apk文件的签名信息:

我们来试一下查看之前签名好的apk文件的签名信息,此方法同样适用于其它apk文件。
首先我们还是在D盘下,将签名后的apk文件后缀名改为zip,然后将里面的META-INF文件夹解压出来:
这里写图片描述
然后来到命令行,进入D盘,敲入:

keytool -printcert –file <签名文件RSA的路径>

注意在-file的后面接的是签名文件RSA的路径,这个文件就在META-INF文件夹里面(签名文件不同具体文件名会不一样,但后缀名都是RSA),你可以将路径复制进去:
这里写图片描述
如下就是成功的读取了apk签名文件的信息:
这里写图片描述

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Android Studio中,生成签名文件可以按照以下步骤操作: 1. 打开Android Studio并打开您的项目。 2. 点击菜单栏中的“Build”,然后点击“Generate Signed Bundle / APK”。 3. 选择“APK”并单击“Next”。 4. 在下一个屏幕上,选择“Create new”并填写有关您的密钥的详细信息,例如名称,密码,别名和有效期等。 5. 单击“OK”并填写有关您的应用程序的信息,例如版本号和版本名。 6. 单击“Next”并选择“Release”作为构建变体。 7. 单击“Finish”并等待编译完成。 一旦您的应用程序构建成功并生成签名文件,您可以使用以下步骤对其进行反编译、修改、打包和签名: 1. 下载并安装Apktool(可在https://ibotpeaches.github.io/Apktool/上找到)。 2. 将您的APK文件复制到Apktool所在的文件夹中。 3. 打开终端或命令提示符并导航到Apktool文件夹。 4. 输入以下命令以反编译您的APK文件apktool d your-apk-file.apk 5. 对您的应用程序进行任何修改。 6. 输入以下命令以重新打包您的应用程序:apktool b your-modified-app-folder 7. 使用Java keytool生成新的签名文件。例如,使用以下命令生成新的签名文件:keytool -genkey -v -keystore your-keystore-file.jks -alias your-alias -keyalg RSA -keysize 2048 -validity 10000 8. 使用以下命令将您的应用程序签名:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your-keystore-file.jks your-modified-apk-file.apk your-alias 9. 安装已签名APK文件并测试它。 请注意,修改和重新打包应用程序可能会违反某些法律和条款。请确保您有权执行此操作,否则可能会面临法律后果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值