本文转载自: 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. Unity3D研究院之获取摄像机的视口区域

    摄像机分为两种,一种是正交摄像机还有一种是透视摄像机.正交摄像机无论远近它的视口范围永远是固定的,但是透视摄像机是由原点向外扩散性发射,也就是距离越远它的视口区域也就越大.那么我们如何获取距离摄像机任 ...

  2. c++ poco库https调用

    #include "Poco\File.h"#include "Poco\FileStream.h"#include "Poco\Process.h& ...

  3. eclipse 使用(一)单步调试

    昨天终于将取数据的流程走通了.但是没有成功获得数据.原因是,把服务器中的数据库还原到了本地.而测试数据是写到了本地.把数据给覆盖了.早上来了之后,赶紧在服务器上把数据弄了一下. 之后开始跑代码. 项目 ...

  4. Android AChartEngine 去除折线图黑边

    通常使用AChartEngine画出的折线图,如果背景不是黑色,则会在折线图的坐标轴旁边出现黑边,如图所示: 试了好多设置,最后终于发现,去除黑边的设置是: mRenderer.setMarginsC ...

  5. 小调网 经典电影 豆瓣评分 tampermonkey脚本

    // ==UserScript== // @name 小调网 // @namespace http://tampermonkey.net/ // @version 0.1 // @descriptio ...

  6. int和NSInteger区别

    NSInteger会自动根据操作系统的位数(32或者64位)返回最大的类型 查到c语言中,int和long的字节数是和操作系统指针所占位数相等. 但c语言中说,long的长度永远大于或等于int ob ...

  7. Tomcat 配置 HTTPS双向认证

    Tomcat 配置 HTTPS 双向认证指引说明: � 本文档仅提供 Linux 操作系统下的指引 � 在阅读本指引前请您在 Linux 部署 JDK 和 Tomcatserver为了 Tomcat ...

  8. 14.高度最小的BST

    题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] vals,请返回创建的二叉查找树的高度. 返回高度的代码如下: imp ...

  9. 关于sublime text2

    转自:http://www.qianduan.net/essential-to-sublime-the-text-2-plugins.html Sublime Text 2是一个轻量.简洁.高效.跨平 ...

  10. 在linux下获取帮助

    1.使用man手册页 man是一种显示Unix/Linux在线手册的命令.可以用来查看命令.函数或文件的帮助手册,另外它还可以显示一些gzip压缩格式的文件. 读者在遇到不懂的命令时,可以用man查看 ...