找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 182|回复: 0

IDEA中配置Jeb脚本开发环境

[复制链接]

2万

主题

158

回帖

16万

积分

管理员

积分
169244
发表于 2024-7-7 21:59:00 | 显示全部楼层 |阅读模式 IP:山东省临沂市 联通

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×

1 简易开发环境

(1)安装IDEA

(2)在IDEA中插件市场搜索Python插件并安装

https://plugins.jetbrains.com/plugin/631-python

2.png

(3)在Jython官网下载Jython并安装

https://www.jython.org/download

(4)打开IDEA创建简单一个Java工程,并勾选python模块

将安装的Jython设置为该工程解释器路径

将’Jeb根目录\bin\app\’下的jeb.jar文件拷贝到工程中,并右键设置将该jar设置为库

最后在工程src中创建一个hello.py文件,开始 编写代码

3.png



1.png


4.png

2 Hello world(GUI)

参考如图所示格式,run函数为执行入口,这里注意py的文件名和类名要一致,像图中都为”hello”,


1.png
3 Hello world(CMD)

也可以脱离图形界面,使用终端执行py脚本

java -jar “jeb根目录\bin\app\jeb.jar” —srv2 —script=hello.py

(可在脚本中通过ctx.open(path)载入一个apk文件)

[AppleScript] 纯文本查看 复制代码
java -jar "D:\developer\JEB-5.14.0.202406122044_by_CXV\bin\app\jeb.jar" —srv2 —script=hello.py



2.png

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/SampleScript.py


4 访问DEX内容常见操作

DEX字节码层面操作,关注IDexUnit部件,常见操作如:


总结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接口


总结几个常用的类

DEX类———————IDexClass
DEX方法——————IDexMethod
方法指令序列————-IDexCodeItem
指令————————IDalvikInstruction
基本块———————BasicBlock
控制流———————CFG


5 访问DEX反编译内容

DEX反编译层面操作,关注IDexDecompilerUnit部件


反编译一个Class

参考:

https://github.com/acbocai/jeb_script/blob/main/samples/21%20IDexDecompilerUnit-decompile.py


如何获取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文本).


个性化配置

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


6 访问JAVA语法树内容常见操作
访问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

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


总结几个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


7 访问Native反汇编内容常见操作

原生库反汇编层面操作,关注INativeCodeUnit部件,常见操作如:


8 访问Native语法树内容常见操作

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

IJavaElement换成了ICElement.


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.htmll


9 其他常用操作

(1)DEX交叉引用查询

查询DEX中方法的交叉引用信息,使用ActionXrefsData和ActionContext

https://github.com/acbocai/jeb_script/blob/main/samples/61%20Dex-QUERY_XREFS.py

(2)Native调用查询

查询一个函数被谁调用了,或查询它内部调用了谁,关注:

INativeCodeAnalyzer
INativeCodeModel
ICallGraphManager
ICallGraph

https://github.com/acbocai/jeb_script/blob/main/samples/62%20Native-Callees%20Callers.py

(3)Native交叉引用查询

查询一个Function的交叉引用情况 或查询一个Block入口指令的引用交叉引用情况

INativeCodeAnalyzer
INativeCodeModel
IReferenceManager
IReference

https://github.com/acbocai/jeb_script/blob/main/samples/63%20Native-CrossReference.py

(4)Native地址所属查询

获取一条指令的地址,所属Function或Block.

https://github.com/acbocai/jeb_script/blob/main/samples/64%20Native-Contain.py

(5)内容搜索

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/SearchAll.py

(6)访问XML

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/ApkManifestView.py

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/AndroidXrefResId.py

(7)异步任务

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/AsyncTask.py

(8)操作ADB

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/AdbDemo.py

(9)接收用户输入

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/RequestUserInput.py

(10)列表框

参考:

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/WidgetList.py

通过输入对话框和列表框,实现书签列表

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/BookmarkSet.py

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/BookmarkList.py

(11)为某一脚本绑定快捷键

在脚本文件首行添加#?shortcut=Mod1+Mod3+?

可在GUI中通过该组合快捷键触发脚本的执行,其中Mod1代表CTRL,Mod3代表ALT

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/a313e4962fd535d0f70ad284bb0062ce84e5809e/scripts/BookmarkList.py

(12)NativeIR中间码

除了代码的语法树形态以外,Jeb还支持一种中间码的形态,IEStatement

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/PrintNativeRoutineIR.py

(13)反混淆/字节串解密用例

参考官方用例:

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/analysis/TriadaStringDecryptor.py

https://github.com/pnfsoftware/jeb2-samplecode/blob/master/scripts/analysis/WhatsAppStringDecryptor.py

(14)脚本中使用三方JAR包

Jython可以理解为通过Python语法来调用Java类和方法,所以在某些场景如果不满足于JEB官方文档中提供的API,可使用反射等手段加载其他jar包,增强解析能力.

(另外也可通过Jython pip扩展python类)

例如在Jeb中使用soot flowDroid类库


参考文档:

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

Author: acbc@Vulpecker


团队信息Vulpecker Team

隶属于360公司信息安全部,致力于手机 APP 及IOT安全,同时专注于移动安全研究,团队定制了公司内部产品安全开发规范,在提高工作效率的同时也为开发者提供了便捷的安全测试平台。

同时团队高度活跃在谷歌、三星、华为等各大手机厂商的致谢名单中,挖掘的漏洞屡次获得CVE编号及致谢,在保证360产品安全的前提下,团队不断对外输出安全技术,为移动互联网安全贡献一份力量。

作者

https://github.com/acbocai






from: 三分钟上手JEB脚本开发-安全客 - 安全资讯平台 (anquanke.com)






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|哩布大模型|Civitai大模型|IP定位|图反推|站长素材|deepseek|即梦视频|阿狗工具|花瓣网|pinterest|php手册|宝塔文档|CyberChef|猫捉鱼铃|手机版|小黑屋|下载狗|IPS|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2025-1-15 17:17

Powered by 分享屋 X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表