JEB脚本之一

转载自:安全客@ACBC
https://www.anquanke.com/post/id/228981

目录

.

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部件)

  • 常见操作

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

.
.

DEX反编译层面(IDexDecompilerUnit部件)

  • 反编译一个Class

反编译Class
输出

.

  • 如何获取IDexDecompilerUnit?

若要获取Class反编译后内容(像IDA的F5),
仅使用IDexUnit不够啦,
还需要获取IDexDecompilerUnit部件

如何获取IDexDecompilerUnit?
一般通过DecompilerHelper类,
给它传入一个IDexUnit作为输入,
得到对应的IDexDecompilerUnit实例.

.

  • 对类/方法/属性执行反编译

IDecompilerUnit的API很容易理解,
执行反编译的目标可以是整个文件,
也可以是某个class method等,如:
decompile()
decompileAllClasses()
decompileAllMethods()
decompileClass()
decompileMethod()
decompileField()
参考:
https://www.pnfsoftware.com/jeb/apidoc/reference/com/pnfsoftware/jeb/core/units/code/IDecompilerUnit.html

之后通过getDecompiled***Text(),
获取到反编译后的源代码(String文本).

.

  • 个性化配置

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

.
.

JAVA语法树层面(IJavaSourceUnit部件)

  • 常见操作

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

  • (1)遍历某Method所有AST元素


.

  • (2)解析if...else元素


.

  • (3)解析call元素



    .

  • (4)解析try元素


.

  • (5)解析for元素


.

  • 访问JAVA语法树

如果打算访问DEX中方法对应的AST内容,
需要关注IJavaSourceUnit部件.
通过它可以拿到某个CLASS的AST(IJavaClass),
接着访问Class内的其他内容.

.

  • 访问JAVA语法树元素

如果访问某个具体的AST元素,
要进一步关注IJavaElement,
IJavaElement是对AST元素的顶层抽象,
每个AST元素都是一个IJavaElement.
比如IJavaClass/IJavaIf/IJavaFor/IJavaNew,
这些元素都实现了IJavaElement接口.

.

  • 获得IJavaSourceUnit或者IJavaElement

需要先执行反编译的步骤,参考这几个API
ISourceUnit IDecompilerUnit.decompile(...)
IJavaClass IDexDecompilerUnit.getClass(sign)
IJavaClass IJavaSourceUnit.getClassElement()

.

  • IJavaElement的层次关系

元素细分成表达式/语句等,
语句又分复合语句/终结语句,
比如for和if是复合语句,return和throw是终结语句,
具体关注com.pnfsoftware.jeb.core.units.code.java包的文档.
参考:
https://www.pnfsoftware.com/jeb/apidoc/reference/com/pnfsoftware/jeb/core/units/code/java/package-summary.html

用一张图表达它们的层次关系:


IJavaElement

.

  • 总结这几个Unit的层次关系

  • DEX方面
    字节码层面 IDexUnit
    反编译层面 IDexDecompilerUnit
    语法树层面 IJavaSourceUnit

  • Native方面类似,可参考DEX,层次和过程是类似的.
    字节码层面 INativeCodeUnit
    反编译层面 INativeDecompilerUnit
    语法树层面 INativeSourceUnit

参考:
https://www.pnfsoftware.com/jeb/apidoc/reference/com/pnfsoftware/jeb/core/units/package-summary.html

Unit

.

Native反汇编层面(INativeCodeUnit部件)

  • 常见操作

原生库反汇编层面操作,关注INativeCodeUnit部件,常见操作如:
(1)遍历函数
(2)访问指令
(3)访问基本块
(4)访问控制流

.

  • (1)遍历函数


.

  • (2)访问指令


.

  • (3)访问基本块


.

  • (4)访问控制流


.

Native AST层面(INativeSourceUnit部件)

  • 常见操作

过程和DEX类似,
IJavaSourceUnit换成了INativeSourceUnit.
IJavaElement换成了ICElement.

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

.

  • (1)遍历某函数所有AST元素


.

  • (2)解析if...else元素


.

  • ICElement的层次关系

具体关注com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast包的文档.
参考:
https://www.pnfsoftware.com/jeb/apidoc/reference/com/pnfsoftware/jeb/core/units/code/asm/decompiler/ast/package-summary.html

.

参考文档:

Scripting for Android Reversing
https://www.pnfsoftware.com/jeb/manual/dev/android-scripting/
pnfsoftware/jeb2-samplecode/scripts/
https://github.com/pnfsoftware/jeb2-samplecode/tree/master/scripts
JEB API Documentation
https://www.pnfsoftware.com/jeb/apidoc/reference/packages.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 通过编写jeb的python脚本,用来解密java的加密函数,如下图得aa.E就是一个加密函数,如果脚本运行完成,...
    xiabodan阅读 842评论 0 1
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,714评论 2 59
  • 本文JEB版本 2.2.7,下载JEB2.2.7 或者 [下载] jeb2.2.5 破解版 感谢F8大神 关于JE...
    Andrew玩Android阅读 30,079评论 3 12
  • 小技巧 (1) 如果混淆的类名中出现过于复杂的Aeabffdccdac这种类型的类名,明显是经过手动更改的,所以有...
    勤学奋进小郎君阅读 2,725评论 1 1
  • 0x1、JEB2的API架构 由于JEB2试图成为像IDA那样的universal disassembler,其架...
    ESE_阅读 1,712评论 0 8