登录后更精彩...O(∩_∩)O...
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1 简易开发环境(1)安装IDEA (2)在IDEA中插件市场搜索Python插件并安装 https://plugins.jetbrains.com/plugin/631-python
(3)在Jython官网下载Jython并安装 https://www.jython.org/download (4)打开IDEA创建简单一个Java工程,并勾选python模块 将安装的Jython设置为该工程解释器路径 将’Jeb根目录\bin\app\’下的jeb.jar文件拷贝到工程中,并右键设置将该jar设置为库 最后在工程src中创建一个hello.py文件,开始 编写代码
2 Hello world(GUI)参考如图所示格式,run函数为执行入口,这里注意py的文件名和类名要一致,像图中都为”hello”,
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
参考官方用例: 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)
|