From a3bf27fb7581fcc01cb38085e935ec2f504f938c Mon Sep 17 00:00:00 2001 From: Minoru Kobayashi Date: Thu, 22 Aug 2024 20:41:52 +0900 Subject: [PATCH 1/3] Added anti-debug via syscall --- lldbinit.py | 92 ++++++++++++++++++++++++++++++++++++++++++++----- tests/Makefile | 3 +- tests/syscall.m | 40 +++++++++++++++++++++ 3 files changed, 126 insertions(+), 9 deletions(-) create mode 100644 tests/syscall.m diff --git a/lldbinit.py b/lldbinit.py index 77fbe00..c46cbb9 100644 --- a/lldbinit.py +++ b/lldbinit.py @@ -62,19 +62,20 @@ if __name__ == "__main__": print("Run only as script from LLDB... Not as standalone program!") -import lldb -import sys -import re +import argparse +import fcntl +import hashlib +import json import os -import time +import re import struct -import argparse import subprocess +import sys import tempfile import termios -import fcntl -import json -import hashlib +import time + +import lldb try: import keystone @@ -354,6 +355,7 @@ def __lldb_init_module(debugger, internal_dict): ci.HandleCommand("command script add -h '(lldbinit) Clear all module load breakpoints.' -f lldbinit.cmd_bmc bmc", res) ci.HandleCommand("command script add -h '(lldbinit) List all on module load breakpoints.' -f lldbinit.cmd_bml bml", res) ci.HandleCommand("command script add -h '(lldbinit) Enable anti-anti-debugging measures.' -f lldbinit.cmd_antidebug antidebug", res) + ci.HandleCommand("command script add -h '(lldbinit) Enable anti-anti-debugging measures.' -f lldbinit.cmd_antidebug_syscall antidebug_syscall", res) ci.HandleCommand("command script add -h '(lldbinit) Print all images available at gdb_image_notifier() breakpoint.' -f lldbinit.cmd_print_notifier_images print_images", res) # disable a breakpoint or all ci.HandleCommand("command script add -h '(lldbinit) Disable a breakpoint.' -f lldbinit.cmd_bpd bpd", res) @@ -928,6 +930,80 @@ def cmd_antidebug(debugger, command, result, dict): print("[+] Enabled anti-anti-debugging measures") break + +def antidebug_syscall_callback(frame, bp_loc, dict): + SYSCALL_PTRACE = 0x200001a + PT_DENY_ATTACH = 0x1f + error = lldb.SBError() + if is_x64(): + pc_reg = "rip" + arg_val = get_gp_register("rdi") + syscall_num = get_gp_register("rax") + elif is_arm(): + pc_reg = "pc" + arg_val = get_gp_register("x0") + syscall_num = get_gp_register("x16") + + if syscall_num == SYSCALL_PTRACE and arg_val == PT_DENY_ATTACH: + print("[+] Hit syscall/svc anti-debug request") + # Jump to next instruction address + cur_addr = get_gp_register(pc_reg) + next_addr = cur_addr + get_inst_size(cur_addr) + result = frame.registers[0].GetChildMemberWithName(pc_reg).SetValueFromCString(str(next_addr), error) + if not result: + print("[-] error: failed to write to {} register".format(pc_reg)) + return 0 + get_process().Continue() + + +def cmd_antidebug_syscall(debugger, command, result, dict): + '''Enable anti-anti-debugging syscall. Use \'antidebug_syscall help\' for more information.''' + help = """ +Enable anti-anti-debugging measures for syscall/svc. +Bypasses debugger detection via syscall (x64) / svc (ARM). + +Syntax: antidebug_syscall +""" + cmd = command.split() + if len(cmd) > 0 and cmd[0] == "help": + print(help) + return + + target = get_target() + loaded_program = target.modules[0] + for segment in loaded_program.section_iter(): + if segment.GetName() == "__TEXT": + text_segment = segment + break + + text_section = text_segment.FindSubSection("__text") + section_start = text_section.GetLoadAddress(target) + section_end = section_start + text_section.GetByteSize() + if DEBUG: + print("section_start: 0x{:x}".format(section_start)) + print("section_end: 0x{:x}".format(section_end)) + + cur_addr = section_start + if is_x64(): + syscall_mnemonic = "syscall" + elif is_arm(): + syscall_mnemonic = "svc" + + while cur_addr < section_end: + inst = get_mnemonic(cur_addr) + op = get_operands(cur_addr) + if DEBUG: + print("inst: {}, op: {}".format(inst, op)) + + if inst == syscall_mnemonic: + if is_arm() and op != "#0": + continue + print("[+] Found {} at: 0x{:x}".format(inst, cur_addr)) + bp = target.BreakpointCreateByAddress(cur_addr) + bp.SetScriptCallbackFunction("lldbinit.antidebug_syscall_callback") + cur_addr += get_inst_size(cur_addr) + + # the callback for the specific module loaded breakpoint # supports x64, i386, arm64 def module_breakpoint_callback(frame, bp_loc, dict): diff --git a/tests/Makefile b/tests/Makefile index c2a3b0a..bbeee7e 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -6,7 +6,8 @@ all: $(CC) ptrace.c -o ptrace $(CC) taskget.c -o taskget $(CC) taskset.c -o taskset + $(CC) -framework Foundation syscall.m -o syscall .PHONY: clean clean: - rm -f sysctl ptrace taskget taskset + rm -f sysctl ptrace taskget taskset syscall diff --git a/tests/syscall.m b/tests/syscall.m new file mode 100644 index 0000000..e31c325 --- /dev/null +++ b/tests/syscall.m @@ -0,0 +1,40 @@ +// +// https://cardaci.xyz/blog/2018/02/12/a-macos-anti-debug-technique-using-ptrace/ +// $ clang -framework Foundation syscall.m -o syscall +// +// ref 1: https://opensource.apple.com/source/xnu/xnu-7195.81.3/bsd/kern/syscalls.master +// ref 2: https://opensource.apple.com/source/xnu/xnu-7195.81.3/osfmk/mach/i386/syscall_sw.h.auto.html +// + +#import + +@interface Foo : NSObject +@end + +@implementation Foo + ++(void)load { + NSLog (@"-- LOAD"); + +#if TARGET_CPU_X86_64 + asm("movq $0, %rcx"); + asm("movq $0, %rdx"); + asm("movq $0, %rsi"); + asm("movq $0x1f, %rdi"); /* PT_DENY_ATTACH 31 (0x1f)*/ + asm("movq $0x200001a, %rax"); /* ptrace syscall number 26 (0x1a) */ + /* The syscall number for ptrace is 0x1a, but by definition in syscall_sw.h, 0x200001a must be set. */ + asm("syscall"); +#elif TARGET_CPU_ARM64 + asm("mov X0, #0x1f"); /* PT_DENY_ATTACH 31 (0x1f)*/ + asm("movz X16, #0x001a"); /* ptrace syscall number 26 (0x1a) */ + asm("movk X16, #0x0200, lsl #16"); /* The syscall number for ptrace is 0x1a, but by definition in syscall_sw.h, 0x200001a must be set. */ + asm("svc 0"); +#endif +} + +@end + +int main (int argc, const char * argv[]) { + NSLog (@"-- MAIN"); + return 0; +} From 83d7c38590b42979faa0bf7a4d5fab43f77162ec Mon Sep 17 00:00:00 2001 From: Minoru Kobayashi Date: Fri, 23 Aug 2024 14:40:14 +0900 Subject: [PATCH 2/3] Removed unnecessary spaces --- lldbinit.py | 188 +++++++++++++++++++++++++------------------------- tests/ptrace | Bin 0 -> 33480 bytes tests/syscall | Bin 0 -> 50536 bytes tests/sysctl | Bin 0 -> 33784 bytes tests/taskget | Bin 0 -> 33752 bytes tests/taskset | Bin 0 -> 33832 bytes 6 files changed, 94 insertions(+), 94 deletions(-) create mode 100755 tests/ptrace create mode 100755 tests/syscall create mode 100755 tests/sysctl create mode 100755 tests/taskget create mode 100755 tests/taskset diff --git a/lldbinit.py b/lldbinit.py index c46cbb9..c4e31ac 100644 --- a/lldbinit.py +++ b/lldbinit.py @@ -221,9 +221,9 @@ "r8": 0, "r9": 0, "r10": 0, "r11": 0, "r12": 0, "r13": 0, "r14": 0, "r15": 0, "rflags": 0, "cs": 0, "fs": 0, "gs": 0 } -old_arm64 = { "x0": 0, "x1": 0, "x2": 0, "x3": 0, "x4": 0, "x5": 0, "x6": 0, "x7": 0, "x8": 0, "x9": 0, "x10": 0, - "x11": 0, "x12": 0, "x13": 0, "x14": 0, "x15": 0, "x16": 0, "x17": 0, "x18": 0, "x19": 0, "x20": 0, - "x21": 0, "x22": 0, "x23": 0, "x24": 0, "x25": 0, "x26": 0, "x27": 0, "x28": 0, "fp": 0, "lr": 0, +old_arm64 = { "x0": 0, "x1": 0, "x2": 0, "x3": 0, "x4": 0, "x5": 0, "x6": 0, "x7": 0, "x8": 0, "x9": 0, "x10": 0, + "x11": 0, "x12": 0, "x13": 0, "x14": 0, "x15": 0, "x16": 0, "x17": 0, "x18": 0, "x19": 0, "x20": 0, + "x21": 0, "x22": 0, "x23": 0, "x24": 0, "x25": 0, "x26": 0, "x27": 0, "x28": 0, "fp": 0, "lr": 0, "sp": 0, "pc": 0, "cpsr": 0 } GlobalListOutput = [] @@ -241,7 +241,7 @@ g_dbdata = {} # dyld modes -dyld_mode_dict = { +dyld_mode_dict = { 0: "dyld_image_adding", 1: "dyld_image_removing", 2: "dyld_image_info_change", @@ -282,7 +282,7 @@ def __lldb_init_module(debugger, internal_dict): if g_home == "": g_home = os.getenv('HOME') - + res = lldb.SBCommandReturnObject() ci = debugger.GetCommandInterpreter() @@ -511,7 +511,7 @@ def get_lldb_version(debugger): lldb_minor = int(lldb_versions_match.groups()[4]) return lldb_major, lldb_minor -def cmd_banner(debugger,command,result,dict): +def cmd_banner(debugger, command, result, dict): lldbver = debugger.GetVersionString().split('\n')[0] print(GREEN + "[+] Loaded lldbinit version " + VERSION + "." + BUILD + " @ " + lldbver + RESET) @@ -520,7 +520,7 @@ def cmd_lldbinitcmds(debugger, command, result, dict): help_table = [ [ "lldbinitcmds", "this command" ], - + [ "----[ Settings ]----", ""], [ "enable", "configure lldb and lldbinit options" ], [ "disable", "configure lldb and lldbinit options" ], @@ -528,7 +528,7 @@ def cmd_lldbinitcmds(debugger, command, result, dict): [ "enablesolib/disablesolib", "enable/disable the stop on library load events" ], [ "enableaslr/disableaslr", "enable/disable process ASLR" ], [ "datawin", "set start address to display on data window" ], - + [ "----[ Breakpoints ]----", ""], [ "b", "breakpoint address" ], [ "bpt", "set a temporary software breakpoint" ], @@ -576,16 +576,16 @@ def cmd_lldbinitcmds(debugger, command, result, dict): [ "x{0..28}", "shortcuts to modify ARM64 registers" ], [ "cfa/cfc/cfd/cfi/cfo/cfp/cfs/cft/cfz", "change x86/x64 CPU flags" ], [ "cfn/cfz/cfc/cfv", "change AArch64 CPU flags (NZCV register)"], - + [ "----[ File headers ]----", ""], [ "show_loadcmds", "show otool output of Mach-O load commands" ], [ "show_header", "show otool output of Mach-O header" ], - + [ "----[ Cracking ]----", ""], [ "crack", "return from current function" ], [ "crackcmd", "set a breakpoint and return from that function" ], [ "crackcmd_noret", "set a breakpoint and set a register value. doesn't return from function" ], - + [ "----[ Misc ]----", ""], [ "iphone", "connect to debugserver running on iPhone" ], @@ -796,7 +796,7 @@ def antidebug_callback_step1(frame, bp_loc, dict): if frame is None: return 0 - + target = get_target() if is_x64(): src_reg = "rdi" @@ -807,7 +807,7 @@ def antidebug_callback_step1(frame, bp_loc, dict): else: print("[-] error: unsupported architecture") return 0 - + mib_addr = int(frame.FindRegister(src_reg).GetValue(), 16) mib0 = get_process().ReadUnsignedFromMemory(mib_addr, 4, error) @@ -1007,7 +1007,7 @@ def cmd_antidebug_syscall(debugger, command, result, dict): # the callback for the specific module loaded breakpoint # supports x64, i386, arm64 def module_breakpoint_callback(frame, bp_loc, dict): - global modules_list + global modules_list # rdx contains the module address # rdx+8 contains pointer to the module name string if frame is None: @@ -1153,7 +1153,7 @@ def cmd_bm(debugger, command, result, dict): name = symbol.GetMangledName() # XXX: improve this because we are doubling the amount of work? # the lldb symbol isn't mangled - name2 = symbol.GetName() + name2 = symbol.GetName() if name == "_ZL18gdb_image_notifier15dyld_image_modejPK15dyld_image_info" or name2 == "lldb_image_notifier": saddr = symbol.GetStartAddress() # process needs to be loaded before we can execute this command... @@ -1456,11 +1456,11 @@ def cmd_bpc(debugger, command, result, dict): Syntax: bpc -Notes: +Notes: - Only breakpoint numbers are valid, not addresses. Use \'bpl\' to list breakpoints. - Expressions are supported, do not use spaces between operators. """ - + cmd = command.split() if len(cmd) != 1: print("[-] error: please insert a breakpoint number.") @@ -1543,8 +1543,8 @@ def cmd_bpda(debugger, command, result, dict): cmd = command.split() if len(cmd) != 0: if cmd[0] == "help": - print(help) - return + print(help) + return print("[-] error: command doesn't take any arguments.") print("") print(help) @@ -1607,8 +1607,8 @@ def cmd_bpea(debugger, command, result, dict): cmd = command.split() if len(cmd) != 0: if cmd[0] == "help": - print(help) - return + print(help) + return print("[-] error: command doesn't take any arguments.") print("") print(help) @@ -1633,8 +1633,8 @@ def cmd_bpl(debugger, command, result, dict): cmd = command.split() if len(cmd) != 0: if cmd[0] == "help": - print(help) - return + print(help) + return print("[-] error: command doesn't take any arguments.") print("") print(help) @@ -1703,8 +1703,8 @@ def cmd_skip(debugger, command, result, dict): cmd = command.split() if len(cmd) != 0: if cmd[0] == "help": - print(help) - return + print(help) + return print("[-] error: command doesn't take any arguments.") print("") print(help) @@ -1749,8 +1749,8 @@ def cmd_int3(debugger, command, result, dict): return elif len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return int3_addr = evaluate(cmd[0]) if int3_addr is None: @@ -1778,14 +1778,14 @@ def cmd_int3(debugger, command, result, dict): patch_bytes = str('\xCC') if is_arm(): # brk #0 - patch_bytes = str("\x00\x00\x20\xd4") + patch_bytes = str("\x00\x00\x20\xd4") else: patch_bytes = bytearray(b'\xCC') if is_arm(): patch_bytes = bytearray(b'\x00\x00\x20\xd4') # insert the patch - result = target.GetProcess().WriteMemory(int3_addr, patch_bytes, error) + result = target.GetProcess().WriteMemory(int3_addr, patch_bytes, error) # XXX: compare len(patch) with result if not error.Success(): print("[-] error: Failed to write memory at 0x{:x}.".format(int3_addr)) @@ -1819,14 +1819,14 @@ def cmd_rint3(debugger, command, result, dict): return elif len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return int3_addr = evaluate(cmd[0]) if int3_addr is None: print("[-] error: invalid input address value.") print("") print(help) - return + return else: print("[-] error: please insert a breakpoint patched address.") print("") @@ -1884,8 +1884,8 @@ def cmd_listint3(debugger, command, result, dict): cmd = command.split() if len(cmd) != 0: if cmd[0] == "help": - print(help) - return + print(help) + return print("[-] error: command doesn't take any arguments.") print("") print(help) @@ -1919,8 +1919,8 @@ def cmd_nop(debugger, command, result, dict): cmd = command.split() if len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return nop_addr = evaluate(cmd[0]) patch_size = 1 @@ -1992,8 +1992,8 @@ def cmd_null(debugger, command, result, dict): cmd = command.split() if len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return null_addr = evaluate(cmd[0]) patch_size = 1 if null_addr is None: @@ -2039,7 +2039,7 @@ def cmd_stepo(debugger, command, result, dict): """Step over calls and some other instructions so we don't need to step into them. Use \'stepo help\' for more information.""" help = """ Step over calls and loops that we want executed but not step into. -Affected instructions: +Affected instructions: - x86: call, movs, stos, cmps, loop. - arm64: bl, blr, blraa, blraaz, blrab, blrabz. @@ -2103,8 +2103,8 @@ def cmd_bpn(debugger, command, result, dict): cmd = command.split() if len(cmd) != 0: if cmd[0] == "help": - print(help) - return + print(help) + return print("[-] error: command doesn't take any arguments.") print("") print(help) @@ -2197,7 +2197,7 @@ def cmd_crackcmd(debugger, command, result, dict): print("[-] error: please check required arguments.") print("") print(help) - return + return # XXX: is there a way to verify if address is valid? or just let lldb error when setting the breakpoint address = evaluate(cmd[0]) @@ -2397,8 +2397,8 @@ def cmd_db(debugger, command, result, dict): return elif len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return dump_addr = evaluate(cmd[0]) if dump_addr is None: print("[-] error: invalid address value.") @@ -2407,15 +2407,15 @@ def cmd_db(debugger, command, result, dict): return elif len(cmd) == 2: if cmd[0] == "help": - print(help) - return + print(help) + return dump_addr = evaluate(cmd[0]) if dump_addr is None: print("[-] error: invalid address value.") print("") print(help) return - size = evaluate(cmd[1]) + size = evaluate(cmd[1]) if size is None: print("[-] error: invalid size value.") print("") @@ -2503,8 +2503,8 @@ def cmd_dw(debugger, command, result, dict): return elif len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return dump_addr = evaluate(cmd[0]) if dump_addr is None: print("[-] error: invalid address value.") @@ -2513,15 +2513,15 @@ def cmd_dw(debugger, command, result, dict): return elif len(cmd) == 2: if cmd[0] == "help": - print(help) - return + print(help) + return dump_addr = evaluate(cmd[0]) if dump_addr is None: print("[-] error: invalid address value.") print("") print(help) return - size = evaluate(cmd[1]) + size = evaluate(cmd[1]) if size is None: print("[-] error: invalid size value.") print("") @@ -2537,7 +2537,7 @@ def cmd_dw(debugger, command, result, dict): print("[-] size must be multiple of 16 bytes.") return - err = lldb.SBError() + err = lldb.SBError() membuf = get_process().ReadMemory(dump_addr, size, err) if not err.Success(): print("[-] error: failed to read memory from address 0x{:x}".format(dump_addr)) @@ -2593,8 +2593,8 @@ def cmd_dd(debugger, command, result, dict): return elif len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return dump_addr = evaluate(cmd[0]) if dump_addr is None: print("[-] error: invalid address value.") @@ -2603,15 +2603,15 @@ def cmd_dd(debugger, command, result, dict): return elif len(cmd) == 2: if cmd[0] == "help": - print(help) - return + print(help) + return dump_addr = evaluate(cmd[0]) if dump_addr is None: print("[-] error: invalid address value.") print("") print(help) return - size = evaluate(cmd[1]) + size = evaluate(cmd[1]) if size is None: print("[-] error: invalid size value.") print("") @@ -2681,8 +2681,8 @@ def cmd_dq(debugger, command, result, dict): return elif len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return dump_addr = evaluate(cmd[0]) if dump_addr is None: print("[-] error: invalid address value.") @@ -2691,15 +2691,15 @@ def cmd_dq(debugger, command, result, dict): return elif len(cmd) == 2: if cmd[0] == "help": - print(help) - return + print(help) + return dump_addr = evaluate(cmd[0]) if dump_addr is None: print("[-] error: invalid address value.") print("") print(help) return - size = evaluate(cmd[1]) + size = evaluate(cmd[1]) if size is None: print("[-] error: invalid size value.") print("") @@ -2734,7 +2734,7 @@ def cmd_dq(debugger, command, result, dict): (mem0, mem1, mem2, mem3) = struct.unpack("QQQQ", membuf[index:index+0x20]) szaddr = "0x%.016lX" % dump_addr if POINTER_SIZE == 4: - szaddr = "0x%.08X" % dump_addr + szaddr = "0x%.08X" % dump_addr data_str = COLOR_HEXDUMP_DATA + " {:016x} {:016x} {:016x} {:016x} ".format(mem0, mem1, mem2, mem3) + RESET output(BOLD + COLOR_HEXDUMP_ADDR + "{:s} :".format(szaddr) + RESET + data_str + BOLD + COLOR_HEXDUMP_ASCII + "{:s}".format(quotechars(membuf[index:index+0x20])) + RESET) if index + 0x20 != size: @@ -2775,7 +2775,7 @@ def quotechars( chars ): for x in bytearray(chars): if x >= 0x20 and x <= 0x7E: data += chr(x) - else: + else: data += "." return data @@ -4005,7 +4005,7 @@ def regarm64(): output(linefmt.format(flags, reason) + "\n") def print_registers(): - if is_i386(): + if is_i386(): reg32() elif is_x64(): reg64() @@ -4145,7 +4145,7 @@ def disassemble(start_address, nrlines): max_mnem_size = 0 for i in instructions_mem: if i.size > max_size: - max_size = i.size + max_size = i.size mnem_len = len(i.GetMnemonic(target)) if mnem_len > max_mnem_size: max_mnem_size = mnem_len @@ -4174,7 +4174,7 @@ def disassemble(start_address, nrlines): if CONFIG_ENABLE_COLOR == 1: output(COLOR_SYMBOL_NAME + "@ {}:".format(module_name) + "\n" + RESET) else: - output("@ {}:".format(module_name) + "\n") + output("@ {}:".format(module_name) + "\n") elif symbol_name is not None: # print the first time there is a symbol name and save its interval # so we don't print again until there is a different symbol @@ -4314,14 +4314,14 @@ def cmd_show_loadcmds(debugger, command, result, dict): cmd = command.split() if len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return header_addr = evaluate(cmd[0]) if header_addr is None: print("[-] error: invalid header address value.") print("") print(help) - return + return else: print("[-] error: please insert a valid Mach-O header address.") print("") @@ -4365,14 +4365,14 @@ def cmd_show_header(debugger, command, result, dict): cmd = command.split() if len(cmd) == 1: if cmd[0] == "help": - print(help) - return + print(help) + return header_addr = evaluate(cmd[0]) if header_addr is None: print("[-] error: invalid header address value.") print("") print(help) - return + return else: print("[-] error: please insert a valid Mach-O header address.") print("") @@ -4446,9 +4446,9 @@ def cmd_asm32(debugger, command, result, dict): inst_list = [] while True: try: - line = raw_input('Assemble ("stop" or "end" to finish): ') + line = raw_input('Assemble ("stop" or "end" to finish): ') except NameError: - line = input('Assemble ("stop" or "end" to finish): ') + line = input('Assemble ("stop" or "end" to finish): ') if line == 'stop' or line == 'end': break inst_list.append(line) @@ -4479,9 +4479,9 @@ def cmd_asm64(debugger, command, result, dict): inst_list = [] while True: try: - line = raw_input('Assemble ("stop" or "end" to finish): ') + line = raw_input('Assemble ("stop" or "end" to finish): ') except NameError: - line = input('Assemble ("stop" or "end" to finish): ') + line = input('Assemble ("stop" or "end" to finish): ') if line == 'stop' or line == 'end': break inst_list.append(line) @@ -4497,7 +4497,7 @@ def cmd_arm32(debugger, command, result, dict): Type one instruction per line. Finish with \'end\' or \'stop\'. Keystone set to KS_ARCH_ARM and KS_MODE_ARM. - + Requires Keystone and Python bindings from www.keystone-engine.org. """ cmd = command.split() @@ -4512,9 +4512,9 @@ def cmd_arm32(debugger, command, result, dict): inst_list = [] while True: try: - line = raw_input('Assemble ("stop" or "end" to finish): ') + line = raw_input('Assemble ("stop" or "end" to finish): ') except NameError: - line = input('Assemble ("stop" or "end" to finish): ') + line = input('Assemble ("stop" or "end" to finish): ') if line == 'stop' or line == 'end': break inst_list.append(line) @@ -4545,9 +4545,9 @@ def cmd_armthumb(debugger, command, result, dict): inst_list = [] while True: try: - line = raw_input('Assemble ("stop" or "end" to finish): ') + line = raw_input('Assemble ("stop" or "end" to finish): ') except NameError: - line = input('Assemble ("stop" or "end" to finish): ') + line = input('Assemble ("stop" or "end" to finish): ') if line == 'stop' or line == 'end': break inst_list.append(line) @@ -4578,9 +4578,9 @@ def cmd_arm64(debugger, command, result, dict): inst_list = [] while True: try: - line = raw_input('Assemble ("stop" or "end" to finish): ') + line = raw_input('Assemble ("stop" or "end" to finish): ') except NameError: - line = input('Assemble ("stop" or "end" to finish): ') + line = input('Assemble ("stop" or "end" to finish): ') if line == 'stop' or line == 'end': break inst_list.append(line) @@ -4588,7 +4588,7 @@ def cmd_arm64(debugger, command, result, dict): assemble_keystone(keystone.KS_ARCH_ARM64, keystone.KS_MODE_ARM, inst_list) # XXX: help -def cmd_IphoneConnect(debugger, command, result, dict): +def cmd_IphoneConnect(debugger, command, result, dict): '''Connect to debugserver running on iPhone.''' help = """ """ global GlobalListOutput @@ -4963,7 +4963,7 @@ def cmd_fixret(debugger, command, result, dict): rsp = rsp + 0x8 get_frame().reg["rsp"].value = format(rsp, '#x') if len(cmd) == 0: - get_process().Continue() + get_process().Continue() # return the module to which an address belongs to # XXX: duplicate of get_module_name() @@ -5043,7 +5043,7 @@ def cmd_addcomment(debugger, command, result, dict): # XXX: is there a better solution here? comment = ' '.join([str(item) for item in cmd[1:]]) - if found is None: + if found is None: g_dbdata["comments"].append({ "offset": hex(offset), # always from the base address of the module "text": comment, @@ -5209,13 +5209,13 @@ def cmd_save_session(debugger, command, result, dict): # for dyld we obtain an address without the base # for an object we obtain the full base address without aslr # we should just store offset to the image and then restore using current information - target = get_target() + target = get_target() # list all current breakpoints and store them for bpt in target.breakpoint_iter(): # XXX: we need to iterate all locations of each breakpoint... geezzzzzz loc = bpt.location # for item in bpt.locations: - item = loc[0] + item = loc[0] # if the address belongs nowhere this will be an invalid object so nothing to do here if item is None: continue @@ -5454,14 +5454,14 @@ def cmd_run(debugger, command, result, dict): """ # reset internal state variables - res = lldb.SBCommandReturnObject() + res = lldb.SBCommandReturnObject() # must be set to true otherwise we don't get any output on the first stop hook related to this debugger.SetAsync(True) # imitate the original 'r' alias plus the stop at entry and pass everything else as target argv[] debugger.GetCommandInterpreter().HandleCommand("process launch -s -X true -- {}".format(command), res) #------------------------------------------------------------ -# The heart of lldbinit - when lldb stop this is where we land +# The heart of lldbinit - when lldb stop this is where we land #------------------------------------------------------------ def HandleProcessLaunchHook(debugger, command, result, dict): @@ -5531,7 +5531,7 @@ def HandleHookStopOnTarget(debugger, command, result, dict): # load for a known target if os.path.exists(g_db): with open(g_db, 'r') as f: - g_dbdata = json.load(f) + g_dbdata = json.load(f) if DEBUG: print(g_dbdata) # check if hashes match @@ -5584,7 +5584,7 @@ def HandleHookStopOnTarget(debugger, command, result, dict): return frame = get_frame() - if not frame: + if not frame: return # XXX: this has a small bug - if we reload the script and try commands that depend on POINTER_SIZE diff --git a/tests/ptrace b/tests/ptrace new file mode 100755 index 0000000000000000000000000000000000000000..3d97d45646b20d192288a29407067c9e82c40783 GIT binary patch literal 33480 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 literal 0 HcmV?d00001 diff --git a/tests/sysctl b/tests/sysctl new file mode 100755 index 0000000000000000000000000000000000000000..ef5fcc0c11f04f2851154e6db737eac1e67132e0 GIT binary patch literal 33784 zcmeI5e{54#6vyvt3tQP3V=Ay8VGfqY~7l1Tn@$UB{34J@373ZINIi|9MVw z-o5ACd(XS~b6@{Fr(cd$OCmu6U>eIbL_Md6-SsrpTsqO^8E; zC;I3}8Pr3y!3kG#Jn@hjj~EyNJ3d~j6%Pyzk+LqR2fV(92|Mw;Wmdcm);QVm5+9rV zQigm_dwp){_0{_gJ2BotE8Z5G3?Vx?hB;zB=^kEzO1a8a<&q`kYuB5%p;;dRT0@dr zJDjA1H4`djgFo&XZWwO~<{F}z>n%%6MTc};Ccm>atJgkSx@z_KHxf?T7i^Ld+6;vD zV_mgj-!DX%_D8pT63t@EJ_&mvY+{oQ6}yC(hUP5VFxoU|1(akwCe5YSq>%FlauDmM z|HD`Yd@7W_i=t34P}J;9|;SQigvzb6EBinD2;E~jqk|ZB)M6b025#WOn?b60Vco%m;e)C0!)Aj zFaajO1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)Aj zFaajO1egF5U;<2l2`~XB@V_E3)**(jwky3?OGG49ge#+IV&M3R{C*^KcAZPp2ClZd zdNC(5XqRWM_&@3$pF3tx8$u4}kyNJ^OI5U3PeW>e zp@s&JTLjyJb$WAQop>_jYf_7g)rG>frnItZscKCLsP+Dk&#f-KuV9*3>sQ_8%1QTp z%1;IpfioHs-%?I5<@{=BNhwdAL^Ga~56T-(M+WdLD9Hjdqyy)67!Ko+8K(Cjvo~zc z$_yL%#<0yvnPJMor*SK1J8YQzU;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b6 z0Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b6 z0Vco%m;e)C0!)AjFaajO1a27t6_F~Stx)=}bF&rzI*_;`0p|avn{KnOp&Ec@IndBL z1qB2Y6mw8kLQ#N0(V@>msbT|(l(Hrm^aOMn(0ybD^_sdSS=ZPk>ubEtiJpc~O~5Ur zXPZ|SvcaRbdSSH&ygt2NNVCF%85J*(B8&P|z`!oL+tHIPjacfb3+W!&=&5mg0>ar+ zRbpXblgvM8Is4~5-LDme|%{i|CV2Yysr8MZNZSy z@6!iC=tUUg%x1wyU&&5k!^vz0a*6S3V}WtJ-CI-}%2xaEdufKV^>+Qa69er=@Jbbj;|LKMLLC4oaLru2w>M3K}-`oDo zo^OslU$$?-p_`3oUF%-5@a#-yc7ay$^A{V0^YUNO`ahO;9d+h?_TA!n2X8yocH!>l zwrlnshkuy9wQ97e^POpr?UysZ{oLE0e$V?K-z@%r9lv<#myFXNy!7Gm->$72+AzG? Y-lXriwD`3b{@nQP<$Vpuell?V4JAkto&W#< literal 0 HcmV?d00001 diff --git a/tests/taskget b/tests/taskget new file mode 100755 index 0000000000000000000000000000000000000000..0c25cf5eaf64627ed6470fd304a8576913a1aee5 GIT binary patch literal 33752 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 literal 0 HcmV?d00001 From 459b2a9eec2bcbc59d2ad7f33ed121a2a5aa78be Mon Sep 17 00:00:00 2001 From: Minoru Kobayashi Date: Mon, 2 Dec 2024 09:09:34 +0900 Subject: [PATCH 3/3] Removed binary files under tests --- tests/ptrace | Bin 33480 -> 0 bytes tests/syscall | Bin 50536 -> 0 bytes tests/sysctl | Bin 33784 -> 0 bytes tests/taskget | Bin 33752 -> 0 bytes tests/taskset | Bin 33832 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 tests/ptrace delete mode 100755 tests/syscall delete mode 100755 tests/sysctl delete mode 100755 tests/taskget delete mode 100755 tests/taskset diff --git a/tests/ptrace b/tests/ptrace deleted file mode 100755 index 3d97d45646b20d192288a29407067c9e82c40783..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33480 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 diff --git a/tests/sysctl b/tests/sysctl deleted file mode 100755 index ef5fcc0c11f04f2851154e6db737eac1e67132e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33784 zcmeI5e{54#6vyvt3tQP3V=Ay8VGfqY~7l1Tn@$UB{34J@373ZINIi|9MVw z-o5ACd(XS~b6@{Fr(cd$OCmu6U>eIbL_Md6-SsrpTsqO^8E; zC;I3}8Pr3y!3kG#Jn@hjj~EyNJ3d~j6%Pyzk+LqR2fV(92|Mw;Wmdcm);QVm5+9rV zQigm_dwp){_0{_gJ2BotE8Z5G3?Vx?hB;zB=^kEzO1a8a<&q`kYuB5%p;;dRT0@dr zJDjA1H4`djgFo&XZWwO~<{F}z>n%%6MTc};Ccm>atJgkSx@z_KHxf?T7i^Ld+6;vD zV_mgj-!DX%_D8pT63t@EJ_&mvY+{oQ6}yC(hUP5VFxoU|1(akwCe5YSq>%FlauDmM z|HD`Yd@7W_i=t34P}J;9|;SQigvzb6EBinD2;E~jqk|ZB)M6b025#WOn?b60Vco%m;e)C0!)Aj zFaajO1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)Aj zFaajO1egF5U;<2l2`~XB@V_E3)**(jwky3?OGG49ge#+IV&M3R{C*^KcAZPp2ClZd zdNC(5XqRWM_&@3$pF3tx8$u4}kyNJ^OI5U3PeW>e zp@s&JTLjyJb$WAQop>_jYf_7g)rG>frnItZscKCLsP+Dk&#f-KuV9*3>sQ_8%1QTp z%1;IpfioHs-%?I5<@{=BNhwdAL^Ga~56T-(M+WdLD9Hjdqyy)67!Ko+8K(Cjvo~zc z$_yL%#<0yvnPJMor*SK1J8YQzU;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b6 z0Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b6 z0Vco%m;e)C0!)AjFaajO1a27t6_F~Stx)=}bF&rzI*_;`0p|avn{KnOp&Ec@IndBL z1qB2Y6mw8kLQ#N0(V@>msbT|(l(Hrm^aOMn(0ybD^_sdSS=ZPk>ubEtiJpc~O~5Ur zXPZ|SvcaRbdSSH&ygt2NNVCF%85J*(B8&P|z`!oL+tHIPjacfb3+W!&=&5mg0>ar+ zRbpXblgvM8Is4~5-LDme|%{i|CV2Yysr8MZNZSy z@6!iC=tUUg%x1wyU&&5k!^vz0a*6S3V}WtJ-CI-}%2xaEdufKV^>+Qa69er=@Jbbj;|LKMLLC4oaLru2w>M3K}-`oDo zo^OslU$$?-p_`3oUF%-5@a#-yc7ay$^A{V0^YUNO`ahO;9d+h?_TA!n2X8yocH!>l zwrlnshkuy9wQ97e^POpr?UysZ{oLE0e$V?K-z@%r9lv<#myFXNy!7Gm->$72+AzG? Y-lXriwD`3b{@nQP<$Vpuell?V4JAkto&W#< diff --git a/tests/taskget b/tests/taskget deleted file mode 100755 index 0c25cf5eaf64627ed6470fd304a8576913a1aee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33752 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