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工具


  • 相关阅读:
    布局重用 include merge ViewStub
    AS 常用插件 MD
    AS 2.0新功能 Instant Run
    AS .ignore插件 忽略文件
    AS Gradle构建工具与Android plugin插件【大全】
    如何开通www国际域名个人网站
    倒计时实现方案总结 Timer Handler
    AS 进行单元测试
    RxJava 设计理念 观察者模式 Observable lambdas MD
    retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5167119.html
Copyright © 2011-2022 走看看