一、Decrypted 翻译
"Decrypted",字面意思为“解密”,指的是对已经加密的数据进行解密操作。在iOS应用的开发过程中,开发者可能会需要对应用进行加密保护,以提高应用的安全性。但是,对于需要进行逆向工程的人员,加密并不能完全避免应用信息的泄露。因此,需要通过解密对已经加密的数据进行还原,从而获取应用的源代码、配置文件等相关信息。这个过程就是“Decrypted”操作。
二、decrypt
在iOS应用的加密和解密中,最常用的操作是解密。解密的目的是将加密的数据还原为明文数据,使得应用信息可以被解析、修改等操作。通常情况下,应用的源代码会被进行加密保护。开发者需要将加密的文件解密才能查看、调试和修改。下面是一个简单的AES-128-CBC加密算法的解密代码示例:
#include<stdio.h> #include<string.h> #include<openssl/aes.h> #define BUF_SIZE 512 #define AES_BLOCK_SIZE 16 void decrypt_file(FILE *in_fp, FILE *out_fp, unsigned char *key, unsigned char *iv) { AES_KEY aes_key; unsigned char buf[BUF_SIZE]; int num_read = 0; int status = 0; unsigned char aes_input_buf[AES_BLOCK_SIZE]; unsigned char aes_output_buf[AES_BLOCK_SIZE]; int bytes_written = 0; AES_set_decrypt_key(key, 128, &aes_key); while ((num_read = fread(buf, 1, BUF_SIZE, in_fp)) > 0) { status = AES_ctr128_encrypt(buf, aes_output_buf, num_read, &aes_key, iv, aes_input_buf, &bytes_written); fwrite(aes_output_buf, 1, bytes_written, out_fp); } } int main(int argc, char **argv) { unsigned char key[] = "abcdefghijklmnopqrstuvwxyz123456"; unsigned char iv[] = "1234567890123456"; FILE *in_fp = fopen(argv[1], "rb"); FILE *out_fp = fopen(argv[2], "wb"); decrypt_file(in_fp, out_fp, key, iv); fclose(in_fp); fclose(out_fp); return 0; }
三、Decrypted iOS IPA
iOS应用程序包(IPA)文件是一种使用特定的文件格式打包并加密的软件包文件。默认情况下,Xcode会对iOS应用程序进行加密,以保护应用的代码和资源。但是,在某些情况下,我们可能需要解密应用程序,以便我们能够手动编辑或定位应用程序崩溃问题的原因。对于iOS IPA文件的解密可以通过工具进行完成,例如Clutch,dumpdecrypted等。使用Clutch解密应用程序的IPA文件,可以通过以下几个步骤进行操作:
- 通过SSH将iPhone和电脑连接。
- 在iPhone上运行Clutch 。 Clutch使用以下命令:
- 备份加密的IPA文件
- 将IPA文件拷贝到电脑上。
- 用工具解密所得到的ipa文件
ssh root@iPhone-IP-Address -p 22 cd /usr/bin/ chmod +x clutch clutch -i
cp /var/mobile/Applications/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/Clutch.app/Clutch /var/root/Clutch.app/ cd /var/root/Clutch.app/ ./Clutch -b bundleid
scp -P 22 root@iPhone-IP-Address:/var/root/Documents/Clutch/bundleid.ipa ~/Downloads/
四、description
在应用商店下载应用时,每个应用都会有一些相关的描述信息。这些信息可能包括应用的优势,应用的功能介绍,应用的历史版本等等。解密应用的相关信息对于开发者和研究人员来说都是非常有用的。在iOS应用中,这些信息通常存储在Info.plist文件中。下面是一个示例代码,展示如何从Info.plist文件中解密应用的相关描述信息:
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"]; NSString *appVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"]; NSString *appBuild = [infoDictionary objectForKey:@"CFBundleVersion"]; NSString *appIdentifier = [infoDictionary objectForKey:@"CFBundleIdentifier"]; NSString *osVersion = [[UIDevice currentDevice] systemVersion];
五、encryption
在iOS应用开发中,为了防止应用被恶意拷贝和盗用,通常需要对应用进行加密保护。在iOS应用中,通常使用的加密方式包括文件加密、数据加密等。加密可以保护应用中敏感数据的安全,避免数据泄露风险。下面是一个使用AES加密算法进行数据加密的代码示例:
+ (NSString*)AES256EncryptWithKey:(NSString*)key withData:(NSString*)data { NSData *plainData = [data dataUsingEncoding:NSUTF8StringEncoding]; size_t plainTextBufferSize = [plainData length]; const void *vplainText = [plainData bytes]; char keyPtr[kCCKeySizeAES256 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = (plainTextBufferSize + kCCBlockSizeAES128) & ~(kCCBlockSizeAES128 - 1); char *bufferPtr = NULL; bufferPtr = malloc(dataLength); char *ptr = NULL; ptr = malloc(dataLength); memset(ptr, 0, dataLength); memset(bufferPtr, 0, dataLength); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, vplainText, plainTextBufferSize, bufferPtr, dataLength, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { for (int i = 0; i < numBytesEncrypted; i++) { sprintf(ptr + strlen(ptr), "%02x", (unsigned char)bufferPtr[i]); } } return [NSString stringWithCString:ptr encoding:NSUTF8StringEncoding]; }
六、encrypted
在iOS应用中,加密不仅仅是保护应用代码和敏感数据安全的手段,还是iOS应用开发中的一项基本技能。不但需要了解加密算法,还需要掌握具体实现方式。iOS应用的加密和解密不仅仅是一种技术,也是一种思想。只有加强对iOS应用加密和解密的理解,才能更好地保护iOS应用的安全。