本文转载自: https://www.zybuluo.com/oro-oro/note/142842

1. jeb.api.dex.Dex

这个类代表正在被JEB处理的DEX文件。 
要想更好的了解这个类定义的方法,可以去读一下DEX文件格式的说明。

这里的类/方法/变量格式,跟smali一样:

Class: Lcom/foo/bar/Blob; 
Method: Lcom/foo/bar/Blob;->methodX([BILjava/lang/String;)V 
Field: Lcom/foo/bar/Blob;->var:J

感兴趣的方法列表

方法 说明
getClass(int index) 通过序号获得Class对象
getClass(java.lang.String name) 通过名字获得Class对象
getClassCount() 获取Dex文件里面定义的类的数量
getField(int index) 通过序号获得一个变量(DexField)
getFieldCount() 获得DEX文件中定义的变量的数量
getFieldData(java.lang.String name) 通过名字获得一个变量(DexFieldData)
getMethod(int index) 通过索引获得一个方法()
getMethodCount() 获取DEX中方法数量
getMethodData(java.lang.String name) 通过名字获得一个方法()
getStrings() 从DEX字符串池中获取所有字符串
getType(int index) 返回类型字符串
getTypeCount() 获得类型字符串的数量
  • getType 
    Type 里面存放Dex里面所有出现的类型,包括内置类型和自定义的类等。
# coding:utf-8
from jeb.api import IScript
class TestDexGetType(IScript):
    def run(self, jeb):
        dex = jeb.getDex()
        jeb.print("type number : " + str(dex.getTypeCount()))
        jeb.print("type 1 : " + dex.getType(1))
        jeb.print("type 20 : " + dex.getType(20))
        jeb.print("type 30 : " + dex.getType(30))

2. jeb.api.dex.DexClass

这个类表示的是DEX的class_def_item对象。 
jeb.api.dex.Dex的getClass方法可以拿到DexClass对象。

方法 说明
getClasstypeIndex() 获得该类的类型索引
getData() 获得该类的DexClassData对象
getInterfaceIndexes() 获取实现的接口的索引
getSuperclassIndex() 获取父类索引
# coding:utf-8
from jeb.api import IScript
class TestDexClass(IScript):
    def run(self, jeb):
        dex = jeb.getDex()
        jeb.print("class number : " + str(dex.getClassCount()))
        cls = dex.getClass(10)
        cls_type_index = cls.getClasstypeIndex()
        jeb.print(str(cls_type_index))
        jeb.print("class name : " + dex.getType(cls_type_index))
        super_cls_idx = cls.getSuperclassIndex()
        if super_cls_idx != -1:
            jeb.print("super class name : " + dex.getType(super_cls_idx))
        if_idx = cls.getInterfaceIndexes()
        for idx in if_idx:
            jeb.print("inerface name : " + dex.getType(idx))

3. jeb.api.dex.DexField

该类对应了DEX的field_id_item对象。

# coding:utf-8
from jeb.api import IScript
class TestDexField(IScript):
    def run(self, jeb):
        dex = jeb.getDex()
        dex_field = dex.getField(110)
        idx = dex_field.getIndex()
        jeb.print("Field Index : " + str(idx))
        cls_type_idx = dex_field.getClassTypeIndex()
        jeb.print("Class Type : " + dex.getType(cls_type_idx))
        jeb.print("Field Name : " + dex_field.getName())
        jeb.print("Field Type : " + dex.getType(dex_field.getTypeIndex()))
        jeb.print("field sig : " + dex_field.getSignature(True))

4. jeb.api.dex.DexMethod

参考 DexClass、DexField的用法。

5. 实例之对抗混淆

有时候分析会遇到一些混淆过的类名、方法名、变量名,如果是abc还好,有一些根本就不是人看的字符。

通过前面了解的API,我们可以拿到类名、方法名、变量名,又有rename系列方法,则可以对这些混淆的名字进行重命名。

JEB的脚本例子: 
https://www.pnfsoftware.com/jeb1/downloads

其中有一个是简单的重命名混淆类名的脚本: 
https://github.com/SecureBrain/JEB-sample-scripts/blob/master/RenameObfuscatedClasses.py

这只是一个例子,要完全实用的话,还得自己去修改。

[转载] 2. JebAPI 之 jeb.api.dex的更多相关文章

  1. [转载] 1. JebAPI 之 jeb.api

    本文转载自: https://www.zybuluo.com/oro-oro/note/142707 JEB API 官方地址:https://www.pnfsoftware.com/apidoc/  ...

  2. [转载] 4. JebAPI 之 jeb.api.ui

    本文转载自: https://www.zybuluo.com/oro-oro/note/145250 JebInstance可以通过getUI()方法来获得jeb.api.ui.JebUI. JebU ...

  3. [转载] 3. JebAPI 之 jeb.api.ast

    本文转载自: https://www.zybuluo.com/oro-oro/note/143651 0. 序 Jeb 本身是支持变量重命名的,所以,混淆了的变量名.类名可以修改. 实际上,它还可以做 ...

  4. [转载] ZooKeeper的Java客户端API

    转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...

  5. [转载]Java 8 日期&时间 API

    Java 8 日期和时间 声明 本文转自http://www.journaldev.com/2800/java-8-date-localdate-localdatetime-instant,以mark ...

  6. (转载) ASP.NET(C#) Web Api 通过文件流下载文件到本地实例

    下载文件到本地是很多项目开发中需要实现的一个很简单的功能.说简单,是从具体的代码实现上来说的,.NET的文件下载方式有很多种,本示例给大家介绍的是ASP.NET Web Api方式返回HttpResp ...

  7. (转载)Java8新的日期API LocalDate, LocalTime

    前言 由于Java Date的各种问题,Java8推出了新的日期API,很受一拨人的追捧. 为什么我们需要新的Java日期/时间API? 在开始研究Java 8日期/时间API之前,让我们先来看一下为 ...

  8. 转载LoadRunner的常用Java API

    Java API是访问Vuser函数的基础,通过LoadRunner的Java API可以在脚本中很容易地创建事务与并发点.获取用户信息等功能. 1. 事务函数(Transaction Functio ...

  9. 【转载】Asp .Net Web Api路由路径问题

    原文章地址:https://www.cnblogs.com/devtester/p/8897302.html MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一 ...

随机推荐

  1. 练习2:雨淋湿了一道题,9个数字只能看清楚4个,第一个肯定不是1 [X * (Y3 + Z)]^2 = 8MN9,求出各个数字

    题目上的X代表的未知数,不一定是同一个数字. 其实这道题,直接一推敲答案就出来了,首先,积德尾数是9,说明 X*(Y3 + Z)的值尾数是3,3的因子只有1和3,所以X只有1和3候选,但是题目说第一个 ...

  2. python学习之路(一)屌丝逆袭之路

    变量                                                                                                  ...

  3. input file上传文件扩展名限制

    方法一(不推荐使用):用jS获获取扩展名进行验证: <script type="text/javascript" charset="utf-8"> ...

  4. IDEA 中 显示 *.properties 为中文

      效果:  

  5. ecstore菜鸟电子面单对接摘要

    1.token长度要150以上 2.redirect_uri不一致,保持一致吧先 3.返回的xml解析问题,php5.3里得到的不是数组,而是simplexml,还得再转化一下 4.后期考虑做成通用型 ...

  6. 基于Open vSwitch搭建虚拟路由器

    As part of my work in OpenDaylight, we are looking at creating a router using Open vSwitch... Why? W ...

  7. 为什么要用Maven?

    早期还在学怎么用Ant构建项目时,就有看到说Maven是Ant的替代品,但真正意义去了解Maven,还是因为以前的公司一老员工在做OpenJMS二次开发时,从网上下载了源码,然后用Maven构建它. ...

  8. [Linux] LVM的条带化

    一.什么是条带化 当多个进程同时访问一个磁盘时,可能会出现磁盘冲突.磁盘系统对访问次数(每秒的IO操作,IOPS)和数据传输速率(读写速率,TPS)有限制. 当达到这些限制时,后面需要访问磁盘的进程就 ...

  9. web页面打开本地app(判断是否安装)

    在应用宝中有APP申请链接: //是否可以打开App不可以跳则到下载页 $(".downNow button").on("click",function(){ ...

  10. 5、Linux 系统基本文件管理

    1.Linux系统目录结构 /etc    ----> 配置文件   /boot  ----> 引导分区/挂载点, boot loader 的静态链接文件,存放与Linux启动相关的程序 ...