def onUpdate(self, code=0): if self.recentScriptFile is None: return with open(self.recentScriptFile, 'r') as file: text_info = textctrl_info_t(text=file.read(), flags=self.textFlags, tabsize=self.textTab) self.SetControlValue(self.script, text_info) file.close()
def __init__(self): form = r"""STARTITEM {id:mstr_query} BUTTON YES NONE BUTTON NO NONE BUTTON CANCEL NONE %s {FormChangeCb} <##~N~ew:{btn_new}><##~O~pen:{btn_load}><##~S~ave as...:{btn_save}> <:{str_help}> <Query (function or expression)\::{mstr_query}> <##Above code is a##Function:{rOptionFunction}> <Lambda expression (f=cfunc_t and i=citem_t):{rOptionExpression}>{rad_qtype}> <##Process AST elements##cot (faster):{rASTExpr}> <cit and cot:{rASTStmt}>{rad_ast_type}> <##Scope##Database:{rScopeIDB}> <Current function:{rScopeCurFunc}> <Xrefs to current item:{rScopeXrefItem}> <Defined by query:{rScopeQuery}>{rad_qscope}> <##~R~un:{btn_runq}> """ % SCRIPT_NAME self._qs = QuerySettings() s = self._get_settings() F = idaapi.Form t = idaapi.textctrl_info_t() controls = { "mstr_query": F.MultiLineTextControl(text=s.query, flags=t.TXTF_AUTOINDENT | t.TXTF_ACCEPTTABS | t.TXTF_FIXEDFONT | t.TXTF_MODIFIED, tabsize=2, width=90, swidth=90), "str_help": F.StringInput(swidth=90, value=s.help), "rad_qscope": F.RadGroupControl(("rScopeIDB", "rScopeCurFunc", "rScopeXrefItem", "rScopeQuery"), value=s.scope), "rad_qtype": F.RadGroupControl(("rOptionFunction", "rOptionExpression"), value=s.query_type), "rad_ast_type": F.RadGroupControl(("rASTExpr", "rASTStmt"), value=s.ast_type), "btn_load": F.ButtonInput(self.OnButtonPress, code=0), "btn_save": F.ButtonInput(self.OnButtonPress, code=1), "btn_runq": F.ButtonInput(self.OnButtonPress, code=2), "btn_new": F.ButtonInput(self.OnButtonPress, code=3), 'FormChangeCb': F.FormChangeCb(self.OnFormChange) } F.__init__(self, form, controls)
def onLoad(self, code=0): filePath = AskFile(0, "*.js", "Load Frida script") if filePath is None: return self.recentScriptFile = filePath with open(self.recentScriptFile, 'r') as file: text_info = textctrl_info_t(text=file.read(), flags=self.textFlags, tabsize=self.textTab) self.SetControlValue(self.src_file, filePath) self.SetControlValue(self.script, text_info) file.close()
def OnFormChange(self, fid): if fid == self.cbLanguage.id: # Display the Field (may be hide) self.ShowField(self.result, True) # Translate the expression dest_lang = self.languages[self.GetControlValue(self.cbLanguage)] try: text = Translator.to_language(dest_lang).from_expr(self.expr) except Exception, error: self.ShowField(self.result, False) return -1 # Update the form self.SetControlValue(self.result, idaapi.textctrl_info_t(text=str(text), flags=translatorForm.flags))
def OnFormChange(self, fid): if fid == self.cbLanguage.id: # Display the Field (may be hide) self.ShowField(self.result, True) # Translate the expression dest_lang = self.languages[self.GetControlValue(self.cbLanguage)] try: text = Translator.to_language(dest_lang).from_expr(self.expr) except Exception, error: self.ShowField(self.result, False) return -1 # Update the form self.SetControlValue( self.result, idaapi.textctrl_info_t(text=str(text), flags=translatorForm.flags))
def activate(self, ctx): if regFu.isHighlightedEffective(): addr = regFu.getOffset() simicsString = gdbProt.Evalx( 'SendGDBMonitor("@cgc.getMemoryValue(0x%x)");' % addr) print('effective addr 0x%x value %s' % (addr, simicsString)) value = simicsString else: highlighted = idaapi.get_highlighted_identifier() addr = getHex(highlighted) if addr is None: print('ModMemoryHandler unable to parse hex from %s' % highlighted) return simicsString = gdbProt.Evalx( 'SendGDBMonitor("@cgc.getMemoryValue(0x%x)");' % addr) print('addr 0x%x value %s' % (addr, simicsString)) value = simicsString # Sample form from kernwin.hpp s = """Modify memory Address: %$ <~E~nter value:t40:80:50::> """ ti = idaapi.textctrl_info_t(value) ok = idaapi.AskUsingForm( s, Form.NumericArgument('$', addr).arg, idaapi.pointer(idaapi.c_void_p.from_address(ti.clink_ptr))) ''' string = Form.StringArgument(value) ok = idaapi.AskUsingForm(s, Form.NumericArgument('$', addr).arg, string.arg) ''' if ok == 1: arg = "'%s'" % ti.text.strip() print("You entered: %s <%s>" % (ti.text, arg)) cmd = "@cgc.writeString(0x%x, %s)" % (addr, arg) print cmd simicsString = gdbProt.Evalx('SendGDBMonitor("%s");' % (cmd)) time.sleep(1) idc.RefreshDebuggerMemory()