⑴ ios http和https的區別
HTTP:明文傳輸數據,數據容易被劫持,用戶安全得不到加密。
HTTPS:加密傳輸,可以防劫持與數據傳輸加密。
⑵ iOS代碼加密的幾種方式
眾所周知的是大部分iOS代碼一般不會做加密加固,因為iOS
APP一般是通過AppStore發布的,而且蘋果的系統難以攻破,所以在iOS里做代碼加固一般是一件出力不討好的事情。萬事皆有例外,不管iOS、adr還是js,加密的目的是為了代碼的安全性,雖然現在開源暢行,但是不管個人開發者還是大廠皆有保護代碼安全的需求,所以iOS代碼加固有了生存的土壤。下面簡單介紹下iOS代碼加密的幾種方式。
iOS代碼加密的幾種方式
1.字元串加密
字元串會暴露APP的很多關鍵信息,攻擊者可以根據從界面獲取的字元串,快速找到相關邏輯的處理函數,從而進行分析破解。加密字元串可以增加攻擊者閱讀代碼的難度以及根據字元串靜態搜索的難度。
一般的處理方式是對需要加密的字元串加密,並保存加密後的數據,再在使用字元串的地方插入解密演算法。簡單的加密演算法可以把NSString轉為byte或者NSData的方式,還可以把字元串放到後端來返回,盡量少的暴露頁面信息。下面舉個簡單例子,把NSString轉為16進制的字元串:
2.符號混淆
符號混淆的中心思想是將類名、方法名、變數名替換為無意義符號,提高應用安全性;防止敏感符號被class-mp工具提取,防止IDA Pro等工具反編譯後分析業務代碼。目前市面上的IOS應用基本上是沒有使用類名方法名混淆的。
別名
在編寫代碼的時候直接用別名可能是最簡單的一種方式,也是比較管用的一種方式。因為你的app被破解後,假如很容易就能從你的類名中尋找到蛛絲馬跡,那離hook只是一步之遙,之前微信搶紅包的插件應該就是用hook的方式執行的。
b.C重寫
編寫別名的方式不是很易讀,而且也不利於後續維護,這時你可能需要升級一下你的保護方式,用C來重寫你的代碼吧。這樣把函數名隱藏在結構體中,用函數指針成員的形式存儲,編譯後,只留下了地址,去掉了名字和參數表,讓他們無從下手( from 念茜)。如下例子:
c.腳本處理
稍微高級一點的是腳本掃描處理替換代碼,因為要用到linux命令來編寫腳本,可能會有一點門檻,不過學了之後你就可以出去吹噓你全棧工程師的名頭啦。。。
linux腳本比較常用的幾個命令如下:
腳本混淆替換是用上述幾個命令掃描出來需要替換的字元串,比如方法名,類名,變數名,並做替換,如果你能熟練應用上述幾個命令,恭喜你,已經了解了腳本的一點皮毛了。
如以下腳本搜索遍歷了代碼目錄下的需要混淆的關鍵字:
替換的方式可以直接掃描文件並對文件中的所有內容替換,也可以採用define的方式定義別名。例如:
d.開源項目ios-class-guard
該項目是基於class-mp的擴展,和腳本處理類似,是用class-mp掃描出編譯後的類名、方法名、屬性名等並做替換,只是不支持隱式C方法的替換,有興趣的同學可以使用下。
3.代碼邏輯混淆
代碼邏輯混淆有以下幾個方面的含義:
對方法體進行混淆,保證源碼被逆向後該部分的代碼有很大的迷惑性,因為有一些垃圾代碼的存在;
對應用程序邏輯結構進行打亂混排,保證源碼可讀性降到最低,這很容易把破解者帶到溝里去;
它擁有和原始的代碼一樣的功能,這是最最關鍵的。
一般使用obfuscator-llvm來做代碼邏輯混淆,或許會對該開源工具做個簡單介紹。
4.加固SDK
adr中一般比較常見的加固等操作,iOS也有一些第三方提供這樣的服務,但是沒有真正使用過,不知道效果如何。
當然還有一些第三方服務的加固產品,基本上都是採用了以上一種或幾種混淆方式做的封裝,如果想要直接可以拿來使用的服務,可以採用下,常用的一些服務如下:
幾維安全
iOS加密可能市場很小,但是存在必有道理,在越獄/開源/極客的眼中,你的APP並沒有你想像的那麼安全,如果希望你的代碼更加安全,就應給iOS代碼加密。
⑶ ios 中開發中用戶信息中的加密方式有哪些
5.1 通過簡單的URLENCODE + BASE64編碼防止數據明文傳輸
5.2 對普通請求、返回數據,生成MD5校驗(MD5中加入動態密鑰),進行數據完整性(簡單防篡改,安全性較低,優點:快速)校驗。
5.3 對於重要數據,使用RSA進行數字簽名,起到防篡改作用。
5.4 對於比較敏感的數據,如用戶信息(登陸、注冊等),客戶端發送使用RSA加密,伺服器返回使用DES(AES)加密。
原因:客戶端發送之所以使用RSA加密,是因為RSA解密需要知道伺服器私鑰,而伺服器私鑰一般盜取難度較大;如果使用DES的話,可以通過破解客戶端獲取密鑰,安全性較低。而伺服器返回之所以使用DES,是因為不管使用DES還是RSA,密鑰(或私鑰)都存儲在客戶端,都存在被破解的風險,因此,需要採用動態密鑰,而RSA的密鑰生成比較復雜,不太適合動態密鑰,並且RSA速度相對較慢,所以選用DES)
把相關演算法的代碼也貼一下吧 (其實使用一些成熟的第三方庫或許會來得更加簡單,不過自己寫,自由點)。注,這里的大部分加密演算法都是參考一些現有成熟的演算法,或者直接拿來用的。
1、MD5
//因為是使用category,所以木有參數傳入啦
-(NSString *) stringFromMD5 {
if(self == nil || [self length] == 0) {
return nil;
}
const char *value = [self UTF8String];
unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(value, strlen(value), outputBuffer);
NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){
[outputString appendFormat:@"%02x",outputBuffer[count]];
}
return [outputString autorelease];
}
2、Base64
+ (NSString *) base64EncodeData: (NSData *) objData {
const unsigned char * objRawData = [objData bytes];
char * objPointer;
char * strResult;
// Get the Raw Data length and ensure we actually have data
int intLength = [objData length];
if (intLength == 0) return nil;
// Setup the String-based Result placeholder and pointer within that placeholder
strResult = (char *)calloc(((intLength + 2) / 3) * 4, sizeof(char));
objPointer = strResult;
// Iterate through everything
while (intLength > 2) { // keep going until we have less than 24 bits
*objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
*objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
*objPointer++ = _base64EncodingTable[((objRawData[1] & 0x0f) << 2) + (objRawData[2] >> 6)];
*objPointer++ = _base64EncodingTable[objRawData[2] & 0x3f];
// we just handled 3 octets (24 bits) of data
objRawData += 3;
intLength -= 3;
}
// now deal with the tail end of things
if (intLength != 0) {
*objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
if (intLength > 1) {
*objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
*objPointer++ = _base64EncodingTable[(objRawData[1] & 0x0f) << 2];
*objPointer++ = '=';
} else {
*objPointer++ = _base64EncodingTable[(objRawData[0] & 0x03) << 4];
*objPointer++ = '=';
*objPointer++ = '=';
}
}
// Terminate the string-based result
*objPointer = '\0';
NSString *rstStr = [NSString stringWithCString:strResult encoding:NSASCIIStringEncoding];
free(objPointer);
return rstStr;
}
3、AES
-(NSData*) EncryptAES: (NSString *) key {
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr, kCCBlockSizeAES128,
NULL,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}
4、RSA
- (NSData *) encryptWithData:(NSData *)content {
size_t plainLen = [content length];
if (plainLen > maxPlainLen) {
NSLog(@"content(%ld) is too long, must < %ld", plainLen, maxPlainLen);
return nil;
}
void *plain = malloc(plainLen);
[content getBytes:plain
length:plainLen];
size_t cipherLen = 128; // currently RSA key length is set to 128 bytes
void *cipher = malloc(cipherLen);
OSStatus returnCode = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, plain,
plainLen, cipher, &cipherLen);
NSData *result = nil;
if (returnCode != 0) {
NSLog(@"SecKeyEncrypt fail. Error Code: %ld", returnCode);
}
else {
result = [NSData dataWithBytes:cipher
length:cipherLen];
}
free(plain);
free(cipher);
return result;
}
⑷ 蘋果強制要求HTTPS協議了嗎
蘋果IOS要求在2017年1月1日,將強制啟用ATS。AppTransportSecurity,簡稱ATS,是蘋果在iOS9當中首次推出的一項安全功能。在啟用ATS之後,它會強制應用通過HTTPS(而不是HTTP)連接網路服務,通過HTTPS加密來保障用戶數據安全。
ATS必須滿足的條件:伺服器支持TLSv1.2協議、PFS(完全正向保密)ECDHE
伺服器操作系統版本要求(支持TLS1.2):WIN2008R2IIS7以上版本、CentOS6+OpenSSL1.0.1c+、Apache2.4+、Nginx1.0.6+、JDK1.7 、tomcat7.0.56+
IOS ATS安全、HTTPS協議,SSL證書申請:網頁鏈接
⑸ ios中fan怎麼對url加密
*你可以模仿上面的那個友情鏈接來做啊。*/ 可以將鏈接保存在資料庫中,地址中直接跟url保存的id,然後讀出來再用header()跳轉就好了。 若用BASE64來做,不要將url和那個"="都加密了,用 /redir.php?url=加密後的串。接收倒$_GET['url']後解碼,也用header(),跳轉過去就可以了。 1. /redir.php?urlid=id. 取資料庫或者其他存儲辦法。 $sql = "select urlstr from url where id = '".$_GET['id']."'"; 查到結果: header("Location:" . 查出來的結果)。 2. /redir.php?url=加密後的URL 接收, $url = $_GET['url']. header("Location:" . base64_decode($url)); 希望可以有所幫助。 既然說了數據有幾十W條,那麼應該入庫了吧? 那麼採用第一種方法要方便點。
⑹ 如何在 iOS 上強制使用 HTTPS 協議
想要使用HTTPS加密協議,需要目標網站部署了SSL證書才可以,並不是所有網站都部署了SSL證書。然後IOS平台暫時並沒有類似HTTPS
Everywhere 或者 Force SSL 那樣的 Tweaks 或者 Extensions,所以沒有自動強制的方案。
蘋果公司推出的IOS9系統,為了提升應用程序與Web服務之間的連接安全,蘋果要求所有應用程序的HTTP協議全部升級為HTTPS協議。
app,web站點等實現HTTPS加密協議,需要用到SSL證書,SSL證書需要到CA機構申請(如沃通CA),開發者可以到沃通CA申請SSL證書來實現HTTPS加密。
⑺ 微信,iOS,安卓如何配置HTTPS加密
1、確定需要HTTPS的域名,當然這個域名是獨立的,可以正常解析。
2、擁有一台獨立伺服器,通常適應的是雲伺服器(虛擬主機通常都不支持的)。
3、網站程序源碼,這個很重要不是所有源碼都支持HTTPS,不過通常主流都是支持的,不支持的也是稍微修改一下就可以了。
4、關鍵的一步HTTPS是要辦理認證的,這一點需要登陸:Gworg 獲取信任的證書,當然需要驗證的域名的,不過Gworg會指導完成驗證。
5、需要把認證好的證書安裝到獨立伺服器,這一點可以讓Gworg提供安裝文檔,當然看不懂文檔沒有關系,給錢就可以讓Gworg完成安裝了。
6、最後一步打開網頁,預覽就看到地址欄顯示HTTPS了。
⑻ app用https後還需要加密嗎
HTTPS加密只是為了讓客戶端與伺服器傳輸過程進行數據加密,不被中間劫持。
所以每種加密產品都不同的功能,如果有其它應用可以加密,那多一個肯定是更好的。
⑼ ios加密方式,常用的加密方式
被拒的原因有以下這些: 1. 條款和條件 1.1 為App Store開發程序,開發者必須遵守 Program License Agreement (PLA)、人機交互指南(HIG)以及開發者和蘋果簽訂的任何協議和合同。以下規則和示例旨在幫助開發者的程序能獲得App Store的認可
⑽ iOS開發 APP必須使用HTTPS怎麼搞
確定獨立伺服器或雲伺服器情況下,可以淘寶Gworg獲取HTTPS開發證書,安裝到伺服器就可以了,不會安裝可以叫簽發機構安裝。