Мера по борьбе с пиратством, проверка исполняемого шифрования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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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