• 安卓apk反编译教程


    从dex提取jar文件

    手机直接提取

    np或者mt管理器
    点击2jar即可
    如果遇到多个dex 即使合并也可能失效(因为单个dex有最大限制)

    电脑提取

    下载dex2jar github
    注意是>2.0的 如2.1版本,2.0以及之前的版本 不支持多个dex文件

    # 最好文件路径别带空格 或者中文
    cd 到下载目录 windows使用 并将要反编译的文件放到同级目录下
    # 若没有java或直接没反应  请安装或者重装java
    d2j-dex2jar.bat XXX.apk  ##也可为xx.dex apk可默认多个dex to jar
    
    • 1
    • 2
    • 3
    • 4

    若文件较大 请编辑 d2j_invoke.bat文件 修改其中的内存参数 一个为虚拟机最大空间 一个为最小占用

    若文件较大 可能刚开始的时候没什么cpu占用 后期会升高很多== 可能是不止编译了dex·· 有的很慢 比如某个100mb的app 可能一个小时 请耐心等待

    -Xmx1024m:设置JVM最大可用内存为1024M。
    
    -Xms512m:虚拟机占用系统的最小内存。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
    
    -XX:MaxPermSize:最大堆大小。这个也适当大些, 所以若出现问题,首先请调整 –Xms512m:将其设置的小一些,就ok了。
    
    注意事项:配置时字符不要写错了,否则可能导致myeclipse环境不可以运行Java程序。
    ————————————————
    版权声明:本文为CSDN博主「KateZeng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_35733852/article/details/114113306
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在dex2jar更新v2.1之前笔者是用的一个比较”耿直”的方法解决这个问题,因为dex的method数量有限但是jar包对method是没有特别限制的,所以我写了一个脚本将apk中多个dex先转化为jar文件之后解压缩最后合并打包压缩,同样可以得到完全的反编译文件.

    转换为java代码

    工具介绍

    JD-GUI

    JDK7以及之前可以使用 JD-GUI,如果版本>=1.8 各种问题
    http://java-decompiler.github.io

    procyon-decompiler

    如果版本>=1.8 ,可以使用 procyon-decompiler,不过是命令行界面
    https://bitbucket.org/mstrobel/procyon/downloads/

    在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大,Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错:
    字符串的Switch
    枚举声明方面
    注解方面
    匿名类、内部类
    Java8新接口规范
    Java8 Lambda表达式
    Java8 方法传递
    另外它在反编译后输出多种类型的结果,如Java源码、原始字节码、字节码AST

    可以直接解析class文件到cmd窗口显示
    也可以将反编译之后的文件保存到指定位置,如果需要保存在指定位置,需要增加 -o命令参数,并且需要指定保存的路径
    
    java -jar procyon-decompiler的绝对路径 -jar 想反编译文件的绝对路径 -o 输出文件夹的绝对路径
     
    直接显示:
    java -jar D:\ApplicationFiles\program\procyon-decompiler-0.5.30.jar D:\ProgramData\ideaProjects\...\news\NewsController.class
     
    保存文件:
    java -jar D:\ApplicationFiles\program\procyon-decompiler-0.5.30.jar D:\ProgramData\ideaProjects\...\news\NewsController.class -o C:\Users\noteless\Desktop\dddddd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    luyten

    luyten是Procyon的GUI,只需要下载luyten即可,不用下载Procyon
    https://github.com/deathmarine/Luyten

    下载地址
    https://github.com/deathmarine/Luyten/releases

    crf

    crf也可以支持更高版本
    http://www.benf.org/other/cfr/

    jeb

    一般情况下我们都是使用dex2jar + jd-gui的方式反编译代码,在实际使用过程中,有时候发现反编译出来的代码阅读效果不是很好,所以就尝试使用其他的方式反编译代码。

    JEB是Android应用静态分析的de facto standard,除去准确的反编译结果、高容错性之外,JEB提供的API也方便了我们编写插件对源文件进行处理,实施反混淆甚至一些更高级的应用分析来方便后续的人工分析.(摘自乌云)。

    jeb凭借其牛X的保护措施和高昂的售价,使得诸多普通逆向爱好者望而却步,当然ida也是,目前网络上仅流传着jeb 1.5和ida 6.6的破解版,虽是旧版,面对很多情况依然是绰绰有余。

    小结

    如果你的版本<=7,都可以使用,如果版本更高,请使用除了JD-GUI以外的选择
    而且若有内部匿名类 请使用除了JD的工具

    反编译遇到的奇怪代码

    需要先看java面向对象 匿名内部类那里的几种情况
    其次
    在这里插入图片描述

    others

    在5.0之前所使用的Dalvik运行时默认的一个apk中只能包含一个dex文件。为了解决这个限制,我们可以使用multidex
    support库,它会成为主dex的一部分,用来取得其它辅助dex文件中的方法。

    com.android.support:multidex:1.0.0

    在5.0之后,Android改用ART作为运行时,ART天生支持一个APK中包含多个dex文件。因为它在APK安装时,会预先扫描所有的classes(…N).dex文件,把它们编译合成一个.oat的可执行文件。

    推荐阅读

    吾爱破解安卓逆向入门教程系列(但比较老了 15年)

    【性能优化】也谈APK瘦身

  • 相关阅读:
    redis缓存的雪崩、击穿、穿透,淘汰策略,持久化
    华为HMS Core携手超图为三维GIS注入新动能
    PostgreSQL 基础知识
    获取依赖库的N种方法
    拖死项目的不是团队,可能是失败的管理
    JumpServer开源堡垒机完成龙芯架构兼容性认证
    二分、三分、01分数规划【第III弹】
    第18讲:MySQL中常用的日期函数以及基本使用
    SpringBoot的启动流程
    Matlab学习——变量与档案存取
  • 原文地址:https://blog.csdn.net/S_ZaiJiangHu/article/details/126706966