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+Dkf-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+Dkf-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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