本文转载自: 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. JS判断是否来自手机移动端的访问,并跳转

    var browserName_ = navigator.userAgent ; &&browserName_.indexOf(&&browserName_.index ...

  2. UVa 679 小球下落

    题意:这道题规律性极强,虽然是二叉树,但是可以用模拟来写. 1<<20 意思是1的二进制左移20位,即2的20次方. 对于二叉树中一个节点 k ,其左节点,右节点的编号分别是2k 和 2k ...

  3. CommandExtra.lua --游戏命令扩展

    --[[作者信息: Command Extra (游戏命令扩展) 作者QQ:247321453 作者Email:247321453@qq.com 修改日期:2014-3-12 功能:添加额外的命令.G ...

  4. PlayerLog.lua --玩家登录通告

    print(">>Script: Player Log Message.") --CLASS 职业 --战士 --圣骑士 --猎人 --盗贼 --牧师 --死亡骑士 - ...

  5. 装饰模式(Decorate Pattern)

    在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. (1) 装饰对象和真实对象有相同的接口.这样客户端对象就能以和真实对象相同的方式 ...

  6. 数据库之mysql存储程序

    什么时候会用到存储过程 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度2.当对数据库进行复杂操作时 ...

  7. AndroidImagePicker 的使用

    github地址 https://github.com/easonline/AndroidImagePicker 效果图

  8. BizTalk 中使用 WCF-OracleDB adapter

    在使用BizTalk WCF-OracleDB adapter操作Oracle数据库时,遇到了一些问题,记录如下. 按照BizTalk的文档,目前BizTalk 2010支持的Oracle数据库版本如 ...

  9. bzoj3087: Coci2009 misolovke

    Description [misolovke]给定一个 N*N 的网格.每个格子里至少会有一个捕鼠器, 并且已知每个格子里的捕鼠器个数.现在需要在 每一行 中选取恰好 K 个连续的格子, 把里面的捕鼠 ...

  10. [uboot]E9-i.MX6Q-uboot移植

      参照:http://blog.csdn.net/girlkoo/article/details/45420977 文档参照: <i.MX BSP Porting Guide-2015/12, ...