[转载] 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

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

时间: 2024-12-28 11:22:02

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

[转载] 1. JebAPI 之 jeb.api

本文转载自: https://www.zybuluo.com/oro-oro/note/142707 JEB API 官方地址:https://www.pnfsoftware.com/apidoc/ 本地路径:jeb/doc 1. IScript 这是Jeb脚本的接口,它支持Java和Python,后面的例子都会以Python为例子讲解. 任何Jeb脚本都必须实现这个接口.而任何一个脚本的类,必须跟文件名一样,跟Java类似. IScript 下面只有一个方法,脚本的入口,相当于main函数.

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

本文转载自: https://www.zybuluo.com/oro-oro/note/143651 0. 序 Jeb 本身是支持变量重命名的,所以,混淆了的变量名.类名可以修改. 实际上,它还可以做到这种效果 Decompiled Java Code Manipulation using JEB API – Part 2: Decrypting Strings. 例子中的脚本在这:ASTDecryptStrings.py. 整体的逻辑: 1. 破解解密算法. 2. 遍历类里面的所有方法 3.

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

本文转载自: https://www.zybuluo.com/oro-oro/note/145250 JebInstance可以通过getUI()方法来获得jeb.api.ui.JebUI. JebUI 下面有很多View,如AssemblyView, JavaView等等. JebUI可以通过getView(View.Type viewtype)方法获得对应的View. 具体类型在jeb.api.ui.View.Type中: 类型 说明 ASSEMBLY 反汇编界面 CLASS_HIERARC

[转载] ZooKeeper的Java客户端API

转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExample.html http://topmanopensource.iteye.com/blog/1880601 http://san-yun.iteye.com/blog/1977454 客户端要连接 Zookeeper 服务器可以通过创建 org.apache.zookeeper. ZooKeeper

十二. 一步步破解JEB 2.0demo版二

编写脚本批量还愿JEB 加密字符串 解密完后效果如下: 脚本源码: https://github.com/bingghost/JebPlugins 思路: 下面的该封装的基本都封装了,过程如下: 1.先遍历类定位到指定的类, 2.然后遍历该类的所有方法定位到解密函数,对其做交叉引用 得到所有引用该解密函数的地方 3. 对每一个引用函数做语法解析AST,拿到所有的语法元素信息,同时得到加密的byte数组信息 4. 调用解密函数解密得到字符串 5. 调用jebview接口,使用解密后的字符串替换by

api接口对于客户端的身份认证方式以及安全措施

转载 基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服务器并与客户端的cookie中的jsessionid关联起来,这样客户端再次访问我们就可以识别用户身份了. 但是对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好.所以一般情况我们都是需要客户端提供一个key

9. JEB 1.5插件编写一

2.0之后好像新增加了很多API,有所区别 本文采用Java+Eclipse作为开发环境 插件支持的语言  文档: jeb-1.5/doc/index.html 一.Hello World工程 1. Eclipse插件开发环境配置 新建Java工程->工程目录下新建lib目录->右键->add to build path 配置JavaDoc 这样写代码的时候 有实时的文档可以看 2. 编写代码 import jeb.api.IScript; import jeb.api.JebInsta

【D3 API 中文手册】提交记录

[D3 API 中文手册]提交记录 声明:本文仅供学习所用,未经作者允许严禁转载和演绎 <D3 API 中文手册>是D3官方API文档的中文翻译.始于2014-3-23日,基于VisualCrew小组的六次协作任务之上,目前已经大致翻译完毕,将陆续向官网提交D3 API 中文版. 本文主要内容有: 列举初版翻译/校对人员列表 记录中文翻译的官网提交情况 提供校对联系方式 提供D3 API简版翻译 翻译/校对人员列表 翻译人员列表 API项目 文档页数 单词数 翻译 校对 core.select

10. JEB1.5 插件编写二

一些实例 1. 遍历当前光标处函数所有的Element Java代码: import java.io.*; import java.util.List; import jeb.api.IScript; import jeb.api.JebInstance; import jeb.api.ui.*; import jeb.api.ast.*; public class Hello implements IScript { protected JebInstance mJebInstance; pr