首页
社区
课程
招聘
[原创]JEB脚本(一)(指令解析 反编译 抽象语法树)
发表于: 2020-10-27 15:17 12890

[原创]JEB脚本(一)(指令解析 反编译 抽象语法树)

2020-10-27 15:17
12890

c3dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6S2j5$3u0G2j5$3q4A6i4K6u0r3K9X3g2T1i4K6g2X3M7$3y4J5K9i4m8@1

.

(1)访问DEX与Class
(2)遍历Field / Method
(3)访问某个Method
(4)访问指令
(5)访问基本块
(6)访问控制流数据流

反编译一个Class

(1)遍历某Method所有AST元素
(2)解析if...else元素
(3)解析call元素
(4)解析try元素
(5)解析for元素

(1)遍历函数
(2)访问指令
(3)访问基本块
(4)访问控制流

(1)遍历某函数所有AST元素
(2)解析if...else元素
.

.

.

.

.

.

.
.

.

.

.

.
.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Scripting for Android Reversing
acbK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2H3L8X3k6K6L8$3k6@1N6$3q4J5k6g2)9J5k6h3y4G2L8g2)9J5c8X3A6W2j5W2)9J5c8X3#2S2L8Y4g2S2L8q4)9J5c8X3c8W2N6W2)9J5c8X3q4F1k6s2u0G2K9h3c8Q4x3X3c8K6j5%4u0A6M7s2c8A6L8X3N6Q4x3V1j5`.

pnfsoftware/jeb2-samplecode/scripts/
af1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6H3L8X3k6K6L8$3k6@1N6$3q4J5k6g2)9J5c8X3A6W2j5U0u0Q4x3X3c8K6j5h3#2H3L8r3g2U0L8$3c8W2i4K6u0r3N6s2u0W2k6g2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8Y4y4U0M7X3W2H3N6s2x3`.

JEB API Documentation
06fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2H3L8X3k6K6L8$3k6@1N6$3q4J5k6g2)9J5k6h3y4G2L8g2)9J5c8X3A6W2j5W2)9J5c8X3q4H3K9h3c8G2j5#2)9J5c8Y4u0W2k6X3g2J5k6h3&6U0k6g2)9J5c8Y4m8S2j5$3E0S2k6$3g2K6i4K6u0W2K9s2c8E0L8l9`.`.

 
 
 

.

DEX字节码层面(IDexUnit部件)

(1)访问DEX与Class
(2)遍历Field / Method
(3)访问某个Method
(4)访问指令
(5)访问基本块
(6)访问控制流数据流

DEX反编译层面(IDexDecompilerUnit部件)

反编译一个Class

JAVA语法树层面(IJavaSourceUnit部件)

(1)遍历某Method所有AST元素
(2)解析if...else元素
(3)解析call元素
(4)解析try元素
(5)解析for元素

Native反汇编层面(INativeCodeUnit部件)

(1)遍历函数
(2)访问指令
(3)访问基本块
(4)访问控制流

Native AST层面(INativeSourceUnit部件)

(1)遍历某函数所有AST元素
(2)解析if...else元素
.

  • 常见操作

    DEX字节码层面操作,关注IDexUnit部件,常见操作如:
    (1)访问DEX与Class
    (2)遍历Field / Method
    (3)访问某个Method
    (4)访问指令
    (5)访问基本块
    (6)访问控制流数据流
  • (1)访问DEX与Class

    .
  • (2)遍历Field / Method

    .
  • (3)访问某个Method

    .
  • (4)访问指令

    .
  • (5)访问基本块

    .
  • (6)访问控制流数据流

  • JEB对DEX的抽象

    如果了解DEX结构,应该不会对class_def_item / code_item等感到陌生,
    JEB对这些结构进行了抽象,每个结构都可以在定义中找到对应的类.
    具体看一下com.pnfsoftware.jeb.core.units.code.android.dex包的文档,它们都在这里.
    .
    其中有一部分实现了IDexItem ICodeItem接口,
    如IDexClass和IDexMethod,
    这个接口的含义后面再说.
    .
    需要特别关注的是IDexCodeItem,
    指令相关内容(CFG/BLOCK等),
    都在IDexCodeItem这个类中.
  • JEB对编程概念的抽象(ICodeItem)

    常见编程语言中必不可少的概念,
    如class method field package call等概念.
    JEB中通过ICodeItem这个顶层接口来概括他们(DEX层面为IDexItem),
    像类对应的IDexClass,方法对应的IDexMethod,
    都直接或间接implements了ICodeItem和IDexItem接口
    ICodeItem
  • 几个常用的类

    DEX类--------------IDexClass
    DEX方法-----------IDexMethod
    方法指令序列-----IDexCodeItem
    指令-----------------IDalvikInstruction
    基本块--------------BasicBlock
    控制流--------------CFG
  • 反编译一个Class

    反编译Class
    .
    输出
  • 如何获取IDexDecompilerUnit?

    若要获取Class反编译后内容(像IDA的F5),
    仅使用IDexUnit不够啦,
    还需要获取IDexDecompilerUnit部件
    .
    如何获取IDexDecompilerUnit?
    一般通过DecompilerHelper类,
    给它传入一个IDexUnit作为输入,
    得到对应的IDexDecompilerUnit实例.
  • 对类/方法/属性执行反编译

    IDecompilerUnit的API很容易理解,
    执行反编译的目标可以是整个文件,
    也可以是某个class method等,如:
    decompile()
    decompileAllClasses()
    decompileAllMethods()
    decompileClass()
    decompileMethod()
    decompileField()
    参考:
    43bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2H3L8X3k6K6L8$3k6@1N6$3q4J5k6g2)9J5k6h3y4G2L8g2)9J5c8X3A6W2j5W2)9J5c8X3q4H3K9h3c8G2j5#2)9J5c8Y4u0W2k6X3g2J5k6h3&6U0k6g2)9J5c8X3y4G2L8g2)9J5c8Y4m8F1k6Y4y4G2k6Y4c8%4j5i4u0W2i4K6u0r3K9X3g2T1i4K6u0r3j5$3!0J5k6g2)9J5c8Y4g2F1K9i4c8K6i4K6u0r3j5$3!0V1k6g2)9J5c8V1W2p5k6h3y4G2L8i4m8A6L8r3g2J5g2h3&6A6N6q4)9J5k6h3S2@1L8h3H3`.
    .
    之后通过getDecompiled*Text(),
    获取到反编译后的源代码(String文本).
  • 个性化配置

    在反编译前,还可以通过
    DecompilationOptionsDecompilationContext等,
    进行一些配置.
  • 常见操作

    (1)遍历某Method所有AST元素
    (2)解析if...else元素
    (3)解析call元素
    (4)解析try元素
    (5)解析for元素
    .
  • (1)遍历某Method所有AST元素
  • (2)解析if...else元素

[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2021-2-6 16:01 被kanxue编辑 ,原因:
收藏
免费 9
支持
分享
最新回复 (7)
雪    币: 4042
活跃值: (2258)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
先膜后看
2020-10-27 15:39
0
雪    币: 1760
活跃值: (2362)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
顶楼主
2020-10-27 19:25
0
雪    币: 26460
活跃值: (5352)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
图片都看不到
2020-10-27 20:26
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
牛逼
2020-11-5 17:09
0
雪    币: 244
活跃值: (1997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好文。
2023-9-13 10:16
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
感谢大佬的博客!
2023-11-28 22:57
0
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
你那JEB脚本提示怎么搞的
2024-11-20 14:15
0
游客
登录 | 注册 方可回帖
返回