[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/pnfsoftware/jeb-samplecode/master/scripts/UIDemo.py [Back]  [Original]

#?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

Web Proxy Viewer  |  New URL  |  Original Page