macOS Process Abuse

рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдореМрд▓рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА

рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдЪрд▓ рд░рд╣реЗ executable рдХреА рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдХреЛрдб рдирд╣реАрдВ рдЪрд▓рд╛рддреА рд╣реИрдВ, рдпреЗ рдереНрд░реЗрдбреНрд╕ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдмрд╕ рдЪрд▓ рд░рд╣реЗ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдмреНрдмрд╛ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдореЗрдореЛрд░реА, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, рдкреЛрд░реНрдЯреНрд╕, рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рднреАрддрд░ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рдереАрдВ (PID 1 рдХреЛ рдЫреЛрдбрд╝рдХрд░) fork рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдПрдХ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рдмрдЪреНрдЪрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдо рддреМрд░ рдкрд░ execve рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдирдпрд╛ executable рд▓реЛрдб рдХрд░рддреА рдФрд░ рдЪрд▓рд╛рддреА рдереАред рдлрд┐рд░, vfork рдХреЛ рд╢реАрдШреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдореЗрдореЛрд░реА рдХреА рдХреЙрдкреА рдХрд┐рдПред рдлрд┐рд░ posix_spawn рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдПрдХ рдХреЙрд▓ рдореЗрдВ vfork рдФрд░ execve рдХреЛ рдорд┐рд▓рд╛рддрд╛ рдерд╛ рдФрд░ рдлреНрд▓реИрдЧреНрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рдерд╛:

  • POSIX_SPAWN_RESETIDS: рдкреНрд░рднрд╛рд╡реА рдЖрдИрдбреА рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдИрдбреА рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ

  • POSIX_SPAWN_SETPGROUP: рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣ рд╕рдВрдмрдВрдз рд╕реЗрдЯ рдХрд░реЗрдВ

  • POSUX_SPAWN_SETSIGDEF: рд╕рд┐рдЧреНрдирд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВ

  • POSIX_SPAWN_SETSIGMASK: рд╕рд┐рдЧреНрдирд▓ рдорд╛рд╕реНрдХ рд╕реЗрдЯ рдХрд░реЗрдВ

  • POSIX_SPAWN_SETEXEC: рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХреНрдЬреАрдХреНрдпреВрдЯ (рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде execve рдХреА рддрд░рд╣)

  • POSIX_SPAWN_START_SUSPENDED: рд╕рд╕реНрдкреЗрдВрдбреЗрдб рд╢реБрд░реВ рдХрд░реЗрдВ

  • _POSIX_SPAWN_DISABLE_ASLR: ASLR рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ

  • _POSIX_SPAWN_NANO_ALLOCATOR: libmalloc рдХрд╛ рдиреИрдиреЛ рдЖрд╡рдВрдЯрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

  • _POSIX_SPAWN_ALLOW_DATA_EXEC: рдбреЗрдЯрд╛ рд╕реЗрдЧрдореЗрдВрдЯ рдкрд░ rwx рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ

  • POSIX_SPAWN_CLOEXEC_DEFAULT: рдПрдХреНрдЬреЗрдХреНрдпреВрдЯ(2) рдкрд░ рд╕рднреА рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдг рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ

  • _POSIX_SPAWN_HIGH_BITS_ASLR: ASLR рд╕реНрд▓рд╛рдЗрдб рдХреЗ рдЙрдЪреНрдЪ рдмрд┐рдЯ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдПрдВ

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, posix_spawn рдПрдХ posix_spawnattr рдХрд╛ рдПрдХ рдмрд╣реБрдЬреНрдЮ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрддреНрдкрдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП posix_spawn_file_actionsред

рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд░ рдЬрд╛рддреА рд╣реИ рддреЛ рдпрд╣ рдорд╛рддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░рд┐рдЯрд░реНрди рдХреЛрдб рднреЗрдЬрддреА рд╣реИ (рдЕрдЧрд░ рдорд╛рддрд╛ рдорд░ рдЧрдИ, рддреЛ рдирдпрд╛ рдорд╛рддрд╛ PID 1 рд╣реИ) рд╕рд┐рдЧреНрдирд▓ SIGCHLD рдХреЗ рд╕рд╛рдеред рдорд╛рддрд╛ рдХреЛ рдЗрд╕ рдорд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ wait4() рдпрд╛ waitid() рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдФрд░ рдЬрдм рддрдХ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рддрдм рддрдХ рдмрдЪреНрдЪрд╛ рдПрдХ рдЬрд╝реЛрдореНрдмреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдЕрднреА рднреА рд╕реВрдЪреАрдмрджреНрдз рд╣реИ рд▓реЗрдХрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддреАред

PIDs

PIDs, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред XNU рдореЗрдВ PIDs 64 рдмрд┐рдЯ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХрд╛рдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдХрднреА рдирд╣реАрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ (рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП)ред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣, рд╕рддреНрд░ рдФрд░ рдХреЛрд▓реЗрд╢рди

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдХреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реИрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрджреЗрд╢ рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣ рдореЗрдВ рд╣реЛрдВрдЧреЗ рддрд╛рдХрд┐ рдХрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреЗрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рддреНрд░реЛрдВ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХреА рдЬрд╛рдПрдВред рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рддреА рд╣реИ (setsid(2)), рддреЛ рдмрдЪреНрдЪреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рддреНрд░ рдХреЗ рдЕрдВрджрд░ рд╕реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЬрдм рддрдХ рд╡реЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рддреНрд░ рд╢реБрд░реВ рди рдХрд░реЗрдВред

рдХреЛрд▓реЗрд╢рди рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЧреНрд░реБрдк рдХреА рдЬрд╛рддреА рд╣реИрдВ Darwin рдореЗрдВред рдХреЛрд▓реЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рд╡рд╣ рдкреВрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗ, рдПрдХ рд▓реЗрдЬрд░ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХреЗ рдпрд╛ рдЬреЗрдЯреНрд╕рдо рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХреЗред рдХреЛрд▓реЗрд╢рдиреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ: рдиреЗрддрд╛, XPC рд╕реЗрд╡рд╛, рдПрдХреНрд╕рдЯреЗрдВрд╢рдиред

рдкрд░рд┐рдЪрдп рдФрд░ рд╡реНрдпрдХреНрддрд┐рддреНрд╡

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рдЪрдп рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрд╕рдХреА рдкреНрд░рд┐рд╡рд┐рд▓реЗрдЬреЗрдЬ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдореБрдЦреНрдп uid рдФрд░ рдПрдХ рдореБрдЦреНрдп gid рд╣реЛрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдореЗрдВ setuid/setgid рдмрд┐рдЯ рд╣реИ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕рдореВрд╣ рдЖрдИрдбреА рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдирдП uids/gids рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред

рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ persona рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯ рдХрд╛ рдкрд░рд┐рдЪрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдкрд░рд┐рдЪрдп рдХреЛ рдЕрдкрдирд╛рдиреЗ рд╕реЗ рдЙрд╕рдХрд╛ uid, gid рдФрд░ рд╕рдореВрд╣ рд╕рджрд╕реНрдпрддрд╛ рдПрдХ рд╕рд╛рде рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдвреВрдВрдврдирд╛ рд╕рдВрднрд╡ рд╣реИ:

struct kpersona_info { uint32_t persona_info_version;
uid_t    persona_id; /* overlaps with UID */
int      persona_type;
gid_t    persona_gid;
uint32_t persona_ngroups;
gid_t    persona_groups[NGROUPS];
uid_t    persona_gmuid;
char     persona_name[MAXLOGNAME + 1];

/* TODO: MAC policies?! */
}

рдзрд╛рдЧреЛрдВ рдХреА рдореМрд▓рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА

  1. POSIX рдзрд╛рдЧреЗ (pthreads): macOS POSIX рдзрд╛рдЧреЛрдВ (pthreads) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ C/C++ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдереНрд░реЗрдбрд┐рдВрдЧ API рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред macOS рдореЗрдВ pthreads рдХрд╛ рдЕрдВрдХреБрд░рдг /usr/lib/system/libsystem_pthread.dylib рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз libpthread рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЖрддрд╛ рд╣реИред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдзрд╛рдЧреЗ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рд╕реБрдкреВрд░реНрдд рдХрд░рддреА рд╣реИред

  2. рдзрд╛рдЧреЗ рдмрдирд╛рдирд╛: pthread_create() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирдП рдзрд╛рдЧреЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди bsdthread_create() рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ, рдЬреЛ XNU рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╣реИ (macOS рдХреЗ рдХрд░реНрдиреЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд)ред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ pthread_attr (рдЧреБрдг) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд┐рднрд┐рдиреНрди рдЭрдВрдбреЗ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдзрд╛рдЧ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдореЗрдд рдЕрдиреБрд╕реВрдЪрдирд╛ рдиреАрддрд┐рдпрд╛рдБ рдФрд░ рд╕реНрдЯреИрдХ рдХрд╛ рдЖрдХрд╛рд░ред

  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреИрдХ рдХрд╛ рдЖрдХрд╛рд░: рдирдП рдзрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреИрдХ рдХрд╛ рдЖрдХрд╛рд░ 512 KB рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рд▓реЗрдХрд┐рди рдпрджрд┐ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдзрд╛рдЧ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  1. рдзрд╛рдЧ рдкреНрд░рд╛рд░рдВрднреАрдХрд░рдг: __pthread_init() рдлрд╝рдВрдХреНрд╢рди рдзрд╛рдЧ рд╕реЗрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, env[] рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╕реНрдерд╛рди рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

macOS рдореЗрдВ рдзрд╛рдЧ рд╕рдорд╛рдкреНрддрд┐

  1. рдзрд╛рдЧреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдирд╛: рдзрд╛рдЧреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпрдд: pthread_exit() рдХреЛ рдмреБрд▓рд╛рдХрд░ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдзрд╛рдЧ рдХреЛ рд╕рд╛рдлрд╝ рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рджреЗрддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХ рд╕рдлрд╝рд╛рдИ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдзрд╛рдЧ рдХреЛ рдХрд┐рд╕реА рднреА рдЬреНрд╡рд╛рдЗрдирд░ рдХреЛ рдПрдХ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

  2. рдзрд╛рдЧ рд╕рдлрд╝рд╛рдИ: pthread_exit() рдХреЛ рдмреБрд▓рд╛рдиреЗ рдкрд░, pthread_terminate() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдзрд╛рдЧ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдВрдмреЛрдзрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ Mach рдзрд╛рдЧ рдкреЛрд░реНрдЯ (Mach XNU рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕рдВрдЪрд╛рд░ рдЙрдкрдкреНрд░рдгрд╛рд▓реА рд╣реИ) рдХреЛ рд╡рд┐рдирд┐рдпрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ bsdthread_terminate рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ, рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЬреЛ рдзрд╛рдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░реАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред

рд╕рдордХреНрд░рдордг рдпрд╛рдВрддреНрд░рд┐рдХрд┐рдпрд╛рдБ

рд╕рд╛рдЭреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд░реЗрд╕ рд╢рд░реНрддреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, macOS рдХрдИ рд╕рдордХреНрд░рдордг рдЖрдзрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпреЗ рдмрд╣реБ-рдзрд╛рдЧреАрдп рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рддрд╛рдХрд┐ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЬрд╛ рд╕рдХреЗ:

  1. рдореНрдпреВрдЯреЗрдХреНрд╕:

  • рд╕рд╛рдорд╛рдиреНрдп рдореНрдпреВрдЯреЗрдХреНрд╕ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░: 0x4D555458): 60 рдмрд╛рдЗрдЯ рдХрд╛ рдорд╛рдирдХ рдореНрдпреВрдЯреЗрдХреНрд╕ (56 рдмрд╛рдЗрдЯ рдореНрдпреВрдЯреЗрдХреНрд╕ рдФрд░ 4 рдмрд╛рдЗрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░)ред

  • рдлрд╛рд╕реНрдЯ рдореНрдпреВрдЯреЗрдХреНрд╕ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░: 0x4d55545A): рд╕рд╛рдорд╛рдиреНрдп рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИ рд▓реЗрдХрд┐рди рддреЗрдЬ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд, рднреА 60 рдмрд╛рдЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред

  1. рд╕реНрдерд┐рддрд┐ рдЪрд░рдг:

  • рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, 44 рдмрд╛рдЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ (40 рдмрд╛рдЗрдЯ рдкреНрд▓рд╕ 4 рдмрд╛рдЗрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░)ред

  • рд╕реНрдерд┐рддрд┐ рдЪрд░рдг рдЧреБрдг (рд╣рд╕реНрддрд╛рдХреНрд╖рд░: 0x434e4441): рд╕реНрдерд┐рддрд┐ рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕ рдЧреБрдг, 12 рдмрд╛рдЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред

  1. рдПрдХ рдмрд╛рд░ рдЪрд░рдг (рд╣рд╕реНрддрд╛рдХреНрд╖рд░: 0x4f4e4345):

  • рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднреАрдХрд░рдг рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реА рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ 12 рдмрд╛рдЗрдЯ рд╣реИред

  1. рдкрдарди-рд▓реЗрдЦрди рддрд╛рд▓рд┐рдХрд╛:

  • рдПрдХ рд╕рдордп рдореЗрдВ рдХрдИ рдкрд╛рдардХ рдпрд╛ рдПрдХ рд▓реЗрдЦрдХ рдХреЛ рдПрдХ рд╕рд╛рде рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рдЭреА рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

  • рдкрдарди-рд▓реЗрдЦрди рддрд╛рд▓рд┐рдХрд╛ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░: 0x52574c4b): 196 рдмрд╛рдЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред

  • рдкрдарди-рд▓реЗрдЦрди рддрд╛рд▓рд┐рдХрд╛ рдЧреБрдг (рд╣рд╕реНрддрд╛рдХреНрд╖рд░: 0x52574c41): рдкрдарди-рд▓реЗрдЦрди рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЧреБрдг, 20 рдмрд╛рдЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред

рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдВрддрд┐рдо 4 рдмрд╛рдЗрдЯ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдзрд╛рдЧ рд╕реНрдерд╛рдирд┐рдХ рдЪрд░рд┐рддреНрд░ (TLV)

рдзрд╛рдЧ рд╕реНрдерд╛рдирд┐рдХ рдЪрд░рд┐рддреНрд░ (TLV) Mach-O рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ (macOS рдореЗрдВ рдПрдХреНрдЬреАрдХреНрдпреВрдЯреЗрдмрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк) рдмрд╣реБ-рдзрд╛рдЧреАрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рд╡рд╕реНрддреБрд╕реНрдерд┐рддрд┐ рд╣реИ, рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЗ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореНрдпреВрдЯреЗрдХреНрд╕ рдЬреИрд╕реЗ рд╕рдордХреНрд░рдордг рдпрдВрддреНрд░рд┐рдХрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рд╕реНрдкрд╖реНрдЯ рд╕рдордХреНрд░рдордг рдпрдВрддреНрд░рд┐рдХрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

C рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЖрдк __thread рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдзрд╛рдЧ рд╕реНрдерд╛рдирд┐рдХ рдЪрд░рд┐рддреНрд░ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

cCopy code__thread int tlv_var;

void main (int argc, char **argv){
tlv_var = 10;
}

рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ tlv_var рдХреЛ рдПрдХ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ tlv_var рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ tlv_var рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рджреВрд╕рд░реЗ рдереНрд░реЗрдб рдореЗрдВ tlv_var рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

Mach-O рдмрд╛рдЗрдирд░реА рдореЗрдВ, рдереНрд░реЗрдб рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рд╢реЗрд╖ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • __DATA.__thread_vars: рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░рд╛рд░рдВрднреАрдХрд░рдг рд╕реНрдерд┐рддрд┐ред

  • __DATA.__thread_bss: рдпрд╣ рдЦрдВрдб рдЙрди рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рднрд╛рдЧ рд╣реИ рдЬреЛ рд╢реВрдиреНрдп-рдкреНрд░рд╛рд░рдВрднрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Mach-O рдПрдХ рд╡рд┐рд╢реЗрд╖ API рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ tlv_atexit рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдПрдХ рдереНрд░реЗрдб рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ API рдЖрдкрдХреЛ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИтАФрд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рдереНрд░реЗрдб рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред

Python Injection

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

PYTHONPATH рдФрд░ PYTHONHOME рдЬреИрд╕реЗ рдЕрдиреНрдп рдПрдирд╡реА рдЪрд░ рднреА рдПрдХ рдкрд╛рдпрдерди рдХрдорд╛рдВрдб рдХреЛ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ pyinstaller рдХреЗ рд╕рд╛рде рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдП рдЧрдП рдПрдХреНрдЬреАрдХреНрдпреВрдЯреЗрдмрд▓реНрд╕ рдЗрди рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рднрд▓реЗ рд╣реА рд╡реЗ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВред

рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдХреЛ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░реЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдвреВрдВрдврд╛ред\ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ **Hombrew** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ **рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╕реНрдерд╛рди** рдореЗрдВ рдкрд╛рдпрдерди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╣рд╛рдЗрдЬреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: ```bash mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old cat > /opt/homebrew/bin/python3 <

рдврд╛рд▓

рдврд╛рд▓ (рдЧрд┐рдЯрд╣рдм) рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

  • рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ: рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд░реЛрдВ рдХреА рдореМрдЬреВрджрдЧреА рдХрд╛ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдЧрд╛: DYLD_INSERT_LIBRARIES, CFNETWORK_LIBRARY_PATH, RAWCAMERA_BUNDLE_PATH рдФрд░ ELECTRON_RUN_AS_NODE

  • task_for_pid рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ: рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрдм рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХрд╛рд░реНрдп рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИ рдЬрд┐рд╕рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдкреНрд╕ рдкреИрд░рд╛рдореАрдЯрд░: рдХреЛрдИ --inspect, --inspect-brk рдФрд░ --remote-debugging-port рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдк рдХреЛ рдбреАрдмрдЧрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдХреЙрд▓реНрд╕

рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди task_name_for_pid рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдПрдХ рд╣реА uid рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд░реВрдЯ (рдФрд░ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ, рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд╣реАрдВред)

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

Last updated