本文转载自: 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. 百度翻译&&金山词霸API

    #/usr/bin/env python3 #coding=utf8 """百度翻译api功能实现函数,本模块基于Python3.x实现,getTransResult(q ...

  2. jQuery HTML节点元素修改、追加的方法 html()、append()、prepend()、

    我们先拟定一个代码场景 <div>start</div> <p>123</p> <div>end</div> html() 操作 ...

  3. MySQL管理_数据库常用命令

    1.数据库赋权 进入mysql数据库: mysql> use mysql; 给root用户设置新密码: mysql> update user set password=password(& ...

  4. VS2010环境下C++工程相关问题汇总

    1.链接其他库调试时产生告警: warning LNK4099: 未找到 PDB“vc100.pdb” 解决方案:属性 -> C/C++ -> 输出文件 -> 程序数据库文件名 -& ...

  5. 微信获取坐标的JS

    wx.getLocation({    type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'    succes ...

  6. CentOS 6.5 安装 Python3

    1.安装环境 yum -y install gcc zlib-devel make 2.下载python版本 wget http://www.python.org/ftp/python/3.5.1/P ...

  7. 学习SQL的点点滴滴(三)-修改数据库的兼容级别

    语法 ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 } 参数 database_name 要修改的数据库 ...

  8. ADF_Controller系列3_通过创建ADF Menu作为页面向导(Part1)

    2015-02-15 Created By BaoXinjian

  9. webpy分页类 + 上传类

    webpy没有分页类.按照php的思路.自己编了一个.数据库用的是sqlite. class Page(object): '''分页类''' def __init__(self,page_size,d ...

  10. [HTML] CSS3 文本效果

    CSS3 文本效果 CSS3中包含几个新的文本特征. 在本章中您将了解以下文本属性: text-shadow word-wrap 浏览器支持