ANDROID反编译方法
来源:互联网 发布:box2d js 编辑:程序博客网 时间:2024/05/21 07:01
前提:操作系统需配置了jdk
一、找到apk中的class.dex:
把apk文件改名为.zip,然后解压缩其中的class.dex文件,它就是java文件编译再通过dx工具打包成的。
二、得到java源文件
工具准备:
1、把dex文件反编译为jar文件的工具。(dex2jar)
http://code.google.com/p/dex2jar/downloads/list
2、把jar反编译为java的工具。(JD-GUI)
http://java.decompiler.free.fr/?q=jdgui
反编译步骤:
1.在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex文件所在路径及名称,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路径下, classes.dex在D:\Android下,所以: 你进入dex2jar.bat路径下后,输入dex2jar.bat D:\Android\classes.dex,这样会生成一个jar文件。
2.用rar解压出jar文件中的class文件,然后用jad或DJ Java Decompiler反编译工具将.class文件反编译成.java文件
3、运行JD-GUI工具(它是绿色无须安装的),打开上面的jar文件,在File下有个Save JAR Source,它可以生成src源代码。
三、上面操作只能得到class文件,下面利用Google提供的apktool得到xml文件
1. 下载apktool,可以去Google的官方下载,地址:http://code.google.com/p/android-apktool/得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。解压apktool-install-windows.zip到任意文件夹,然后解压apktool-1.0.0.tar.bz2得到apktool.jar,放到apktool-install-windows解压后的目录下。
2. Win+R 运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入apktool看看。会列出一些帮助的话就成功了(解释d为加压 第一个路径为你的apk所在的位置。第二个是要输出的位置)
apktool d e:\a.apk(apk路径)ABC(文件夹名称)
这时当前目录下生成 ABC文件夹,里面就是反编译出的东西了
常见问题:
一,找不到R文件时:
一般放在res\values\public.xml里
比如,反编译的类里setContentView(2130903174); 2130903174是十进制的,转化成十六进制就能够在public.xml中找到文件名了。
个人推荐使用:WIN7中点击“开始”--”程序“--“附件”--“计算器”,按 “查看”再选“程序员”,就可以方便的进行各进制的转换了(如:你要转换10进制90000000为16进制,点“十进制”,输入90000000,再点一下“16进制”,就会看到55D4A80,转换就完成了。其他同理)。
二,连接不上ADB时:
报错信息:
ADB server didn't ACK * failed to start daemon *
ADB server didn't ACK
* failed to start daemon *
在cmd中进入adb的路径,输入命令:adb kill-server,执行完毕后再输入命令adb start-server,重启eclipse即可
--------------------------------------------------------------------------
上述方法无效时:
当输入adb start-server不能够重启adb时,反而抛出如下信息:
adb server is out of date.
ADB server didn't ACK
* failed to start daemon *
出现这种问题的原因有可能是adb需要的端口被占用。
在cmd中查看adb需要的端口,输入命令:adb nodaemon server,显示结果:can't bind "tcp:5037"
下面就找找5037端口是被哪个进程占用了,输入命令:netstat -ano | findstr "5037",显示结果:
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 5892
TCP 127.0.0.1:5037 127.0.0.1:1218 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:1220 TIME_WAIT 0
所以需要关闭PID为5892的进程。命令tasklist可以查看所有的进程,找到关闭即可。
另外,根据以上方法发占用5892端口的任务是db_adb.exe,这个是金山毒霸连接手机杀毒的任务,在任务管理器中没有办法关闭,在右下角的任务列表中右键单击金山毒霸的图标,关闭手机链接,就能够kill这个任务了。
一、找到apk中的class.dex:
把apk文件改名为.zip,然后解压缩其中的class.dex文件,它就是java文件编译再通过dx工具打包成的。
二、得到java源文件
工具准备:
1、把dex文件反编译为jar文件的工具。(dex2jar)
http://code.google.com/p/dex2jar/downloads/list
2、把jar反编译为java的工具。(JD-GUI)
http://java.decompiler.free.fr/?q=jdgui
反编译步骤:
1.在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex文件所在路径及名称,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路径下, classes.dex在D:\Android下,所以: 你进入dex2jar.bat路径下后,输入dex2jar.bat D:\Android\classes.dex,这样会生成一个jar文件。
2.用rar解压出jar文件中的class文件,然后用jad或DJ Java Decompiler反编译工具将.class文件反编译成.java文件
3、运行JD-GUI工具(它是绿色无须安装的),打开上面的jar文件,在File下有个Save JAR Source,它可以生成src源代码。
三、上面操作只能得到class文件,下面利用Google提供的apktool得到xml文件
1. 下载apktool,可以去Google的官方下载,地址:http://code.google.com/p/android-apktool/得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。解压apktool-install-windows.zip到任意文件夹,然后解压apktool-1.0.0.tar.bz2得到apktool.jar,放到apktool-install-windows解压后的目录下。
2. Win+R 运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入apktool看看。会列出一些帮助的话就成功了(解释d为加压 第一个路径为你的apk所在的位置。第二个是要输出的位置)
apktool d e:\a.apk(apk路径)ABC(文件夹名称)
这时当前目录下生成 ABC文件夹,里面就是反编译出的东西了
常见问题:
一,找不到R文件时:
一般放在res\values\public.xml里
比如,反编译的类里setContentView(2130903174); 2130903174是十进制的,转化成十六进制就能够在public.xml中找到文件名了。
个人推荐使用:WIN7中点击“开始”--”程序“--“附件”--“计算器”,按 “查看”再选“程序员”,就可以方便的进行各进制的转换了(如:你要转换10进制90000000为16进制,点“十进制”,输入90000000,再点一下“16进制”,就会看到55D4A80,转换就完成了。其他同理)。
二,连接不上ADB时:
报错信息:
ADB server didn't ACK * failed to start daemon *
ADB server didn't ACK
* failed to start daemon *
在cmd中进入adb的路径,输入命令:adb kill-server,执行完毕后再输入命令adb start-server,重启eclipse即可
--------------------------------------------------------------------------
上述方法无效时:
当输入adb start-server不能够重启adb时,反而抛出如下信息:
adb server is out of date.
ADB server didn't ACK
* failed to start daemon *
出现这种问题的原因有可能是adb需要的端口被占用。
在cmd中查看adb需要的端口,输入命令:adb nodaemon server,显示结果:can't bind "tcp:5037"
下面就找找5037端口是被哪个进程占用了,输入命令:netstat -ano | findstr "5037",显示结果:
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 5892
TCP 127.0.0.1:5037 127.0.0.1:1218 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:1220 TIME_WAIT 0
所以需要关闭PID为5892的进程。命令tasklist可以查看所有的进程,找到关闭即可。
另外,根据以上方法发占用5892端口的任务是db_adb.exe,这个是金山毒霸连接手机杀毒的任务,在任务管理器中没有办法关闭,在右下角的任务列表中右键单击金山毒霸的图标,关闭手机链接,就能够kill这个任务了。
- Android 反编译方法 防止反编译方法
- android反编译拿来主义方法
- Android反编译拿来主义方法
- ANDROID反编译方法
- android apk 反编译方法
- android APK 反编译方法
- Android反编译方法
- Android手机反编译方法
- android apk反编译方法
- android反编译方法
- android反编译和防止反编译的方法
- android反编译和防止反编译的方法
- android反编译和防止反编译的方法
- android反编译和防止反编译的方法
- android反编译和防止反编译的方法
- android反编译和防止反编译的方法
- android反编译和防止反编译的方法
- android反编译和防止反编译的方法
- HDU 2289 不要62
- memcache
- Cocos2D 开发工具集
- Ubuntu环境下网络连接配置
- iOS 自定义cell
- ANDROID反编译方法
- 示例说明consistent read,current read,logical read,phicical read的概念及关系
- 【cocos2d-x入门实战】环境配置、交叉编译及安卓项目的生成
- OpenCV、EmguCV之打开图片
- HDU 3339 In Action(01背包+Dijkstra算法)
- Lync 2013媒体流量的网络带宽要求
- 设计一个例子,演示PCTUSED和PCTFREE对数据操作的影响
- linux个人常用配置命令
- 快节奏,慢下来