рдкрд╛рдпрд░реЗрд╕реА рд╕реЗ рдмрдЪрд╛рд╡ рдХрд╛ рдХрд╛рд░рдЧрд░ рддрд░реАрдХрд╛

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

рдЖрд╕рд╛рди рдкреИрд╕реЗ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ Apple рдиреЗ рдЖрдкрдХреА рдФрд░ рд╣рдорд╛рд░реА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрджрдо рдЙрдард╛рдП рд╣реИрдВред рдЗрд╕ DRM рдХреЛ рдлреЗрдпрд░рдкреНрд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░реНрдг рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдХрд┐ рдРрдкреНрдкрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рд╣реИ, рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдФрд░ рдЕрдирдзрд┐рдХреГрдд рдирдХрд▓ рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рд┐рд╕реНрдЯрдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрд╕ рдХреНрд╖рдг рддрдХ рдЬрдм рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди iDevice рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ, рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдкрдЯрд╛рдЦрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рддреА рд╣реИред рд╕реНрдореГрддрд┐ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ, рдкрдЯрд╛рдЦрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдиреА рдЫрд╡рд┐ рдХреЛ рдбрдВрдк рдХрд░ рджреЗрдЧреАред

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ gdb рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
break main #       command 1 #     ,      output.bin dump memory output.bin 0x2000 cryptsize # cryptsize   otool -l   LC_ENCRYPTION_INFO kill quit end start 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо mach-o рдФрд░ Info.plist рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдореЗрдВ рдХреБрдЫ рд╕реЗрд╡рд╛ рдлрд╝реАрд▓реНрдб рдмрджрд▓рддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдм рд╣реИред рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдореБрдлреНрдд рддреИрд░рд╛рдХреА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдЕрдкреНрд░рд┐рдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд░реИрдХреБрд▓рд╕ рдЬреИрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рд╕рд╛рде, рдХреЛрдИ рднреА рдЫрд╛рддреНрд░ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рднреАред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдорд╛рдорд▓реЛрдВ рдХреА рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╡рд┐рдХрд╛рд╕ рд╕рдореБрджрд╛рдп рдХреЛ рдЙрджрд╛рд╕реАрди рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреА рд╣реИред рдЖрдк рдПрдХ рджрд░реНрдЬрди рдлреИрд╕рд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ Google рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдХреВрд▓реА рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдП рдкрдЯрд╛рдЦрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рд╣рд╛рдп рд╣реИрдВред рдХреНрдпреЛрдВ? рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЪреЗрдХреЛрдВ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдВрдбрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдФрд░ Info.plist рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп, рдпрд╛ Info.plist рдХрд╛ рдЖрдХрд╛рд░ рд╕рдВрджрд░реНрдн рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ _CodeSignature рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИред рдЬреИрд╕реЗ рдХрд┐ ios рдРрдк, рдЗрди рд╕рднреА рдЪреЗрдХреЛрдВ рдХреЛ ObjC рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдмреЗрд╣рддрд░ред рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ? рдЖрдк рдЬреЛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ рд╣реИред рдпрд╣ рдмрд╛рдЗрдирд░реА рдХреЛ рдЖрдИрдбреАрдП рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдХреМрди рдФрд░ рдХрд╣рд╛рдВ рдЗрди рд╕рднреА NSBundle, NSDate рдФрд░ NSFileSize рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред тАЬрджреБрд░реНрдЬреЗрдптАЭ рдХреНрд░реИрдХ рдбрд┐рдЯреЗрдХреНрдЯреЗрдб рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрджрд┐ред рдЪреЗрдХ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрдЯрд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП 1-2 рдмрд╛рдЗрдЯреНрд╕ рдмрджрд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдЪреЗрдХ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдореВрд▓реНрдп рд▓реМрдЯрд╛рдПред

рдЗрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреНрд╡рд╛рд░рд╛ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдУрдмреАрдЬреАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рддреЛ, рд╣рдореЗрдВ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╢реБрджреНрдз рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд┐рдирд╛ рд╡рд░реНрдЧреЛрдВ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдПред рдпрд╣рд╛рдБ Google рдиреЗ рдореБрдЭреЗ рдЬреЛ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рд╡рд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:
 #import <mach-o/dyld.h> #define LC_ENCRYPTION_INFO 0x21 struct encryption_info_command { uint32_t cmd; uint32_t cmdsize; uint32_t cryptoff; uint32_t cryptsize; uint32_t cryptid; }; static BOOL is_encrypted () { //         dladdr(main, &dlinfo),   iphone  , //  ,       dl- struct mach_header *header = 0x1000; struct load_command *cmd = (struct load_command *) (header+1); for (uint32_t i = 0; cmd != NULL && i < header->ncmds; i++) { /* Encryption info segment */ if (cmd->cmd == LC_ENCRYPTION_INFO) { struct encryption_info_command *crypt_cmd = (struct encryption_info_command *) cmd; /* Check if binary encryption is enabled */ if (crypt_cmd->cryptid < 1) { /* Disabled, probably pirated */ return NO; } /* Probably not pirated? */ return YES; } cmd = (struct load_command *) ((uint8_t *) cmd + cmd->cmdsize); } /* Encryption info not found */ return NO; } 

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

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЬрдирддрд╛ рдореЗрдВ рд╕рднреА рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдХреЗрд╡рд▓ рдирд┐рдЬреАрдХрд░рдг


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреНрд╡рд╛рд░рд╛ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдЬреЗрд▓рдмреЛрди рдХреЗ рддрд╣рдд рдЕрдкрдиреЗ рдЬреЗрд▓рдмреНрд░реЗрдХ рдлреЛрди рдкрд░ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдореЛрдбрд╝-рджрд░-рдореЛрдбрд╝ рдореЛрдб рдореЗрдВ, рд╡рд╣ рд░рд┐рдХреЙрд░реНрдб рд╕рдордп рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд┐рд╕реА рднреА рдмрдЪрд╛рд╡ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛!
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Apple рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЗрдЦрдг рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 ptrace(PT_DENY_ATTACH, 0, 0, 0); 

рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рднреА рдкреНрд░рдпрд╛рд╕ "рдкрд╡рд┐рддреНрд░ рдкрд░ рдЕрддрд┐рдХреНрд░рдордг," рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛ред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдореЛрд░реНрдЪреЗ рдкрд░ рд╣рдордиреЗ рдкреВрд░реНрдг рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдЬреАрдд рд╣рд╛рд╕рд┐рд▓ рдХреА!
рд▓реЗрдХрд┐рди рдЖрдирдиреНрджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдордд рдХрд░реЛ, рдХреНрдпреЛрдВрдХрд┐ ptrace рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдЖрд╡рд░рдг, рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдирд╣реАрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рдФрд░ рдмреЗрдЕрд╕рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
 break ptrace #    ptrace commands 1 return #     ,      continue end run 

рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдлреИрдВрд╕реА рдЖрдкреА рдХреЛ рдордирд╛ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░реЗрдВ!
рдЕрдиреБрдпрд╛рдпреА C рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 #include <sys/syscall.h> syscall(SYS_ptrace, PT_DENY_ATTACH, 0, 0, 0); 

рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, syscall рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк ptrace рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдирд┐рдЬреА рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рд╕реЗрдВрд╕рд░ рдЗрд╕рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдорд┐рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛, рд╕реАрдзреЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ:
 asm { mov r0, #31 // PT_DENY_ATTACH mov r1, #0 mov r2, #0 mov r3, #0 mov ip, #26 // SYS_ptrace svc #0x80 //    } 

рд▓реЗрдХрд┐рди рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмреЗрдЕрд╕рд░ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ 5-10 рдРрд╕реЗ рдХреЙрд▓ рд╣реЛрдВ рдФрд░ рд╡реЗ рдкреВрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реЛрдВред

рд╣рдорд╛рд░реА рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдореБрдХреБрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреА рдЬрд╛рдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╣рдореЗрдВ рдХреЛрдб (__text) рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЪреЗрдХрд╕рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдПрдХ рдмрд╛рдЗрдЯ рдмрджрд▓рдиреЗ рд╕реЗ, рдЪреЗрдХрд╕рдо рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдВрдЧреЗ! рдЪреВрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рд╣рдо рдкрдЯрд╛рдЦреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкрдврд╝реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВрдЧреЗред рдСрдлрд╕реЗрдЯ рдФрд░ рд▓рдВрдмрд╛рдИ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 otool -l myPrecious.app/binary ... Section sectname __text segname __TEXT addr 0x00002000 size 0x00096980 offset 4096 align 2^2 (4) reloff 0 nreloc 0 flags 0x80000400 reserved1 0 reserved2 0 ... 

рдЬрд┐рд╕ рдХреЛрдб рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рд╡рд╣ 0x2000 рдХреЗ рдкрддреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рд▓рдВрдмрд╛рдИ рдХреНрд░рдорд╢рдГ 0x96980 рд╣реИред
рдЗрд╕ рдЬрд╛рдБрдЪ рдХрд╛ рдЦрд╛рдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
 __attribute__((always_inline)) void my_secret_checksum() { u_char *buf = 0x2000; u_int res; for (int i = 0; i < 0x96980; i++) { res += buf[i] ..... //    crc/adler   } if (res != ...) { // Achtung! Partizanen! } } 

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

рдЕрдВрддрднрд╛рд╖рдг


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

рд╕рд╛рд╣рд┐рддреНрдп


рдкреИрдЪрд┐рдВрдЧ Iphone рдПрдкреНрд▓реАрдХреЗрд╢рди рдкрд░ рдЬреАрд╡рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

Source: https://habr.com/ru/post/In127875/


All Articles