1. 安卓apk文件如何反编译
安卓apk文件反编译:
一、反编译xml文件
1>
首先下载我给你们提供的文件夹apk_fanbianyi,把它放到某个盘的根目录下(为了方便输入dos命令),然后打开apktool文件夹,安装win+r键,然后输入cmd,进入dos命令行,大家别怕,不用晕,很简单的。
2>
然后在dos命令中首先输入文件夹所在盘符+“:”回车,接着再输入cd+apktool所在目录,切换dos工作空间到apktool文件夹下。
3>
接着输入
apktool.bat
d
【需反编译apk文件路径】
{【反编译文件反编译后的路径】},其中最后一部分可以省去,系统会默认把apk文件反编译到apktool目录下,例如输入
apktool.bat
d
d:/apk_fanbianyi/ttkp.apk,在apktool文件夹下就会生成一个ttpk的文件夹,所有的xml文件全部反编译成功。
二、反编译java文件
1>
首先解压需要反编译的apk文件,拷贝出里面的classes.dex文件到dex2jar文件夹(为了方便操作,省去dos命令输入路径的麻烦)
2>
把工作空间切换到dex2jar文件夹下,输入命令cd
d:/apk_fanbianyi/dex2jar回车
3>
输入命令dex2jar.bat
classes.dex回车,发现dex2jar文件夹下多了一个classes_dex2jar.jar文件,这是反编译成功的java文件
三、xml文件的打开
1>
打开apktool文件夹下的ttkp文件夹,任意找到一个xml文件,选中单击右键,选择notepad++打开(需下载),如果没有此软件,可以选择打开方式,选择记事本打开
四、java文件的打开
1>
dex2jar文件夹下的classes_dex2jar.jar拷贝到apktool文件夹的ttkp文件夹中,不能用notepad++打开,不然会乱码的
2>
启动apk_fanbianyi文件夹下的jd-gui.exe,然后点左上角file,选择open
file,找到classes_dex2jar.jar文件,可以发现有很多包,选择包下的任意一个java文件,打开不乱码了,是不是很神奇,哈哈,你学会了安卓apk文件反编译
2. JAVA反编译软件
由于JAVA语言安全性高、代码优化、跨平台等特性,从1995年5月由SUN公司发布后,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位。
不过,JAVA最突出的跨平台优势使得它不能被编译成本地代码,而要以中间代码的形式运行在虚拟机环境中,这使得JAVA的反编译要比别的高级语言容易实现,并且反编译的代码经过优化后几乎可以与源代码相媲美。
为了更好地保护知识产权,避免本公司的智力成果轻易被人窃取,开发者有必要对反编译工具深入了解,以便有针对性地采取保护措施。
目前,比较流行的JAVA反编译工具有近30种,其中有三款堪称精品:
一、 应用广泛的JAD
在众多的JAVA反编译工具中,有几种非常着名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产的JAVA源代码反编译专家。
JAD本身是一个命令行工具,没有图形界面,上述的这些工具大多是在JAD内核的基础之上加了一个图形界面而已。这么多种产品的共同选择,足可证明JAD在JAVA反编译领域中的尊贵地位。
JAD是使用Microsoft Visual C++开发的,运行速度非常快,可以处理很复杂的JAVA编译文件。众多的参数使JAD可以灵活应付多种加密手段,令反编译的代码更加优化和易读。由于JAD参数太多,没必要一一解释,其中有几个最常用的如下(以JAD 1.5.8f版本为例):
-d
- 用于指定输出文件的目录
-s - 输出文件扩展名(默认为: .jad),通常都会把输出文件扩展名直接指定为.java,以方便修改的重新编译。
-8 - 将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。
最常用的反编译指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
这条指令将当前目录下的javatest.class反编译为javatest.java并保存在c:\javasource目录里,其中的提示输出为中文,而不是Unicode代码。
二、 源码开放的JODE
JODE是全球最大的开源项目网站Sourceforge.net的成员,在所有的JAVA反编译器中,JODE的反编译效果是最好的,尤其是对付一些常见的加密手段,例如混淆技术等,更是出类拔粹。
JODE本身也是纯JAVA开发的,最近越来越多的JAVA反编译软件也选择JODE来做它们的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit’s JavaInsight plugin等。
JODE是一个可运行的JAR文件,在windows环境下双击即可运行。
需要特别说明的是,JODE不是通过常规的Open->File的方式来加载JAVA编译后的类文件(*.class)或是类包(*.jar)的, 而是通过在Options菜单中的Set Classpath来实现的,单独的类文件可以将它的上一级目录作为Classpath输入,然后再选择Reload Classpath即可。
新加入的类包或是类的名字会在左侧窗口出现,双击类包名可以展开目录树结构,双击需要反编译的类名则在右上角的窗口中直接显示反编译后的源代码。
三、 独树一帜的DAVA
DAVA不是一个独立的JAVA反编译器,而是JAVA代码优化工具Soot的一部分。Soot和JODE一样是纯JAVA开发的,也是一个独立的JAR包,但却不能通过双击直接运行,而是象JAD一样在命令行状态运行。
Soot对环境变量的配置要求非常严格,通常情况下要对CLASSPATH做如下设置:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下载的soot类包放置的路径,CLASSPATH末尾的.;代表了当前目录,如果不加上这个的话Soot经常会报一个找不到类的错误。
DAVA是作为Soot的一个参数使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最后的类名不用带.class后缀,因为它默认是处理class文件,这个操作与前述的JAD的参数效果相同。
DAVA采取了流程优化的方式进行反编译,与传统反编译思路不尽相同,但却对改变流程类的加密方法有独特的反编译效果。
上述的三种工具各有千秋,但效果都非常不错。经测试,它们基本上都可以把JDK自带的一些例程完全反编译,然后不加任何修改可再编译成功,并能正常运行!
3. jadx反编译后可以重新打包吗
1、首先新建一个android项目,里面只有一个MainActivity,而且主界面只会显示一个字符串:你好。
2、接着,切换到这个项目生成的apk文件所在的目录,可以看到有一个hellodemo.apk。
3、在命令行输入:apktool d -r hellodemo.apk。可以看到在当前目录下生成了一个hellodemo文件夹。
4、进入到hellodemo\smali\com\example\hello,打开MainActivity.smali。找到:
const-string v1, "\u4f60\u597d",
修改为:
const-string v1, "hello",
5、然后在命令行输入:apktool b hellodemo hellodemo1.apk。这回重新打包成hellodemo1.apk。
6、然后给新生成的apk进行签名。把这个apk拷贝到autosign的目录下面,然后切换过去,在命令行输入:java -jar signapk.jar testkey.x509.pem testkey.pk8 hellodemo1.apk hellodemo.apk。
7、把生成的hellodemo.apk安装到手机,可以看到主界面上已经显示的是hello,而不再是你好。说明反编译重新打包成功!
4. android apk反编译软件哪个好用
Android反编译的目的无非就是为了看到APK的xml、资源和代码:
得到代码的方式:直接解压APK文件 --> 得到classes.dex文件 --> 使用 dex2jar
classes.dex classes.jar生成jar文件 --> [可选的解压jar文件]
-->使用XJad或者JDCompiler查看源代码
得到XML的方式:
方式1:直接解压APK文件 --> 通过axmlprinter工具查看XML文件(这种方式查看的XML文件的id都是数字--即R文件中id对应的值)
方式2:使用APKTool工具解压APK文件可以直接查看XML文件
Android反编译常常使用如下的一些工具:
1、反编译命令:
apktool d D:\\Developer\androidDecode\Test0201.apk D:\\Developer\androidDecode\test0201
D:\\Developer\androidDecode\Test0201.apk:要反编译的APK文件
D:\\Developer\androidDecode\test0201:反编译文件的保存目录,必须为空目录
2、从反编译的文件编译成APK apktool b D:\\Developer\androidDecode\test0201 D:\\Developer\androidDecode\test020101.apk
D:\\Developer\androidDecode\test0201:保存编译后文件的目录
D:\\Developer\androidDecode\test020101.apk:生成的新的APK文件的保存的绝对路径
3、签名APK文件:
singedAPK.bat文件
java -jar "%~dp0signapk.jar" "%~dp0testkey.x509.pem" "%~dp0testkey.pk8" %1 signed.apk
执行singedAPK.bat命令
singedAPK D:\\Developer\androidDecode\test020101.apk 生成一个singed.apk文件和test020101.apk在同一个目录
4、使用baksmali.jar把一个dex文件转换为一个smali文件
java -jar D:\\Developer\ApkTool\baksmali.jar -o
D:\\Developer\androidDecode\baksmaliout
D:\\Developer\androidDecode\Hello.dex
D:\\Developer\ApkTool\baksmali.jar:baksmali.jar文件所存在的全路径
D:\\Developer\androidDecode\baksmaliout:生成的smali文件的保存目录
D:\\Developer\androidDecode\Hello.dex:要转成smali文件的路径
5、使用ddx.jar把一个dex文件转换为ddx文件
java -jar D:\\Developer\ApkTool\ddx.jar -d D:\\Developer\androidDecode\ddxout D:\\Developer\androidDecode\Hello.dex
D:\\Developer\ApkTool\ddx.jar:ddx.jar文件的绝对路径
D:\\Developer\androidDecode\ddxout:要保存ddx文件的路径
D:\\Developer\androidDecode\Hello.dex:要转换的dex路径
6、Android自带dexmp工具:dex文件转为smali文件 dexmp -d xxxx.dex > xxxx.smali
7、dex2jar.jar:dex2jar XXX.dex YYY.jar
5. 推荐几款在手机使用的apk反编译软件
dede 反编译delphi
depb,pbkill 反编译pb
vb rezq 反编译vb
Reflector 反编译.net
foxtoolsd 反编译 vf
等等
不要对反编译期望太大,几乎没什么用,Reflector反编译不错,因为是伪代码,只要没用混淆器混淆的,代码几乎能拿过来使用,
其它的效果不是很理想
在使用过程中,没遇到什么需要注意的问题,软件使用很简单,就是用了没多大用,望采纳!谢谢!
6. 如何反编译Android 的apk/dex/odex,获得源码
关于APK,DEX的介绍
当我们编译一个安卓项目的时候,整个项目会被打包成一个 .apk文件。这个文件其实是一个标准的zip文件,因此可以用解压缩工具打开。这个apk文件一般都包含程序的代码(在classes.dex文件中), 资源文件, 证书, manifest 文件等。 其中对我们最重要的是classes.dex文件,因为编译后的字节码(bytecode)都是放在这个文件中。我们后面讲的反编译就是针对这个dex文件来的。
反编译普通的APK文件:
对于普通的APK/DEX文件的反编译,其实工具有很多, 包括:
ByteCode Viewer: 一个可视化的集成工具,说实话,不太好用,不够稳定,生成代码质量中等。
dex2jar + jd_gui: 这两个工具组合还可以, 用起来比ByteCode Viewer麻烦一些,但比较稳定,生成代码质量中等。
在线反编译工具JADX: http://www.javadecompilers.com/apk , 这是基于SourceForge上的JADX的开源工具来实现的。本来以为在线反编译质量不会好,但出人意料的是:JADX是我发现的最好的反编译工具, 不但使用简单(直接上传,转换,下载就ok),而且反编译出来的代码质量很高,特别是变量命名方面,可读性很不错。
反编译ODEX文件:
Android 5.0 Lollipop以后,Google用ART代替了以前的Dalvik,对于普通的app来说我们仍然可以用上面的方法来把dex文件反编译成Java源代码。但对于系统预装的App,特别是类似应用商店,播放器等, 你会发现这些应用的apk文件中找不到对应的classes.dex文件,而是会发现在其子目录下有个.odex文件。 那如何反编译这个odex文件呢?我通过google查了查,知道应该用baksmali,但从github上下载了几个版本都不行,报各种不同错误。经过反复搜索和尝试,终于找到了这篇文章
: http://www.naldotech.com/how-to-deodex-applications-on-android-5-0-lollipop/ 。 具体方法如下:
1. 从这里下载工具包, 解压缩到本地。 这里的baksmali的版本是2.0.3. 不同版本的baksmali针对的Android内核不同。有时候高版本反倒不好用。
2. 打开工具所在目录, 按住shift键, 点击鼠标右键,打开windows命令窗口
3. 把 odex文件拷贝到该目录
4. 在命令窗口运行: oat2dex.bat *.odex. 正常情况下,应该显示OK等信息。如果报错的话,说明这个文件无法转换,后面的也不用试了。
5. 运行 oat2dex.bat *.odex temp.dex . 运行后会创建一个temp.dex文件。
6. 运行 java -jar baksmali-2.0.3.jar -a 21 -x temp.dex -o source . 运行后会创建一个source的文件夹,并将temp.dex反编译到该文件夹。-a 21 表明的是Android内核的版本21
7. 运行 java -jar small-2.0.3.jar -a 21 source -o classes.dex, 反编译为classes.dex文件。
需要注意的是:由这种方式反编译成的classes.dex 文件相比原生的classes.dex 还是缺少了些信息,因此反编译这种classes.dex 文件后生成的java代码可读性会更差些。
8. 用在线工具JADX 来把 classes.dex 最终反编译为java代码。
7. Mac安装Jadx反编译工具
找到编译好的jadx-gui可执行文件运行
我的Mac目录:/Users/mac/jadx/build/jadx/bin/jadx-gui
结束~🍺🍺🍺~
8. 求安卓软件反编译修改教程
1、baksmali:classes.dex反编译为smali格式
(smali:smali格式编译打包为classes.dex,但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助 )
2、dex2jar:classes.dex转为jar包
3、jdgui:jar反编译并阅读
操作顺序:
apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。注意安装时要先删除原来手机里的版本,因为签名不同。
9. android反编译工具 jadx 怎么读
Android上面的反编译工具很多,我个人比较喜欢jadx,操作简单,界面简洁。
下载jadx并解压,点击“bin”目录下面的“jadx-gui.bat”文件,出现下图所示的界面
选中要反编译的apk文件后,界面变成下图所示
任意点开一个类,我们就可以看到该类的源代码了
有的类的变量和方法名都变成了a,b,c,d。。。,如下图所示
详细解答
10. App静态逆向分析思路浅析(过检测)
推荐阅读
福利来啦-优惠券活动
App静态逆向分析思路浅析(过检测)
https://blog.csdn.net/u011426115/article/details/121346288
jadx+frida
查看apk是否加壳 (apk未加壳)
搜索root检测特征、逻辑,其中Hook ( 如:Xposed、Frida等 )检测的字符串特征类似,可以通过jadx、JEB3等反编译工具快速搜索定位到检测关键点
Hook下面的方法( 使用Xposed、Frida等进行Hook )
com.google.firebase.crashlytics.internal.common.CommonUtils.isRooted
com.google.firebase.crashlytics.internal.common.CommonUtils.isEmulator
com.google.firebase.crashlytics.internal.common.CommonUtils.isDebuggerAttached
com.google.firebase.crashlytics.internal.common.CommonUtils.isAppDebuggable
CommonUtils.isRooted.overload().implementation = function(){
}
在jadx的搜索文本中,输入” native+空格 ”快速定位App中的native接口,分析是否存在Root、Hook、模拟器环境、云手机环境、App风险环境等相关检测
搜索" hook、xposed、frida、su、root、/system/ "等特征字符串快速定位
分析apk是否可以反编译、是否可以重打包、是否可以签名,是否存在签名校验等检测
推荐阅读
Android安全基础
Objection动态分析App
Frida Hook的使用方法
IDA静态动态逆向分析基础
Android逆向分析常用方法
IDA动态调试逆向分析Android so
C#开源项目-二进制文件的反编译器
Radare2逆向分析dex/so/二进制等文件的使用方法