一、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應用的安全。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271780.html
微信掃一掃
支付寶掃一掃