Created
October 7, 2015 17:54
-
-
Save DevAlloy/8fce1f9df877b621bd1a to your computer and use it in GitHub Desktop.
Инструкция как сгенерировать obfuscatedSecretKey[] из своей строки
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Как сгенерировать 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