• Android-打反编译工具的一种方法


    转载请注明出处:http://blog.csdn.net/goldenfish1919/article/details/41010261

    首先我们来看下dex文件的格式:


    class_defs的结构:


    (1) class_idx 描写叙述详细的 class 类型 。值是 type_ids 的一个 index 。值必须是一个 class 类型 。不能是数组类型或者基本类型 。


    (2) access_flags  描写叙述 class 的訪问类型 ,诸如 public , final , static 等 。在 dex-format.html 里 “access_flags Definitions” 有详细的描写叙述  。


    (3) superclass_idx , 描写叙述 supperclass 的类型 。值的形式跟 class_idx 一样 。


    (4) interfaces_off , 值为偏移地址 ,指向 class 的 interfaces , 被指向的数据结构为 type_list 。

    class 若没有 interfaces ,值为 0。


    (5) source_file_idx , 表示源码文件的信息 ,值是 string_ids 的一个 index 。若此项信息缺失 ,此项值赋值为 NO_INDEX=0xffff ffff 。


    (6) annotions_off , 值是一个偏移地址 。指向的内容是该 class 的凝视 ,位置在 data 区,格式为 annotations_direcotry_item 。若没有此项内容 ,值为 0 。


    (7) class_data_off , 值是一个偏移地址 ,指向的内容是该 class 的使用到的数据 ,位置在 data 区,格式为 class_data_item 。若没有此项内容 ,值为 0 。

    该结构里有非常多内容 ,具体描写叙述该 class 的 field , method , method 里的运行代码等信息 ,后面有一个比較大的篇幅来讲述 class_data_item 。


    (8) static_value_off ,  值是一个偏移地址 ,指向 data 区里的一个列表 ( list ) ,格式为 encoded_array_item 。若没有此项内容 ,值为 0 。


    重点关注下(5)。这一项代表的是源文件的名字。

    因此。一种可行的方案是往dex中加入一个项目中根本就用不到的类,然后改动source_file_idx。由于用不到。所以执行时不会报错的,可是但编译工具在做静态解析的时候,就会解析不出来而报错!


    然后看下头部的详细组成部分:



    (1)magic value
    这 8 个 字节通常是常量 ,为了使 .dex  文件可以被识别出来 ,它必须出如今 .dex 文件的最开头的位置 。

    (2)checksum 和 signature 
    4字节的文件校验码 ,使用alder32 算法校验文件除去 maigc 。checksum 外余下的全部文件区域 。用于检查文件错误 。
    20个字节的signature , 使用 SHA-1 算法 hash 除去 magic ,checksum 和 signature 外余下的全部文件区域 ,用于唯一识别本文件 。

    从上面的结构能够看出来,假设是改动了source_file_idx,那么要同一时候改动signature 和checksum 。

    总结过程例如以下:

    (1)项目源代码打包成jar包(混淆)以后,加入进入一个没用的类x.x.x.x.x.x。

    (2)把新的jar包转换成dex

    (3)改动dex中x.x.x.x.x.x类的 source_file_idx。

    (4)又一次计算signature 。

    (5)又一次计算checksum 。

    (6)更新dex。

    (7)正常安装包签名。


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    正则表达式入门
    HtmlUnit 开发网络爬虫
    IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
    myeclipse通过数据表生成jpa或hibernate实体---https://blog.csdn.net/partner4java/article/details/8560289
    javaWeb学习之 Filter过滤器----https://www.cnblogs.com/xdp-gacl/p/3948353.html
    @Resource与@Autowired注解的区别
    IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
    IntelliJ IDEA配置本地Tomcat方法---亲测有效
    使用IDEA部署Myeclipse项目----亲测有效
    爱钱帮对付相关信息
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4913890.html
Copyright © 2020-2023  润新知