#?description=Demo on how to use the JEB UI-API to query views and fragments (when run in the GUI client)
#?shortcut=
from com.pnfsoftware.jeb.client.api import IScript, IGraphicalClientContext
from com.pnfsoftware.jeb.core import RuntimeProjectUtil, IUnitFilter
from com.pnfsoftware.jeb.core.units import IUnit
"""
Sample script for JEB Decompiler.
This script demonstrates how to use the UI API to query views and fragments generated by JEB GUI.
"""
class UIDemo(IScript):
def run(self, ctx):
if not isinstance(ctx, IGraphicalClientContext):
print('This script must be run within a graphical client')
return
# show which unit view is currently focused
v = ctx.getFocusedView()
print('Focused view: %s' % v)
# enumerate all unit views (views representing units) and fragments within those views
print('Views and fragments:')
views = ctx.getViews()
for view in views:
print('- %s' % view.getLabel())
fragments = view.getFragments()
for fragment in fragments:
print(' - %s' % view.getFragmentLabel(fragment))
# focus test
if len(views) >= 2:
print('Focusing the second Unit view (if any)')
views[1].setFocus()
# opening the first certificate unit we find (in an APK, there should be one)
prj = ctx.getMainProject()
if prj:
unitFilter = UnitFilter('cert')
units = RuntimeProjectUtil.filterUnits(prj, unitFilter)
if units:
ctx.openView(units.get(0))
class UnitFilter(IUnitFilter):
def __init__(self, formatType):
self.formatType = formatType
def check(self, unit):
return unit.getFormatType() == self.formatType