反编译apk 修改 合成

Posted 韩亚飞_yue31313_韩梦飞沙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反编译apk 修改 合成相关的知识,希望对你有一定的参考价值。

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha

反编译apk帮助文档

准备工具

  1. dex2jar(dex转换jar工具),下载地址: http://dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip
  2. apktool.jar(获取apk资源文件、注册文件、so库等),下载地址:http://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2
  3. jdk1.7+
  4. eclipse+adt
  5. sdk
  6. 将待编译的apk包(如a.apk)复制一份,重命名为a.zip并打开获取里面的classes.dex文件,将classes.dex文件复制到dex2jar目录下
  7. cmd命令cd到dex2jar目录下,执行d2j-dex2jar classes.dex,会得到一个叫classes-dex2jar.jar文件
    1. cmd 命令 cd到a.apk所在位置,执行java -jar apktool.jar d -f a.apk .\a ,完毕后会在当前目录得到a文件夹
    2. 打开eclipse 新建一个空android项目,删除libs、res目录下文件,删除AndroidManifest.xml文件,将a文件夹中的assets文件夹、res文件夹、AndroidManifest.xml文件复制到工程的根目录,查看a文件夹中是否存在lib文件夹,如果有将里面的内容(so库)也全部复制到工程的libs目录下,再将第2步得到的classes-dex2jar.jar也复制到libs目录下
    3. Ctrl+H把整个项目中@*android替换成@android(正则替换)[这一步可以不操作]
    4. 打开AndroidManifest.xml文件,将manifest节点下package属性值改成自定义的包名,android:versionCode、android:versionName 看情况酌情修改,再看application的android:name、activity的android:name、service 的 android:name、receiver的android:namer是否是.开头,如果是,在.的前面加上a.apk本身的包名
    5. 查看res目录下的文件是否出错,如果有打开出错的文件,看是不是因为命名空间导致的,如: xmlns:panel="http://schemas.android.com/apk/res/xxx.xxx.xxx修改其后缀xxx.xxx.xxx(包名)改成a.apk本身的包名
    6. 项目右键运行即可生成apk
    7. 如果java代码中将一些东西写死,如由包名拼凑成的应用私有路径 /data/data/xxx.xxx.xxx/files,这时候因为沿用了不存在的包名系统会出错,这时候可以尝试以下几种方法:

开始操作

附加说明

a)         如果这种定义是在属性中,用反射在application的onCreate方法中更改之

b)        如果这种定义是在方法中,可以通过一些工具(如javassist等)来修改class二进制字节码,然后替换之

c)         用jd-gui等反编译工具探知其目标包路径,自建项目模拟内容再获取class文件替换之

d)        如果还是沿用旧的包名,因为签名变了,所以不用担心应用会被“真”的应用在更新的时候给覆盖掉

以上是关于反编译apk 修改 合成的主要内容,如果未能解决你的问题,请参考以下文章

安卓反编译出来的代码如何修改重新生成APK

apk是啥文件,Android文件中怎么反编译

反编译APK,修改一个activity并重新编译成APK

安卓apk反编译修改重新打包签名全过程

反编译CHM后如何重新合成

如何修改反编译的apk的包名? [关闭]