安卓app源代码反编译,对于一个程序的apk能不能反编译成代码

1,对于一个程序的apk能不能反编译成代码测试环境:win 7 使用工具:1. apktool 2. dex2jar3. jd-gui 4. 工具介绍:1. apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看.2. dex2jar作用:将apk反编译成Java源码(classes.dex转化成jar文件).3. jd-gui作用:查看APK中classes.dex转化成出的jar文件,即源码文件.通过以上的工具可以实现程序的apk反编译成代码 。.net?c++?vb? 应该这么说吧 , 反编译和反汇编是不同概念,反编译是把程序还原到源代码状态,而能够把程序反编译的程序现在还没有现世,最多最多只能把程序反汇编成汇编语言 , 然后再自己去分析,要不然很多软件公司不都就倒闭了?不过虽说如此 , 用vb反编译精灵还是能够反编译vb编的程序的,但是也不能看到代码,只能看到基本的窗体结构 。望采纳!【安卓app源代码反编译,对于一个程序的apk能不能反编译成代码】
2,apk反编译工具怎么使用反编译apk工具使用最广泛的就是apktool,这里先说一下整个流程用到的工具有:1.apktool,下载后拿到apktool.bat和apktool.jar,然后把这两个工具放到C:\Windows底下 。这个工具的作用主要是得到apk的资源文件和配置文件2.dex2jar 下载这个工具解压后放到任意盘都可以,后面主要用这个根据apk的classes.dev文件生成供jd-gui工具解析的jar 。3.jd-gui上一步提到其作用,和2一样,也是下载后放到任意盘即可 , 到时候只要运行jd-gui.exe打开上一步生成的jar即可查看源码,下面对这个工具不再赘述下面详细说一下前面两个工具类的详细用法:先说apktool的用法:1.下载后拿到apktool.bat和apktool.jar,然后把这两个工具放到C:\Windows底下2.cmd打开后默认是你的计算机,默认的不用改,直接输入apktool,如果出现如下图的效果,即表示准备已就绪接下来,apktool d f:\app-debug.apk f:\app像这样输入,这里的f:\app-debug.apk是你的将要被反编译的apk的绝对路径,后面的f:\app是apk反编译后资源文件将要放入的文件夹 , 不需要事先新建好,在这里写好就行了,输入完回车,如果成功的话 , 即可在文件夹中看到资源文件,这里apktool的流程算完了 。接下来说一下第二个工具,dex2jar的使用流程:1.把你将要反编译的apk的扩展名改成压缩包的扩展名(rar\zip等) , 然后对其解压,找到classes.dev文件,将之复制后贴到dex2jar底下,效果如如下:接下来又要写命令了,同样cmd,然后转换到你的dex2jar目录 , 然后输入dex2jar.bat classes.dev,然后回车即可在dex2jar.目录中看到一个classes_dex2jar.jar 。好了,完了,贴图得到classes_dex2jar.jar了,前面说了jd-gui的作用了 , 直接打开这个就行了,得到的就是源代码了上图
3,如何反编译apk文件得到源码和XML文件1.下载反编译工具需要下载四个工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibotdex2jar:将apk中的classes.dex转化成Jar文件 。JD-GUI:反编译工具,可以直接查看Jar包的源代码 。apktool:反编译工具,通过反编译APK中XML文件,直接可以查看 。apktool-install-windows-r05-ibot:辅助windows批处理工具 。2.解压缩APK包apk文件也是一种常见的zip,常用的压缩软件就可轻松地解压apk文件 。用压缩软件将apk文件中的文件解压到一个文件夹中,得到APK中的资源包括XML文件和classes.dex文件,classes.dex就是java文件编译再通过dx工具打包而成的 。3.反编译dex文件解压apk文件后,你会发现res目录的图片没有加密,但java源码编译成了一个classes.dex文件 , 无法用普通的反编译class文件的方法来处理,dex2jar可以将dex文件转换成普通的jar包 。解压下载的dex2jar,把解压后的文件夹放到系统盘跟目录中并把这个目录加到系统path变量中,就可以直接用:dex2jar.bat或dex2jar.sh转换dex文件了 。DOS行命令如下:dex2jar.batxx\classes.dex(xx是classes.dex文件所在的路径) 。将在同目录得到普通jar包:classes_dex2jar.jar , 就可以用处理普通jar包的方法来反编译这个jar包得到原文件 。生成jar文件的截图如下:4.反编译jar包得到jar包后,下载自已喜欢的反编译工具,推荐使用JD-GUI,有比较简单的图形界面,可以反编译单个class文件,也可以反编译jar包 , 比较方便 。打开压缩文件JD-GUI,运行jd-gui.exe,打开上面生成的jar包,即可看到源代码了 。截图如下:5.反编译xml文件打开解压的res\layout目录,有很多xml文件,如果你想看下作者是如何设计界面的,你会很失望,因为你看到的是一大堆乱码!这个时候我们需要用到的是apktool 。具体操作方法:将下载的apktool和apktool-install-windows-r05-ibot两个包解压到同一个文件夹下,这个文件夹有三个文件:aapt.exe,apktool.bat,apktool.jar 。把这个文件夹也放到系统盘的根目录中并把这个目录加到path变量中 。以HelloWord.apk为例:在DOS命令行中输入:apktool d xx\HelloWord.apk HelloWord得到HelloWord文件夹,此文件夹中的xml文件就是编译好的可以正常查看的文件 。这样就得到了可以得到编译的源码和XML资源 。
4 , 如何反编译Android 的apkdexodex获得源码反编译普通的APK文件:对于普通的APK/DEX文件的反编译,其实工具有很多, 包括:ByteCode Viewer: 一个可视化的集成工具,说实话,不太好用 , 不够稳定,生成代码质量中等 。dex2jar + jd_gui: 这两个工具组合还可以,用起来比ByteCode Viewer麻烦一些,但比较稳定,生成代码质量中等 。反编译ODEX文件:Android 5.0 Lollipop以后,Google用ART代替了以前的Dalvik,对于普通的app来说我们仍然可以用上面的方法来把dex文件反编译成Java源代码 。但对于系统预装的App,特别是类似应用商店 , 播放器等,你会发现这些应用的apk文件中找不到对应的classes.dex文件,而是会发现在其子目录下有个.odex文件 。那如何反编译这个odex文件呢?我通过google查了查 , 知道应该用baksmali , 但从github上下载了几个版本都不行,报各种不同错误 。具体方法如下:1. 从 这里 下载工具包,解压缩到本地 。这里的baksmali的版本是32313133353236313431303231363533e58685e5aeb9313333613138392.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内核的版本217. 运行 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代码 。我会一个简单的反编译方法就是把apk下载下来,然后把后缀改成.rar就可以了 。angularjs的directive,你输入特定数据,他就能输出相应ui视图,这样的directive可以变成了一个html通用组件,比如文章编辑器组件、分页导航组件、madal组件等,在不同应用中可以直接拿来用,减少重复开发 。我想,backbone大概很难实现这样的通用组件 。backbone的view没有把html与javascript解耦,要控制ui视图,实际上就是用javascript控制dom,或者通过第三方模板引擎控制html字符串,而这些 , 都需要程序员在代码中用javascript自行实现 。angularjs不同,写ui视图就是写正常的html/css,写逻辑控制代码就是用javascript操控数据(不是dom),不同的就是增加了directive,实现dom与数据的互动,如上所述,directive是通用组件 。angularjs只是定义了一个环境和一个数据与视图交互的机制 , 并提供了若干通用组件和服务,所以angularjs开发很简单,很高效,很“原生态” 。虽然我没有真正写过桌面应用程序,但我觉得angularjs的理念就是把web当作应用程序来写——web app 。反观backbone,对于数据与ui视图的互动并没有大的改进,仅仅提供了数据变更事件通知,它侧重于rest数据交互了,而rest数据交互本来是很容易处理的 。

    推荐阅读