Skip to content

Instantly share code, notes, and snippets.

@DevAlloy
Created October 7, 2015 17:54
Show Gist options
  • Save DevAlloy/8fce1f9df877b621bd1a to your computer and use it in GitHub Desktop.
Save DevAlloy/8fce1f9df877b621bd1a to your computer and use it in GitHub Desktop.
Инструкция как сгенерировать obfuscatedSecretKey[] из своей строки
// Как сгенерировать obfuscatedSecretKey[] из uuid, который мы хотим захардкодить
- (void)generateString {
/**
* @author Цыганов Станислав
*
* Шаг 1. Получаем hex-овый массив
*/
NSString *myString = @"Hello";
NSUInteger len = [myString length];
unichar *chars = malloc(len * sizeof(unichar));
[myString getCharacters:chars];
NSMutableString *hexString = [[NSMutableString alloc] init];
for(NSUInteger i = 0; i < len; i++ )
{
[hexString appendFormat:@", 0x%02x", chars[i]];
}
free(chars);
NSLog(@"%@", hexString); // , 0x48, 0x65, 0x6c, 0x6c, 0x6f
/**
* @author Цыганов Станислав
*
* Шаг 2. Получаем обфусцированный массив
* тут подставляем массив с предыдущего шага
*/
unsigned char hexSecretKey[] = {0x48, 0x65, 0x6c, 0x6c, 0x6f};
unsigned char obfuscator[CC_SHA1_DIGEST_LENGTH];
NSData *className = [NSStringFromClass([self class])
dataUsingEncoding:NSUTF8StringEncoding];
CC_SHA1(className.bytes, (CC_LONG)className.length, obfuscator);
// XOR the class name against the obfuscated key, to form the real key.
unsigned char obfuscatedSecretKey[sizeof(hexSecretKey)];
for (int i=0; i<sizeof(hexSecretKey); i++) {
obfuscatedSecretKey[i] = hexSecretKey[i] ^ obfuscator[i % sizeof(obfuscator)];
}
NSMutableString *obfuscateString = [NSMutableString new];
for (int i=0; i<sizeof(obfuscatedSecretKey); i++) {
[obfuscateString appendFormat:@", 0x%x", obfuscatedSecretKey[i]];
}
NSLog(@"%@", obfuscateString);// , 0xa, 0xd7, 0x55, 0x2f, 0x94
/**
* @author Цыганов Станислав
*
* Шаг 3(проверочный). Запускаем наш алгоритм и убеждаемся,
* что вновь получаем исходную строку
*/
unsigned char thirdStepSecretKey[] = {0xa, 0xd7, 0x55, 0x2f, 0x94};
// XOR the class name against the obfuscated key, to form the real key.
unsigned char resultSecretKey[sizeof(hexSecretKey)];
for (int i=0; i<sizeof(hexSecretKey); i++) {
resultSecretKey[i] = thirdStepSecretKey[i] ^ obfuscator[i % sizeof(obfuscator)];
}
NSString *actualString = [[NSString alloc] initWithBytes:resultSecretKey length:sizeof(thirdStepSecretKey) encoding:NSUTF8StringEncoding];
NSLog(@"%@", actualString); // Hello
/**
* @author Цыганов Станислав
*
* На каждом шаге мы забираем результат предыдущего и подставляем в качестве массива следующему
* Полученное на втором шаге(0xa, 0xd7, 0x55, 0x2f, 0x94) вставляем в код программы
*/
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment