[转载] 2. JebAPI 之 jeb.api.dex
本文转载自: 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. JebAPI 之 jeb.api
本文转载自: https://www.zybuluo.com/oro-oro/note/142707 JEB API 官方地址:https://www.pnfsoftware.com/apidoc/ ...
- [转载] 4. JebAPI 之 jeb.api.ui
本文转载自: https://www.zybuluo.com/oro-oro/note/145250 JebInstance可以通过getUI()方法来获得jeb.api.ui.JebUI. JebU ...
- [转载] 3. JebAPI 之 jeb.api.ast
本文转载自: https://www.zybuluo.com/oro-oro/note/143651 0. 序 Jeb 本身是支持变量重命名的,所以,混淆了的变量名.类名可以修改. 实际上,它还可以做 ...
- [转载] ZooKeeper的Java客户端API
转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...
- [转载]Java 8 日期&时间 API
Java 8 日期和时间 声明 本文转自http://www.journaldev.com/2800/java-8-date-localdate-localdatetime-instant,以mark ...
- (转载) ASP.NET(C#) Web Api 通过文件流下载文件到本地实例
下载文件到本地是很多项目开发中需要实现的一个很简单的功能.说简单,是从具体的代码实现上来说的,.NET的文件下载方式有很多种,本示例给大家介绍的是ASP.NET Web Api方式返回HttpResp ...
- (转载)Java8新的日期API LocalDate, LocalTime
前言 由于Java Date的各种问题,Java8推出了新的日期API,很受一拨人的追捧. 为什么我们需要新的Java日期/时间API? 在开始研究Java 8日期/时间API之前,让我们先来看一下为 ...
- 转载LoadRunner的常用Java API
Java API是访问Vuser函数的基础,通过LoadRunner的Java API可以在脚本中很容易地创建事务与并发点.获取用户信息等功能. 1. 事务函数(Transaction Functio ...
- 【转载】Asp .Net Web Api路由路径问题
原文章地址:https://www.cnblogs.com/devtester/p/8897302.html MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一 ...
随机推荐
- UVa 10562看图写树(二叉树遍历)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- dp常见模型
1.背包问题.0/1背包.完全背包.多重背包.分组背包.依赖背包. 2.子序列.最长非上升/下降子序列.最长先上升再下降子序列.最长公共子序列.最大连续子区间和. 3.最大子矩阵. 4.区间dp. 5 ...
- squid安装、配置、控制
Squid 目录 [隐藏] 1 前言 2 安装 2.1 从源中安装 2.2 源码编译安装 3 基本配置 4 高级控制 5 认证 6 总结 6.1 服务器配置 6.2 用户分类 6.3 行为分类 6. ...
- 2016HUAS_ACM暑假集训3B - Frogger
好几天没更新博客了,因为这周在看关于图论的算法,有好几个(还是英文名字-_-||),人晕晕的...... 说一下这个Frogger吧.这个题目的话......难的不是做法,而是题意... 大致题意:有 ...
- 利用pt-deadlock-logger监控死锁
Percona提供的percona-toolkit提供很多实用功能,这里着重介绍如何监控死锁. pt-deadlock-logger基本用法 Usage: pt-deadlock-logger [OP ...
- CentOS 7 php留言本网站的搭建
一如既往的先搭建yum仓库 并且安装httpd服务 yum install httpd -y 1:改网页的搭建是基于html搭建 查询是否安装该协议 rpm -qa |grep httpd 2:留言板 ...
- ecstore菜鸟电子面单对接摘要
1.token长度要150以上 2.redirect_uri不一致,保持一致吧先 3.返回的xml解析问题,php5.3里得到的不是数组,而是simplexml,还得再转化一下 4.后期考虑做成通用型 ...
- Apache Shiro 使用手册(四)Realm 实现
在认证.授权内部实现机制中都有提到,最终处理都将交给Real进行处理.因为在Shiro中,最终是通过Realm来获取应用程序中的用户.角色及权限信息的.通常情况下,在Realm中会直接从我们的数据源中 ...
- My WelcomeApplet
import java.applet.*; import java.awt.*; import java.awt.event.*; public class WelcomeApplet extends ...
- Eclipse中FindBugs插件的应用
在以前的一个开发现场里,经常会收到客户的代码review指摘. 觉得有点神奇是,给客户的文件是编译后的*.class打成war包,客户那边却能指摘出代码中的缺陷bug,而且精确到代码的某一行. 通过* ...