zoukankan      html  css  js  c++  java
  • apk应用的反编译和源代码的生成

    对于反编译一直持有无所谓有或无的态度。经过昨天一下午的尝试,也有了点心得和体会:

    先给大家看看编译的过程和我们反编译的过程概图吧:




     例如以下是反编译工具的根文件夹结构:


    三个目录也实际上是下面三个步骤的体现:

    (不知道大家发现没,我把三个文件夹名字都改了一下,apktool即为处理apk的工具;dex2jar即就是将dex文件处理为jar包的工具。jar2gui即就是我们将jar包内的class转换为源代码的gui界面以供大家參考的工具)


    setp 1: 在apktool里:
      打开dos框(cmd进入然后进入该文件夹下。这个应该都是妇孺皆知的事情了)运行  apktool d -s xxx.apk

    这里会在该文件夹下生成一个以apk名为名字的文件夹,有classes.dex+res文件夹+AndroidManifest.xml 这三个东西,想必大家已经懂得了当中的内涵,没错。这就是我们的项目根文件夹。而dex即就是由jar打包而成的Android可运行文件。

    /*

    *命令里的apktool 事实上也就是在运行文件夹下的apktool.bat批处理文件,而后边的xxx.apk也就是我们所须要反编译的apk包的名称。

    当然啦,常常使用dos命令的人都直到,文件名称或者路径都能够使用其绝对路径予以取代,因此假设我们把我们须要反编译的包放到当前根文件夹下,即能够直接试用其名称来运行命令

    */


    setp 2: 在dex2jar里

    将1中生成的classes.dex(即就是Android下的可运行文件,由一簇一簇的.class文件jar包生成)拷入dex2jar下
    运行 dex2jar classes.dex  --->生成jar包。即就是classses_dex2jar.jar


    setp 3:在jar2gui下执行jd-gui选中2中的jar,就可以查看源代码(这里是真源代码)。



    既然上边提到“真源代码”这个概念。相相应的必定就会有伪源代码(纯属本人造词,如有雷同,你猜呢?哈哈,开玩笑的)

    这里再上一图


    上图左側即就是我们用setp 3达到的效果,而右側即就是我们通过jad工具反编译class文件出来的java源文件。通过对照非常明显让人得出一个极为蛋疼的结论。反编译出来的东东简直目不忍视啊·······。当然啦。左側的代码是能够直接拷贝出来的。可是假设你想要生成源代码来编译的话。还请三思~~~毕竟我们反编译出来一个是要使用res资源,还有一个是參考代码,假设想要破解原apk的话,相信还有办法反编译出更好的源代码(用工具进行代码复制,这样尽管本质上并没有对class进行反编译。但却得到了相对准确的源代码)


    详细使用jad工具来反编译的话。我就不继续写了,详细教程写在工具包的README.text文本里了,欢迎大家下载:

    Android反编译工具

    jad工具


  • 相关阅读:
    你应该了解Nginx的7个原因
    linux 中php以及nginx的重启命令
    HTTP 长连接和短连接
    git常用命令
    Linux 防火墙开放特定端口 (iptables)
    redis配置文件相关
    关于解决emoji表情的存储
    文件内容统计——Linux wc命令
    Git 服务器搭建
    关于微信二次分享,描述变链接的解决方法(一)----文档说明
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5167119.html
Copyright © 2011-2022 走看看