macOS Apps - Inspecting, debugging and Fuzzing

Support HackTricks

Static Analysis

otool & objdump & nm

otool -L /bin/ls #List dynamically linked libraries
otool -tv /bin/ps #Decompile application
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
objdump -m --syms /bin/ls # Check if the symbol table exists to get function names
objdump -m --full-contents /bin/ls # Dump every section
objdump -d /bin/ls # Dissasemble the binary
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
nm -m ./tccd # List of symbols

jtool2 & Disarm

рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ disarm рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

ARCH=arm64e disarm -c -i -I --signature /path/bin # Get bin info and signature
ARCH=arm64e disarm -c -l /path/bin # Get binary sections
ARCH=arm64e disarm -c -L /path/bin # Get binary commands (dependencies included)
ARCH=arm64e disarm -c -S /path/bin # Get symbols (func names, strings...)
ARCH=arm64e disarm -c -d /path/bin # Get disasembled
jtool2 -d __DATA.__const myipc_server | grep MIG # Get MIG info

рдЖрдк рдпрд╣рд╛рдВ jtool2 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ brew рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

# Install
brew install --cask jtool2

jtool2 -l /bin/ls # Get commands (headers)
jtool2 -L /bin/ls # Get libraries
jtool2 -S /bin/ls # Get symbol info
jtool2 -d /bin/ls # Dump binary
jtool2 -D /bin/ls # Decompile binary

# Get signature information
ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Automator

# Get MIG information
jtool2 -d __DATA.__const myipc_server | grep MIG

jtool рдХрд╛ рдЙрдкрдпреЛрдЧ disarm рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

Codesign / ldid

Codesign macOS рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ ldid iOS рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"

# Check if the appтАЩs contents have been modified
codesign --verify --verbose /Applications/Safari.app

# Get entitlements from the binary
codesign -d --entitlements :- /System/Applications/Automator.app # Check the TCC perms

# Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app

# Sign a binary
codesign -s <cert-name-keychain> toolsdemo

# Get signature info
ldid -h <binary>

# Get entitlements
ldid -e <binary>

# Change entilements
## /tmp/entl.xml is a XML file with the new entitlements to add
ldid -S/tmp/entl.xml <binary>

SuspiciousPackage

SuspiciousPackage рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ .pkg рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЗрдВрд╕реНрдЯреЙрд▓рд░) рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрди рдЗрдВрд╕реНрдЯреЙрд▓рд░реЛрдВ рдореЗрдВ preinstall рдФрд░ postinstall рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдорддреМрд░ рдкрд░ рдореИрд▓рд╡реЗрдпрд░ рд▓реЗрдЦрдХ persist the malware рдХреЗ рд▓рд┐рдП рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

hdiutil

рдпрд╣ рдЙрдкрдХрд░рдг Apple рдбрд┐рд╕реНрдХ рдЗрдореЗрдЬ (.dmg) рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ mount рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХреЗ:

hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg

It will be mounted in /Volumes

Packed binaries

  • рдЙрдЪреНрдЪ рдПрдВрдЯреНрд░реЙрдкреА рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ

  • рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ (рдХреНрдпрд╛ рд▓рдЧрднрдЧ рдХреЛрдИ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)

  • MacOS рдХреЗ рд▓рд┐рдП UPX рдкреИрдХрд░ рдПрдХ рд╕реЗрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ "__XHDR" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

Static Objective-C analysis

Metadata

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Objective-C рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд▓рд╛рд╕ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдХреЛ рд░рдЦрддреЗ рд╣реИрдВ рдЬрдм рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Mach-O рдмрд╛рдЗрдирд░реАрдЬрд╝ рдореЗрдВред рдРрд╕реЗ рдХреНрд▓рд╛рд╕ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ:

  • рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕

  • рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдзрд┐рдпрд╛рдБ

  • рдЗрдВрдЯрд░рдлреЗрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕

  • рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рдирд╛рдо рдмрд╛рдЗрдирд░реА рдХреЗ рд░рд┐рд╡рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд┐рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

Function calling

рдЬрдм рдПрдХ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ Objective-C рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп objc_msgSend рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдЬреЛ рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛:

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:

  • рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ (self) "рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ"ред рдпрд╛ рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рд╡рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рд╡рд┐рдзрд┐ рдПрдХ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рд╣реИ, рддреЛ рдпрд╣ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣реЛрдЧрд╛ (рдЬреИрд╕реЗ рдПрдХ рд╕рдВрдкреВрд░реНрдг), рдЬрдмрдХрд┐ рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, self рдХреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред

  • рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░, (op), "рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ"ред рдлрд┐рд░ рд╕реЗ, рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдмрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИред

  • рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реЗ рдорд╛рди рд╣реИрдВ рдЬреЛ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ (op)ред

рджреЗрдЦреЗрдВ рдХрд┐ lldb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ARM64 рдореЗрдВ рдЗрд╕ рдкреГрд╖реНрда рдкрд░:

Introduction to ARM64v8

x64:

Argument

Register

(for) objc_msgSend

1st argument

rdi

self: object that the method is being invoked upon

2nd argument

rsi

op: name of the method

3rd argument

rdx

1st argument to the method

4th argument

rcx

2nd argument to the method

5th argument

r8

3rd argument to the method

6th argument

r9

4th argument to the method

7th+ argument

rsp+ (on the stack)

5th+ argument to the method

Dump ObjectiveC metadata

Dynadump

Dynadump рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ Objective-C рдмрд╛рдЗрдирд░реАрдЬрд╝ рдХреЛ рдХреНрд▓рд╛рд╕-рдбрдВрдк рдХрд░рддрд╛ рд╣реИред рдЧрд┐рдЯрд╣рдм рдбрд╛рдпрд▓рд┐рдмреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

./dynadump dump /path/to/bin

рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдирд┐рдпрдорд┐рдд рдЙрдкрдХрд░рдг

nm --dyldinfo-only /path/to/bin
otool -ov /path/to/bin
objdump --macho --objc-meta-data /path/to/bin

class-dump

class-dump рдореВрд▓ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ ObjetiveC рд╕реНрд╡рд░реВрдкрд┐рдд рдХреЛрдб рдореЗрдВ рд╡рд░реНрдЧреЛрдВ, рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдШреЛрд╖рдгрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдкреБрд░рд╛рдирд╛ рдФрд░ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╢рд╛рдпрдж рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

ICDump

iCDump рдПрдХ рдЖрдзреБрдирд┐рдХ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо Objective-C рдХреНрд▓рд╛рд╕ рдбрдВрдк рд╣реИред рдореМрдЬреВрджрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, iCDump Apple рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ Python рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред

import icdump
metadata = icdump.objc.parse("/path/to/bin")

print(metadata.to_decl())

Static Swift analysis

Swift рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде, рдЪреВрдВрдХрд┐ рдЗрд╕рдореЗрдВ Objective-C рд╕рдВрдЧрддрддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЖрдк class-dump рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рдгрд╛рдПрдБ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред

jtool -l рдпрд╛ otool -l рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдХрдИ рд╕реЗрдХреНрд╢рди рдкрд╛ рд╕рдХреЗрдВ рдЬреЛ __swift5 рдЙрдкрд╕рд░реНрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ:

jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64              Mem: 0x000000000-0x100000000    __PAGEZERO
LC 01: LC_SEGMENT_64              Mem: 0x100000000-0x100028000    __TEXT
[...]
Mem: 0x100026630-0x100026d54        __TEXT.__swift5_typeref
Mem: 0x100026d60-0x100027061        __TEXT.__swift5_reflstr
Mem: 0x100027064-0x1000274cc        __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608        __TEXT.__swift5_capture
[...]

рдЖрдк рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЗрди рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Swift рдмрд╛рдЗрдирд░реА рдореЗрдВ рдкреНрд░рддреАрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ)ред рдкреНрд░рддреАрдХреЛрдВ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдРрд╕реЗ "рдбреЗрдореИрдВрдЧреНрд▓рд░реНрд╕" рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py

# Swift cli
swift demangle

рдбрд╛рдпрдирд╛рдорд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рдЗрдирд░реА рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SIP рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (csrutil disable рдпрд╛ csrutil enable --without debug) рдпрд╛ рдмрд╛рдЗрдирд░реА рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╣рдЯрд╛рдирд╛ codesign --remove-signature <binary-path> рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд╛рдЗрдирд░реА рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ (рдЖрдк рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдмрд╛рдЗрдирд░реАрдЬрд╝ рдХреЛ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, (рдЬреИрд╕реЗ cloudconfigurationd) macOS рдкрд░, SIP рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд╕рд┐рд░реНрдл рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣рдЯрд╛рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред

APIs

macOS рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк APIs рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреЗ рд╣реИрдВ:

  • proc_info: рдпрд╣ рдореБрдЦреНрдп рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рдЕрдзрд┐рдХрд╛рд░ рдпрд╛ рдордЪ рдкреЛрд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

  • libsysmon.dylib: рдпрд╣ XPC рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдХреА рдЧрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рд▓рд┐рдП com.apple.sysmond.client рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рд╕реНрдЯреИрдХрд╢реЙрдЯ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реНрдЯреИрдХрд╢реЙрдЯреНрд╕

рд╕реНрдЯреИрдХрд╢реЙрдЯрд┐рдВрдЧ рдПрдХ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЪрд▓ рд░рд╣реЗ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ, рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдордп рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред iOS рдФрд░ macOS рдкрд░, рд╕реНрдЯреИрдХрд╢реЙрдЯрд┐рдВрдЧ рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ sample рдФрд░ spindumpред

Sysdiagnose

рдпрд╣ рдЙрдкрдХрд░рдг (/usr/bini/ysdiagnose) рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ ps, zprint рдЬреИрд╕реЗ рджрд░реНрдЬрдиреЛрдВ рд╡рд┐рднрд┐рдиреНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ...

рдЗрд╕реЗ рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдбреЗрдорди /usr/libexec/sysdiagnosed рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ com.apple.system-task-ports рдФрд░ get-task-allowред

рдЗрд╕рдХрд╛ plist /System/Library/LaunchDaemons/com.apple.sysdiagnose.plist рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдЬреЛ 3 MachServices рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ:

  • com.apple.sysdiagnose.CacheDelete: /var/rmp рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдЖрд░реНрдХрд╛рдЗрд╡ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ

  • com.apple.sysdiagnose.kernel.ipc: рд╡рд┐рд╢реЗрд╖ рдкреЛрд░реНрдЯ 23 (kernel)

  • com.apple.sysdiagnose.service.xpc: Libsysdiagnose Obj-C рдХреНрд▓рд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдЗрдВрдЯрд░рдлреЗрд╕ред рдПрдХ dict рдореЗрдВ рддреАрди рддрд░реНрдХ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (compress, display, run)

рдпреВрдирд┐рдлрд╛рдЗрдб рд▓реЙрдЧреНрд╕

MacOS рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЙрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╕рдордп рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рд▓реЙрдЧреНрд╕ рдореЗрдВ <private> рдЯреИрдЧ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣рд╛рдБ рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

рд╣реЙрдкреНрдкрд░

рдмрд╛рдИрдВ рдкреИрдирд▓

рд╣реЙрдкреНрдкрд░ рдХреЗ рдмрд╛рдИрдВ рдкреИрдирд▓ рдореЗрдВ рдмрд╛рдЗрдирд░реА рдХреЗ рдкреНрд░рддреАрдХ (рд▓реЗрдмрд▓) рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА (рдкреНрд░реЛрдХ) рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рд╕реНрдЯреНрд░)ред рдпреЗ рд╕рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдирд╣реАрдВ рд╣реИрдВ рдмрд▓реНрдХрд┐ рд╡реЗ рд╣реИрдВ рдЬреЛ Mac-O рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрдИ рднрд╛рдЧреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ (рдЬреИрд╕реЗ cstring рдпрд╛ objc_methname)ред

рдордзреНрдп рдкреИрдирд▓

рдордзреНрдп рдкреИрдирд▓ рдореЗрдВ рдЖрдк рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓реНрдб рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЖрдк рдЗрд╕реЗ рдХрдЪреНрдЪреЗ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓, рдЧреНрд░рд╛рдл рдХреЗ рд░реВрдк рдореЗрдВ, рдбреАрдХрдВрдкрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдмрд╛рдЗрдирд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рджрд╛рдПрдВ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдЖрдк рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдбреА-рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдП рдЧрдП рдкреНрд╕реНрдпреВрдбреЛрдХреЛрдб рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛):

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдордзреНрдп рдиреАрдЪреЗ рдЖрдк рдкрд╛рдпрдерди рдХрдорд╛рдВрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рджрд╛рдИрдВ рдкреИрдирд▓

рджрд╛рдИрдВ рдкреИрдирд▓ рдореЗрдВ рдЖрдк рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЗрддрд┐рд╣рд╛рд╕ (рддрд╛рдХрд┐ рдЖрдк рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд░ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗ), рдХреЙрд▓ рдЧреНрд░рд╛рдл рдЬрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рд╕рднреА рдХрд╛рд░реНрдп рдЬреЛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдп рдЬреЛ рдпрд╣ рдХрд╛рд░реНрдп рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реАред

рдбреАрдЯреНрд░реИрд╕

рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рддрдХ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдФрд░ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред Dtrace рдкреНрд░реЛрдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд░реНрдиреЗрд▓ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдЬреИрд╕реЗ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реЛрддреЗ рд╣реИрдВред

DTrace рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдм рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП dtrace_probe_create рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпреЗ рдкреНрд░реЛрдмреНрд╕ рдкреНрд░рд╡реЗрд╢ рдФрд░ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБ рдкрд░ рдлрд╛рдпрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред DTrace рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди /dev/dtrace рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд░реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред

Dtrace рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ SIP рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд░рд┐рдХрд╡рд░реА рдореЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: csrutil enable --without dtrace

рдЖрдк dtrace рдпрд╛ dtruss рдмрд╛рдЗрдирд░реА рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рд╕рдВрдХрд▓рд┐рдд рдХреА рд╣реИрдВред

Dtrace рдХреЗ рдЙрдкрд▓рдмреНрдз рдкреНрд░реЛрдмреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

dtrace -l | head
ID   PROVIDER            MODULE                          FUNCTION NAME
1     dtrace                                                     BEGIN
2     dtrace                                                     END
3     dtrace                                                     ERROR
43    profile                                                     profile-97
44    profile                                                     profile-199

рдкреНрд░реЛрдм рдирд╛рдо рдЪрд╛рд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рдмрдВрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ: рдкреНрд░рджрд╛рддрд╛, рдореЙрдбреНрдпреВрд▓, рдлрд╝рдВрдХреНрд╢рди, рдФрд░ рдирд╛рдо (fbt:mach_kernel:ptrace:entry)ред рдпрджрд┐ рдЖрдк рдирд╛рдо рдХреЗ рдХрд┐рд╕реА рднрд╛рдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Dtrace рдЙрд╕ рднрд╛рдЧ рдХреЛ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред

DTrace рдХреЛ рдкреНрд░реЛрдмреНрд╕ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдФрд░ рдЬрдм рд╡реЗ рдлрд╛рдпрд░ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдХреМрди рд╕реЗ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреА рд╣реИрдВ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ D рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдФрд░ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг https://illumos.org/books/dtrace/chp-intro.html рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг

DTrace рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрд▓рдмреНрдз рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП man -k dtrace рдЪрд▓рд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг: sudo dtruss -n binary

#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
  • рд╕реНрдХреНрд░рд┐рдкреНрдЯ

syscall:::entry
/pid == $1/
{
}

#Log every syscall of a PID
sudo dtrace -s script.d 1234
syscall::open:entry
{
printf("%s(%s)", probefunc, copyinstr(arg0));
}
syscall::close:entry
{
printf("%s(%d)\n", probefunc, arg0);
}

#Log files opened and closed by a process
sudo dtrace -s b.d -c "cat /etc/hosts"
syscall:::entry
{
;
}
syscall:::return
{
printf("=%d\n", arg1);
}

#Log sys calls with values
sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"

dtruss

dtruss -c ls #Get syscalls of ls
dtruss -c -p 1000 #get syscalls of PID 1000

kdebug

рдпрд╣ рдПрдХ рдХрд░реНрдиреЗрд▓ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрд┐рдд рдХреЛрдб /usr/share/misc/trace.codes рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

latency, sc_usage, fs_usage рдФрд░ trace рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдЗрд╕рдХрд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

kdebug рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП sysctl рдХрд╛ рдЙрдкрдпреЛрдЧ kern.kdebug рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MIBs sys/sysctl.h рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдп bsd/kern/kdebug.c рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдХрд╕реНрдЯрдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде kdebug рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЗ рдЖрдорддреМрд░ рдкрд░ рдХрджрдо рд╣реЛрддреЗ рд╣реИрдВ:

  • KERN_KDSETREMOVE рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╣рдЯрд╛рдПрдВ

  • KERN_KDSETBUF рдФрд░ KERN_KDSETUP рдХреЗ рд╕рд╛рде рдЯреНрд░реЗрд╕ рд╕реЗрдЯ рдХрд░реЗрдВ

  • рдмрдлрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП KERN_KDGETBUF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

  • KERN_KDPINDEX рдХреЗ рд╕рд╛рде рдЯреНрд░реЗрд╕ рд╕реЗ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

  • KERN_KDENABLE рдХреЗ рд╕рд╛рде рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ

  • KERN_KDREADTR рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдмрдлрд░ рдкрдврд╝реЗрдВ

  • рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЛ рдЙрд╕рдХреЗ рдкреНрд░реЛрд╕реЗрд╕ рд╕реЗ рдореЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП KERN_KDTHRMAP рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред

рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Apple рдЙрдкрдХрд░рдг trace рдпрд╛ рдХрд╕реНрдЯрдо рдЙрдкрдХрд░рдг kDebugView (kdv)** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред**

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Kdebug рдХреЗрд╡рд▓ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордп рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ k-debug рд╕рдВрдЪрд╛рд▓рд┐рдд рдЙрдкрдХрд░рдг рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

ktrace

ktrace_* APIs libktrace.dylib рд╕реЗ рдЖрддреА рд╣реИрдВ рдЬреЛ Kdebug рдХреЗ рдЙрди рдкрд░рддреЛрдВ рдХреЛ рд▓рдкреЗрдЯрддреА рд╣реИрдВред рдлрд┐рд░, рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрд╕ ktrace_session_create рдФрд░ ktrace_events_[single/class] рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдкрд░ рдХреЙрд▓рдмреИрдХ рд╕реЗрдЯ рдХрд░ рд╕рдХреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ ktrace_start рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд╕рдХреЗред

рдЖрдк рдЗрд╕реЗ SIP рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдкрд░ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ ktrace рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

ktrace trace -s -S -t c -c ls | grep "ls("

Or tailspin.

kperf

рдпрд╣ рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░ рдХреА рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Kdebug рдХреЙрд▓рдЖрдЙрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдмреБрдирд┐рдпрд╛рджреА рд░реВрдк рд╕реЗ, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ kernel_debug_active рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ kperf_kdebug_handler рдХреЛ Kdebug рдХреЛрдб рдФрд░ рдХрд░реНрдиреЗрд▓ рдлреНрд░реЗрдо рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ Kdebug рдХреЛрдб рдореЗрдВ рд╕реЗ рдПрдХ рдЪрдпрдирд┐рдд рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ "рдХреНрд░рд┐рдпрд╛рдПрдБ" рдХреЛ рдмрд┐рдЯрдореИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ (рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП osfmk/kperf/action.h рджреЗрдЦреЗрдВ)ред

Kperf рдХрд╛ рдПрдХ sysctl MIB рддрд╛рд▓рд┐рдХрд╛ рднреА рд╣реИ: (рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ) sysctl kperfред рдпреЗ рдХреЛрдб osfmk/kperf/kperfbsd.c рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Kperfs рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рдЙрдкрд╕рдореБрдЪреНрдЪрдп kpc рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ рдорд╢реАрди рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

ProcessMonitor

ProcessMonitor рдПрдХ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреМрди-рдХреМрди рд╕реЗ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░ рд░рд╣реА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреМрди-рдХреМрди рд╕реЗ рдирдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдмрдирд╛ рд░рд╣реА рд╣реИ)ред

SpriteTree

SpriteTree рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореИрдХ рдХреЛ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдореЙрдирд┐рдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ sudo eslogger fork exec rename create > cap.json (рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдХреЛ FDA рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдФрд░ рдлрд┐рд░ рдЖрдк рдЗрд╕ рдЙрдкрдХрд░рдг рдореЗрдВ json рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рднреА рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХреЗрдВ:

FileMonitor

FileMonitor рдлрд╝рд╛рдЗрд▓ рдШрдЯрдирд╛рдУрдВ (рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рдг, рд╕рдВрд╢реЛрдзрди, рдФрд░ рд╡рд┐рд▓реЛрдкрди) рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдРрд╕реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

Crescendo

Crescendo рдПрдХ GUI рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рд░реВрдк рдФрд░ рдЕрдиреБрднрд╡ Windows рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Microsoft Sysinternal рдХреЗ Procmon рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдХрд░рдг рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рд╢реБрд░реВ рдФрд░ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓, рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдиреЗрдЯрд╡рд░реНрдХ, рдЖрджрд┐ рдЬреИрд╕реА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЧрдИ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

Apple Instruments

Apple Instruments Xcode рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ - рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд░реНрд╢рди рдХреА рдирд┐рдЧрд░рд╛рдиреА, рдореЗрдореЛрд░реА рд▓реАрдХ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

fs_usage

рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
fs_usage -w -f network curl #This tracks network actions

TaskExplorer

Taskexplorer рдПрдХ рдмрд╛рдЗрдирд░реА рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝, рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдпрд╣ рдмрд╛рдЗрдирд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ virustotal рдХреЗ рдЦрд┐рд▓рд╛рдл рднреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдирд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИред

PT_DENY_ATTACH

рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдЪрд▓ рд░рд╣реЗ рдбреЗрдорди рдХреЛ PT_DENY_ATTACH рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗ, рднрд▓реЗ рд╣реА SIP рдЕрдХреНрд╖рдо рд╣реЛред

lldb

lldb macOS рдмрд╛рдЗрдирд░реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП de facto tool рд╣реИред

lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor

рдЖрдк рдЕрдкрдиреЗ рд╣реЛрдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ .lldbinit рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ lldb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп intel рд╕реНрд╡рд╛рдж рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рд╣реЛ:

settings set target.x86-disassembly-flavor intel

lldb рдХреЗ рдЕрдВрджрд░, process save-core рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдбрдВрдк рдХрд░реЗрдВ

(lldb) рдХрдорд╛рдВрдб

рд╡рд┐рд╡рд░рдг

run (r)

рдХрд╛рд░реНрдпрд╡рд╛рд╣реА рд╢реБрд░реВ рдХрд░рдирд╛, рдЬреЛ рддрдм рддрдХ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╣рд┐рдЯ рди рд╣реЛ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдПред

process launch --stop-at-entry

рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░ рд░реБрдХрддреЗ рд╣реБрдП рдХрд╛рд░реНрдпрд╡рд╛рд╣реА рд╢реБрд░реВ рдХрд░реЗрдВ

continue (c)

рдбреАрдмрдЧ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХрд╛рд░реНрдпрд╡рд╛рд╣реА рдЬрд╛рд░реА рд░рдЦреЗрдВред

nexti (n / ni)

рдЕрдЧрд▓реА рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдпрд╣ рдХрдорд╛рдВрдб рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред

stepi (s / si)

рдЕрдЧрд▓реА рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдЕрдЧрд▓реА рдХрдорд╛рдВрдб рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдХрдорд╛рдВрдб рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдХрджрдо рд░рдЦреЗрдЧрд╛ред

finish (f)

рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди (тАЬрдлреНрд░реЗрдотАЭ) рдореЗрдВ рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рд▓реМрдЯреЗрдВ рдФрд░ рд░реБрдХреЗрдВред

control + c

рдХрд╛рд░реНрдпрд╡рд╛рд╣реА рдХреЛ рд░реЛрдХреЗрдВред рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (r) рдпрд╛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ (c), рддреЛ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ ...рдЬрд╣рд╛рдБ рднреА рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд░рд╣реА рд╣реИред

breakpoint (b)

b main #рдХреЛрдИ рднреА рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ main рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

b <binname>`main #рдмрд┐рди рдХрд╛ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди

b set -n main --shlib <lib_name> #рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд┐рди рдХрд╛ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди

breakpoint set -r '\[NSFileManager .*\]$' #рдХреЛрдИ рднреА NSFileManager рд╡рд┐рдзрд┐

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # рдЙрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рднреА рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдореЗрдВ рдмреНрд░реЗрдХ

b -a 0x0000000100004bd9

br l #рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реВрдЪреА

br e/dis <num> #рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕рдХреНрд╖рдо/рдЕрдХреНрд╖рдо рдХрд░реЗрдВ

breakpoint delete <num>

help

help breakpoint #рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХрдорд╛рдВрдб рдХреА рдорджрдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

help memory write #рдореЗрдореЛрд░реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорджрдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/memory address>

рдореЗрдореЛрд░реА рдХреЛ рдПрдХ рд╢реВрдиреНрдп-рдЯрд░реНрдорд┐рдиреЗрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

x/i <reg/memory address>

рдореЗрдореЛрд░реА рдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

x/b <reg/memory address>

рдореЗрдореЛрд░реА рдХреЛ рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

print object (po)

рдпрд╣ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Apple рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ Objective-C APIs рдпрд╛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреА рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ тАЬprint objectтАЭ (po) рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ po рдЕрд░реНрдердкреВрд░реНрдг рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рддреЛ x/b рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

memory

memory read 0x000.... memory read $x0+0xf2a memory write 0x100600000 -s 4 0x41414141 #рдЙрд╕ рдкрддреЗ рдореЗрдВ AAAA рд▓рд┐рдЦреЗрдВ memory write -f s $rip+0x11f+7 "AAAA" #рдкрддреЗ рдореЗрдВ AAAA рд▓рд┐рдЦреЗрдВ

disassembly

dis #рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдбрд┐рд╕рд╛рд╕реЗрдореНрдмрд▓ рдХрд░реЗрдВ

dis -n <funcname> #рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдбрд┐рд╕рд╛рд╕реЗрдореНрдмрд▓ рдХрд░реЗрдВ

dis -n <funcname> -b <basename> #рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдбрд┐рд╕рд╛рд╕реЗрдореНрдмрд▓ рдХрд░реЗрдВ dis -c 6 #6 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдбрд┐рд╕рд╛рд╕реЗрдореНрдмрд▓ рдХрд░реЗрдВ dis -c 0x100003764 -e 0x100003768 #рдПрдХ рдЬреЛрдбрд╝ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ dis -p -c 4 #рд╡рд░реНрддрдорд╛рди рдкрддреЗ рд╕реЗ рдбрд┐рд╕рд╛рд╕реЗрдореНрдмрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ

parray

parray 3 (char **)$x1 #x1 рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ 3 рдШрдЯрдХреЛрдВ рдХрд╛ рдРрд░реЗ рдЬрд╛рдВрдЪреЗрдВ

image dump sections

рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдореЗрдореЛрд░реА рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ

image dump symtab <library>

image dump symtab CoreNLP #CoreNLP рд╕реЗ рд╕рднреА рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рдкрддреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдЬрдм objc_sendMsg рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ rsi рд░рдЬрд┐рд╕реНрдЯрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдПрдХ рд╢реВрдиреНрдп-рдЯрд░реНрдорд┐рдиреЗрдЯреЗрдб (тАЬCтАЭ) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред lldb рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ:

(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"

(lldb) print (char*)$rsi: (char *) $1 = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"

(lldb) reg read $rsi: rsi = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"

рдПрдВрдЯреА-рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕

VM рдкрд╣рдЪрд╛рди

  • рдХрдорд╛рдВрдб sysctl hw.model "Mac" рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрдм рд╣реЛрд╕реНрдЯ MacOS рд╣реИ рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдПрдХ VM рд╣реИ рддреЛ рдХреБрдЫ рдЕрд▓рдЧред

  • hw.logicalcpu рдФрд░ hw.physicalcpu рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реБрдП рдХреБрдЫ рдореИрд▓рд╡реЗрдпрд░ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ VM рд╣реИред

  • рдХреБрдЫ рдореИрд▓рд╡реЗрдпрд░ рдпрд╣ рднреА рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдорд╢реАрди VMware рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ, MAC рдкрддреЗ (00:50:56) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред

  • рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдпрджрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЛрдб рдХреЗ рд╕рд╛рде:

  • if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ }

  • рдпрд╣ ptrace рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЛ PT_DENY_ATTACH рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рднреА рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдбреАрдмрдЧрд░ рдХреЛ рдЕрдЯреИрдЪ рдФрд░ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

  • рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ sysctl рдпрд╛ ptrace рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдореИрд▓рд╡реЗрдпрд░ рдЗрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ)

  • рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, тАЬDefeating Anti-Debug Techniques: macOS ptrace variantsтАЭ : тАЬрд╕рдВрджреЗрд╢ рдкреНрд░рдХреНрд░рд┐рдпрд╛ # рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╕реНрдерд┐рддрд┐ = 45 (0x0000002d) рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдбрд┐рдмрдЧ рд▓рдХреНрд╖реНрдп PT_DENY_ATTACH рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИтАЭ

рдХреЛрд░ рдбрдВрдк

рдХреЛрд░ рдбрдВрдк рддрдм рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрджрд┐:

  • kern.coredump sysctl 1 рдкрд░ рд╕реЗрдЯ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ)

  • рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ suid/sgid рдирд╣реАрдВ рдереА рдпрд╛ kern.sugid_coredump 1 рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 0)

  • AS_CORE рд╕реАрдорд╛ рдСрдкрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдХреЛрдб рдбрдВрдк рдирд┐рд░реНрдорд╛рдг рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ulimit -c 0 рдХреЙрд▓ рдХрд░рдХреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ulimit -c unlimited рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрднрд╡ рд╣реИред

рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЛрд░ рдбрдВрдк kern.corefile sysctl рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЖрдорддреМрд░ рдкрд░ /cores/core/.%P рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред

рдлрдЬрд╝рд┐рдВрдЧ

ReportCrash рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред рдПрдХ рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреНрд░реИрд╢ рдХреЗ рдХрд╛рд░рдг рдХрд╛ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓реЙрдиреНрдЪрдб рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, ReportCrash рдПрдХ LaunchAgent рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ ~/Library/Logs/DiagnosticReports/ рдореЗрдВ рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред рдбреЗрдордиреНрд╕, рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдиреНрдЪрдб рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, ReportCrash рдПрдХ LaunchDaemon рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ /Library/Logs/DiagnosticReports рдореЗрдВ рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рдЬреЛ Apple рдХреЛ рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рд╣реИрдВ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдХреНрд░реИрд╢ рд╣реБрдЖред

#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

#To re-enable crash reporting:
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

рдиреАрдВрдж

MacOS рдореЗрдВ рдлрдЬрд╝рд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ Mac рдХреЛ рд╕реЛрдиреЗ рди рджрд┐рдпрд╛ рдЬрд╛рдП:

SSH рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ

рдпрджрд┐ рдЖрдк SSH рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрдЬрд╝рд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рди рд╣реЛред рдЗрд╕рд▓рд┐рдП sshd_config рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓реЗрдВ:

  • TCPKeepAlive Yes

  • ClientAliveInterval 0

  • ClientAliveCountMax 0

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

Internal Handlers

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рдХрд┐рд╕ рдРрдк рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдХреАрдо рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:

macOS File Extension & URL scheme app handlers

Enumerating Network Processes

рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ:

dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
#wait some time
sort -u recv.log > procs.txt
cat procs.txt

рдпрд╛ netstat рдпрд╛ lsof рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

Libgmalloc

lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib" -o "run arg1 arg2" -o "bt" -o "reg read" -o "dis -s \$pc-32 -c 24 -m -F intel" -o "quit"

Fuzzers

CLI рдЯреВрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдпрд╣ "рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ" macOS GUI рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рдеред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ macOS рдРрдкреНрд╕ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдЬреИрд╕реЗ рдЕрджреНрд╡рд┐рддреАрдп рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рд╕рд╣реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ (~/Library/Containers/com.apple.Safari/Data)...

рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:

# iBooks
litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez

# -l : Local
# -c : cmdline with FUZZ word (if not stdin is used)
# -i : input directory or file
# -o : Dir to output crashes
# -t : Dir to output runtime fuzzing artifacts
# -x : Tmeout for the run (default is 1)
# -n : Num of fuzzing iterations (default is 1)
# -e : enable second round fuzzing where any crashes found are reused as inputs
# -z : enable malloc debug helpers

# Font Book
litefuzz -l -c "/System/Applications/Font Book.app/Contents/MacOS/Font Book FUZZ" -i input/fonts -o crashes/font-book -x 2 -n 500000 -ez

# smbutil (using pcap capture)
litefuzz -lk -c "smbutil view smb://localhost:4455" -a tcp://localhost:4455 -i input/mac-smb-resp -p -n 100000 -z

# screensharingd (using pcap capture)
litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash screensharingd -p -n 100000

рдЕрдзрд┐рдХ рдлрдЬрд╝рд┐рдВрдЧ рдореИрдХреЛрд╕ рдЬрд╛рдирдХрд╛рд░реА

рд╕рдВрджрд░реНрдн

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ