apk反编译 删减资源并且打包(完整版)

时间:2022-03-31 21:02:35

我从网上查了很多资料 发现没有一个资料能让鄙人安满意啊

都是东拼西凑的哦

好在黄天不负有心人 我们开始吧 这文章并不反编译代码哦 看好了哦

一、准备必要工具

  工欲善其事,必先利其器,首先我们要下载好反编译apk时需要的相关工具

1.1、使用工具

  1. apktool (资源文件获取) 
  2. dex2jar(源码文件获取)
  3. jd-gui  (源码查看)

1.2、工具介绍

  apktool  

         作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看

  dex2jar

         作用:将apk反编译成java源码(classes.dex转化成jar文件)

  jd-gui

         作用:查看APK中classes.dex转化成出的jar文件,即源码文件

 apktool下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads

  dex2jar下载地址:http://sourceforge.net/projects/dex2jar/files/

  jd-gui下载地址:http://jd.benow.ca/

 然后将【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分别解压到当前文件夹 并删除zip包 不然不得劲哦

我魔蝎座的哦 不是处女座哦

 进入CMD命令行,如下:

  apk反编译 删减资源并且打包(完整版)

  切换到上述的3个工具的所在目录,如:E:\AndroidDevelopTool\Android反编译工具包

  apk反编译 删减资源并且打包(完整版)

  接下来我们要做的就是运行apktool_2.0.1.jar这个jar文件来将apk文件进行反编译,在java中,运行可执行jar包的命令是:

java -jar jar包名.jar

  使用如下的命令运行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

到这个地方基本上得到包了 

咔咔咔一顿删除 我用python删的

import requests
from lxml import etree
import os,shutil

def mian():
    #遍历文件

    path=r'H:\反编译\csdn反编译\MMTS'
    mp3Path=r'C:\Program Files\WindowsApps\Microsoft.SkypeApp_12.8.487.0_x64__kzf8qxf38zg5c\SkypeApp\Assets\Audio\empty_sound.mp3'
    originFile=r'C:\Program Files (x86)\Common Files\Tencent\QQMiniDL\60\GameUpdateSkin\scrollbar_bk.png'


    if os.path.exists(path)==False:
        print("文件目录不存在")
        return ""
    for (root,dirs,files) in os.walk(path) :

        for fileName in files:
            file=os.path.join(root,fileName)

            if  file.endswith(".png") :
                shutil.copy(originFile, file)
                pass
            if file.endswith(".mp3") :
                pass
                #print(file)
                #shutil.copy(originFile, file)

               #shutil.copy(originFile, file)

    pass


mian()

看出来我的多才多艺了 你也可以用java替换就是一顿递归

打包!!这个没有完整教程  至少我是没找到的 但是你幸运的很 找到我这篇博客了 

这个我也不知道有没有简单的方法 但是鄙人虽然愚钝 但是好歹也弄出来了

只要结果是好的 我再麻烦一点也无所谓 我是笨方法 请按照步骤跟我来

path 设置如下路径 也就是环境变量

G:\android\sdk\build-tools\24.0.2

配置到了这个地方 因为他们网上说要aapt 这个目录

然后我又把那个aaptkool_1.0.0.jar弄进了

G:\android\sdk\build-tools\24.0.2

然后又新建apktool.bat 并写入内容copy到(先弄txt 写入后改后缀)

G:\android\sdk\build-tools\24.0.2
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
chcp 65001 2>nul >nul
java -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0\apktool.jar" %*

接下来的代码可谓是沁人心脾

apktool b  H:\反编译\csdn反编译\MMTS -o text.apk

瞬间爆炸 完成五杀

当然鄙人安还没有傲娇 还要再签名一次

签名

签名是对要发布的apk文件作标记,确保你的apk文件有唯一的身份归属认证,只有相同签名和相同包名的文件才可以覆盖安装并保留用户信息。

对于反编译的apk,我们可以通过jarsigner来对它进行签名。

生成keystore文件

首先,签名需要keystore文件,可以使用keytool工具生成,一般Java环境都带有keytool命令,可以在命令行测试。

keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
  • 1

各个参数解释如下:

-genkey 产生证书文件 
-alias 产生别名 
-keystore 指定密钥库的.keystore文件中 
-keyalg 指定密钥的算法,这里指定为RSA(非对称密钥算法) 
-validity 为证书有效天数,这里我们写的是40000天

输入上述命令后,会有如下的提示:

输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
  [Unknown]:  test
您的组织单位名称是什么?
  [Unknown]:  test
您的组织名称是什么?
  [Unknown]:
您所在的城市或区域名称是什么?
  [Unknown]:
您所在的州或省份名称是什么?
  [Unknown]:
该单位的两字母国家代码是什么
  [Unknown]:
CN=test, OU=test, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正确吗?
  [否]:  y


输入<demo.keystore>的主密码
        (如果和 keystore 密码相同,按回车):

签名apk

jarsigner也存在于Java JDK的安装包当中,所以安装好了Java环境的话,可以直接在命令行使用。

jarsigner -verbose -keystore demo.keystore demo.apk demo.keystore
  • 1

-verbose 指定生成详细输出 
-keystore 指定数字证书存储路径

这样,就完成了对一个apk的签名过程,然后就可以安装使用了。注意如果你的手机上原来就有这个apk,需要卸载掉。因为新apk的签名已经改变了。