Мера по борьбе с пиратством, проверка исполняемого шифрованияIOS

Программируем под IOS
Anonymous
Мера по борьбе с пиратством, проверка исполняемого шифрования

Сообщение Anonymous »

Я читал очень интересный блог о реализации антипиратской защиты в ваших приложениях. Некоторые из них больше не работают, некоторые работают. Два из них, которые все еще эффективны, - это два последних из перечисленных.
http://shmoopi.wordpress.com/2011/06/19/27/

Меня интересует самый последний. Код ниже. Я реализовал это в своем AppDelegate.m.

Антипиратство посредством проверки шифрования.

Обязательные заголовки< /p>

Код: Выделить всё

#import 
#import 
#import 
Структура шифрования

Код: Выделить всё

#if TARGET_IPHONE_SIMULATOR && !defined(LC_ENCRYPTION_INFO)
#define LC_ENCRYPTION_INFO 0x21
struct encryption_info_command
{
uint32_t cmd;
uint32_t cmdsize;
uint32_t cryptoff;
uint32_t cryptsize;
uint32_t cryptid;
};
#endif
Необходимые методы

Код: Выделить всё

int main (int argc, char *argv[]);

static BOOL is_encrypted ()
{
const struct mach_header *header;
Dl_info dlinfo;

/* Fetch the dlinfo for main() */
if (dladdr(main, &dlinfo) == 0 || dlinfo.dli_fbase == NULL)
{
NSLog(@"Could not find main() symbol (very odd)");
return NO;
}
header = dlinfo.dli_fbase;

/* Compute the image size and search for a UUID */
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)
{
return NO;
}
return YES;
}

cmd = (struct load_command *) ((uint8_t *) cmd + cmd->cmdsize);
}
return NO;
}
Этот метод проверяет, зашифрован ли двоичный файл.

Когда я запускаю это на устройстве, подключенном к x-code, это дает мне ложное срабатывание в этой строке

Код: Выделить всё

if (crypt_cmd->cryptid < 1)
{
NSLog(@"Pirated from (crypt_cmd->cryptid < 1) ");
return NO;
}
Мне интересно, возможно ли, что сборки, которые xcode помещает на устройство для целей отладки, не зашифрованы? И он шифруется только тогда, когда сборка отправляется в Apple для использования в iTunes. Вот почему я получаю это ложное срабатывание при проверке кода.

Большое спасибо,
-Code>

Подробнее здесь: https://stackoverflow.com/questions/703 ... cy-measure

Вернуться в «IOS»