Android 反编译

反编译:

  • 资源文件获取Apktool
    按照官网的指示配置完成后,执行apktool命令

    apktool d xxx.apk
    // 如果提示-bash: /usr/local/bin/apktool: Permission denied
    cd /usr/local/bin
    sudo chmod +x apktool
    sudo chmod +x apktool.jar
    

    执行完成后会在apktool.jar的目录下升级一个文件,里面可以看到xml的信息

    cd /usr/loca/bin
    open .
    
  • 源码文件获取dex2jar
    将apk文件解压后获取class.dex文件,然后将dex文件拷贝到dex2jar目录中

    sh d2j-dex2jar.sh classes.dex 
    d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied
    // chmod一下
    sudo chmod +x d2j_invoke.sh
    sh d2j-dex2jar.sh classes.dex
    

    执行完成后会在当前目录中生成一个 classes-dex2jar.jar

  • jar包源码查看工具jd-gui
    里面有osx的版本,安装后直接打开上面用dex2jar编译出来的.jar文件就可以查看源码了

反编译后的源码修改

修改代码及资源,最好的方式是修改apktool反编译后的资源级smali代码。JD-GUI查看的java代码不适宜修改,因为修改后还需要重新转换成smali,才能重新编译打包会apk。
至于smali的修改,则要学习smali语言的语法了,smali是一种类似汇编语言的语言,具体语法可自行上网学习。
在smali文件夹中找到与具体类对应的smali文件,然后进行修改
可以用到java2smali将java代码转换成smali代码

重新打包

B0000000134553m:bin xuchuanren$ apktool b xxxfilename 
I: Using Apktool 2.4.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
S: WARNING: Could not write to ( instead...
S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...

生成的apk在该文件xxxfilename中的dist目录中

重新签名

重新签名用的是jarsigner命令

jarsigner -verbose -keystore [your_key_store_path] -signedjar [signed_apk_name] [usigned_apk_name] [your_key_store_alias] -digestalg SHA1 -sigalg MD5withRSA
  • [your_key_store_path]:密钥所在位置的绝对路径
  • [signed_apk_name]:签名后安装包名称
  • [usigned_apk_name]:未签名的安装包名称
  • [your_key_store_alias]:密钥的别名

如:

jarsigner -verbose -keystore /development/key.keystore -signedjar signed_apk.apk xxx.apk charon -digestalg SHA1 -sigalg MD5withRSA
Enter Passphrase for keystore: 
   adding: META-INF/MANIFEST.MF
   adding: META-INF/CHARON.SF
   adding: META-INF/CHARON.RSA

执行完后会在当前目录下生成签名后的apk文件

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程