macOS Apps - Inspecting, debugging and Fuzzing
Static Analysis
otool & objdump & nm
jtool2 & Disarm
рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ disarm рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк рдпрд╣рд╛рдВ jtool2 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ brew
рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
jtool рдХрд╛ рдЙрдкрдпреЛрдЧ disarm рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
Codesign / ldid
Codesign
macOS рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ ldid
iOS рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
SuspiciousPackage
SuspiciousPackage рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ .pkg рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЗрдВрд╕реНрдЯреЙрд▓рд░) рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрди рдЗрдВрд╕реНрдЯреЙрд▓рд░реЛрдВ рдореЗрдВ preinstall
рдФрд░ postinstall
рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдорддреМрд░ рдкрд░ рдореИрд▓рд╡реЗрдпрд░ рд▓реЗрдЦрдХ persist the malware рдХреЗ рд▓рд┐рдП рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
hdiutil
рдпрд╣ рдЙрдкрдХрд░рдг Apple рдбрд┐рд╕реНрдХ рдЗрдореЗрдЬ (.dmg) рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ mount рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХреЗ:
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 рдореЗрдВ рдЗрд╕ рдкреГрд╖реНрда рдкрд░:
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 рдмрд╛рдЗрдирд░реАрдЬрд╝ рдХреЛ рдХреНрд▓рд╛рд╕-рдбрдВрдк рдХрд░рддрд╛ рд╣реИред рдЧрд┐рдЯрд╣рдм рдбрд╛рдпрд▓рд┐рдмреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
рдирд┐рдпрдорд┐рдд рдЙрдкрдХрд░рдг
class-dump
class-dump рдореВрд▓ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ ObjetiveC рд╕реНрд╡рд░реВрдкрд┐рдд рдХреЛрдб рдореЗрдВ рд╡рд░реНрдЧреЛрдВ, рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдШреЛрд╖рдгрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдкреБрд░рд╛рдирд╛ рдФрд░ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╢рд╛рдпрдж рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
ICDump
iCDump рдПрдХ рдЖрдзреБрдирд┐рдХ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо Objective-C рдХреНрд▓рд╛рд╕ рдбрдВрдк рд╣реИред рдореМрдЬреВрджрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, iCDump Apple рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ Python рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
Static Swift analysis
Swift рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде, рдЪреВрдВрдХрд┐ рдЗрд╕рдореЗрдВ Objective-C рд╕рдВрдЧрддрддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЖрдк class-dump рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рдгрд╛рдПрдБ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред
jtool -l
рдпрд╛ otool -l
рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдХрдИ рд╕реЗрдХреНрд╢рди рдкрд╛ рд╕рдХреЗрдВ рдЬреЛ __swift5
рдЙрдкрд╕рд░реНрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ:
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Swift рдмрд╛рдЗрдирд░реА рдореЗрдВ рдкреНрд░рддреАрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ)ред рдкреНрд░рддреАрдХреЛрдВ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдРрд╕реЗ "рдбреЗрдореИрдВрдЧреНрд▓рд░реНрд╕" рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдбрд╛рдпрдирд╛рдорд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рдЗрдирд░реА рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 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 рдХреЗ рдЙрдкрд▓рдмреНрдз рдкреНрд░реЛрдмреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдкреНрд░реЛрдм рдирд╛рдо рдЪрд╛рд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рдмрдВрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ: рдкреНрд░рджрд╛рддрд╛, рдореЙрдбреНрдпреВрд▓, рдлрд╝рдВрдХреНрд╢рди, рдФрд░ рдирд╛рдо (fbt:mach_kernel:ptrace:entry
)ред рдпрджрд┐ рдЖрдк рдирд╛рдо рдХреЗ рдХрд┐рд╕реА рднрд╛рдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Dtrace рдЙрд╕ рднрд╛рдЧ рдХреЛ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред
DTrace рдХреЛ рдкреНрд░реЛрдмреНрд╕ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдФрд░ рдЬрдм рд╡реЗ рдлрд╛рдпрд░ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдХреМрди рд╕реЗ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреА рд╣реИрдВ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ D рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдФрд░ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг https://illumos.org/books/dtrace/chp-intro.html рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг
DTrace рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрд▓рдмреНрдз рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП man -k dtrace
рдЪрд▓рд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг: sudo dtruss -n binary
рд╕реНрдХреНрд░рд┐рдкреНрдЯ
dtruss
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
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
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
рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
TaskExplorer
Taskexplorer рдПрдХ рдмрд╛рдЗрдирд░реА рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝, рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдпрд╣ рдмрд╛рдЗрдирд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ virustotal рдХреЗ рдЦрд┐рд▓рд╛рдл рднреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдирд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИред
PT_DENY_ATTACH
рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдЪрд▓ рд░рд╣реЗ рдбреЗрдорди рдХреЛ PT_DENY_ATTACH
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗ, рднрд▓реЗ рд╣реА SIP рдЕрдХреНрд╖рдо рд╣реЛред
lldb
lldb macOS рдмрд╛рдЗрдирд░реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП de facto tool рд╣реИред
рдЖрдк рдЕрдкрдиреЗ рд╣реЛрдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ .lldbinit
рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ lldb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп 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) |
breakpoint delete <num> |
help | help breakpoint #рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХрдорд╛рдВрдб рдХреА рдорджрдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ help memory write #рдореЗрдореЛрд░реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорджрдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ |
reg | |
x/s <reg/memory address> | рдореЗрдореЛрд░реА рдХреЛ рдПрдХ рд╢реВрдиреНрдп-рдЯрд░реНрдорд┐рдиреЗрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред |
x/i <reg/memory address> | рдореЗрдореЛрд░реА рдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред |
x/b <reg/memory address> | рдореЗрдореЛрд░реА рдХреЛ рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред |
print object (po) | рдпрд╣ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ po $raw
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Apple рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ Objective-C APIs рдпрд╛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреА рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ тАЬprint objectтАЭ (po) рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ po рдЕрд░реНрдердкреВрд░реНрдг рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рддреЛ |
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> |
|
рдЬрдм 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 рдХреЛ рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рд╣реИрдВ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рдХреНрд░реИрд╢ рд╣реБрдЖред
рдиреАрдВрдж
MacOS рдореЗрдВ рдлрдЬрд╝рд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ Mac рдХреЛ рд╕реЛрдиреЗ рди рджрд┐рдпрд╛ рдЬрд╛рдП:
systemsetup -setsleep Never
pmset, System Preferences
SSH рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ
рдпрджрд┐ рдЖрдк SSH рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрдЬрд╝рд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рди рд╣реЛред рдЗрд╕рд▓рд┐рдП sshd_config рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓реЗрдВ:
TCPKeepAlive Yes
ClientAliveInterval 0
ClientAliveCountMax 0
Internal Handlers
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рдХрд┐рд╕ рдРрдк рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдХреАрдо рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:
macOS File Extension & URL scheme app handlersEnumerating Network Processes
рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ:
рдпрд╛ netstat
рдпрд╛ lsof
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
Libgmalloc
Fuzzers
CLI рдЯреВрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдпрд╣ "рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ" macOS GUI рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рдеред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ macOS рдРрдкреНрд╕ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдЬреИрд╕реЗ рдЕрджреНрд╡рд┐рддреАрдп рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рд╕рд╣реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ (~/Library/Containers/com.apple.Safari/Data
)...
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг: