国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

iOS加固保護(hù)新思路

這篇具有很好參考價(jià)值的文章主要介紹了iOS加固保護(hù)新思路。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

之前有寫過【如何給iOS APP加固】,但是經(jīng)過一段時(shí)間的思考,我找到了更具有實(shí)踐性的代碼,具體可以看下面。

技術(shù)簡(jiǎn)介

iOS加固保護(hù)是基于虛機(jī)源碼保護(hù)技術(shù),針對(duì)iOS平臺(tái)推出的下一代加固產(chǎn)品??梢詫?duì)iOS APP中的可執(zhí)行文件進(jìn)行深度混淆、加固,并使用獨(dú)創(chuàng)的虛擬機(jī)技術(shù)對(duì)代碼進(jìn)行加密保護(hù),使用任何工具都無法直接進(jìn)行逆向、破解。對(duì)APP進(jìn)行完整性保護(hù),防止應(yīng)用程序中的代碼及資源文件被惡意篡改。

技術(shù)功能

目前iOS加固主要包含邏輯混淆、字符串加密、代碼虛擬化、防調(diào)試、防篡改以及完整性保護(hù)這三大類功能。通過對(duì)下面的代碼片段進(jìn)行保護(hù)來展示各個(gè)功能的效果:

- (void) test {
	if (_flag) {
	    test_string(@"Hello, World!",@"你好,世界!","Hello, World!");
	} else {
	     dispatch_async(dispatch_get_mian_queue(), ^{
	            do_something( );
	      });
	}
	int i=0;
	while (i++ < 100) {
	       sleep(1);
	       do_something( );
	}
}

將代碼編譯后拖入IDA Pro中進(jìn)行分析,可以得到這樣的控制流圖,只有6個(gè)代碼塊,且跳轉(zhuǎn)邏輯簡(jiǎn)單,可以很容易地判斷出if-else以及while的特征:
iOS加固保護(hù)新思路

將其反編譯為偽代碼,代碼邏輯及源代碼中使用的字符串均清晰可見,與源代碼結(jié)構(gòu)基本一致,效果如下

void __cdecl -[ViewController test](ViewController *self, SEL a2)
{
   signed int v2; // w19
   __int64 v3;  //x0

   if ( self->_flag )
      sub_100006534 ( CFSTR("Hello, World!"),CFSTR("你好,世界!"), "Hello, World!" );
   else
      dispatch_async ( &_dispatch_main_q, &off_10000C308 );
   v2 = 100;
   do
   {
       v3 = sleep( 1u );
       sub_100006584( v3 );
       --v2;
    }
    while ( v2 );
}

1 代碼邏輯混淆

通過將原始代碼的控制流進(jìn)行切分、打亂、隱藏,或在函數(shù)中插入花指令來實(shí)現(xiàn)對(duì)代碼的混淆,使代碼邏輯復(fù)雜化但不影響原始代碼邏輯。

對(duì)代碼進(jìn)行邏輯混淆保護(hù)后,該函數(shù)的控制流圖會(huì)變得十分復(fù)雜,且函數(shù)中穿插了大量不會(huì)被執(zhí)行到的無用代碼塊,以及相互間的邏輯跳轉(zhuǎn),逆向分析的難度大大增強(qiáng):
iOS加固保護(hù)新思路

若開啟防反編譯功能,則控制流圖會(huì)被完全隱藏,只剩下一個(gè)代碼塊,且無法反編譯出有效代碼(如下圖所示),這對(duì)于對(duì)抗逆向分析工具來說非常有效,包括但不限于(IDA Pro, Hopper Disassembler, Binary Ninja, GHIDRA等)
iOS加固保護(hù)新思路

void __cdecl -[ViewController test](ViewController *self , SEL a2)
{
    JUMPOUT (__CS__, sub_100005A94(6LL, a2));
}

2 字符串加密

把所有靜態(tài)常量字符串(支持C/C++/OC/Swift字符串)進(jìn)行加密,運(yùn)行時(shí)解密,防止攻擊者通過字符串進(jìn)行靜態(tài)分析,猜測(cè)代碼邏輯。

對(duì)代碼中的字符串進(jìn)行加密之后,所有的字符串都被替換為加密的引用,任何反編譯手段均無法看到明文的字符串。你好,世界!,Hello, World!等字符串原本可以被輕易的反編譯出來,但保護(hù)之后已經(jīng)看不到了:

void __cdecl -[ViewController test](ViewController *self, SEL a2)
{
   __int64 v2;  //x0
   __int64 v3;  //x0
   signed int v4; // w19
   __int64 v5;  //x0

   if ( self->_flag )
   {
      v2 = sub_100008288();
      v3 = sub_10000082E8(v2);
      sub_100008228(v3);
      sub_100007FB0( &stru_100010368, &stru_10001038, &unk_100011344);
   }
   else
      dispatch_async ( &_dispatch_main_q, &off_100010308 );
   }
   v4 = 100;
   do
   {
       v5 = sleep( 1u );
       sub_100008004( v5 );
       --v4;
    }
    while ( v4 );
}

3 代碼虛擬化

將原始代碼編譯為動(dòng)態(tài)的DX-VM虛擬機(jī)指令,運(yùn)行在DX虛擬機(jī)之上,無法被反編譯回可讀的源代碼,任何工具均無法直接反編譯虛擬機(jī)指令。

采用代碼虛擬化保護(hù)后,對(duì)函數(shù)進(jìn)行反編譯將無法看到任何與原代碼相似的內(nèi)容,函數(shù)體中只有對(duì)虛擬機(jī)子系統(tǒng)的調(diào)用:

void __cdecl -[ViewController test](ViewController *self, SEL a2)
{
     SEL v2;  // x19
     __int64 v3;  //  x21

     v2 = a2;
     v3 = sub_10000C1EC;
     (( void (* )(void))sub_10000C1D8)();
     sub_10000C1D8( v3, v2);
     sub_10000C180( v3, 17LL);
}

4 防調(diào)試

防止通過調(diào)試手段分析應(yīng)用邏輯,開啟防調(diào)試功能后,App進(jìn)程可以有效地阻止各類調(diào)試器的調(diào)試行為:
iOS加固保護(hù)新思路

5 防篡改,完整性保護(hù)

防止應(yīng)用程序中的代碼及資源文件被惡意篡改,杜絕盜版或植入廣告等二次打包行為。

以上是根據(jù)頂象的加固產(chǎn)品操作指南出具的流程,如需要更詳細(xì)的說明,可以自行前往用戶中心~文章來源地址http://www.zghlxwxcb.cn/news/detail-468230.html

到了這里,關(guān)于iOS加固保護(hù)新思路的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 加固數(shù)據(jù)安全:Java助力保護(hù)Excel文件,讓數(shù)據(jù)無懈可擊

    加固數(shù)據(jù)安全:Java助力保護(hù)Excel文件,讓數(shù)據(jù)無懈可擊

    摘要:本文由葡萄城技術(shù)團(tuán)隊(duì)于CSDN原創(chuàng)并首發(fā)。轉(zhuǎn)載請(qǐng)注明出處:葡萄城官網(wǎng),葡萄城為開發(fā)者提供專業(yè)的開發(fā)工具、解決方案和服務(wù),賦能開發(fā)者。 前言 Excel文件保護(hù)是常用的一種功能,文件保護(hù)主要有三種: 添加密碼,如果沒有密碼不允許打開文件。 添加密碼,如果沒

    2024年02月07日
    瀏覽(19)
  • 【教程】iOS Swift應(yīng)用加固

    【教程】iOS Swift應(yīng)用加固

    ?? 保護(hù)您的iOS應(yīng)用免受惡意攻擊!在本篇博客中,我們將介紹如何使用HTTPCORE DES加密來加固您的應(yīng)用程序,并優(yōu)化其安全性。通過以下步驟,您可以確保您的應(yīng)用在運(yùn)行過程中不會(huì)遭受數(shù)據(jù)泄露和未授權(quán)訪問的風(fēng)險(xiǎn)。 本文將指導(dǎo)您如何通過改變編譯方式、處理靜態(tài)庫、解決

    2024年01月23日
    瀏覽(53)
  • 鐵路關(guān)基保護(hù)新規(guī)發(fā)布!鐵路軟件供應(yīng)鏈安全洞察與治理思路

    ? 更多網(wǎng)絡(luò)安全干貨內(nèi)容: 點(diǎn)此獲取 ——————— 近日,國家鐵路局發(fā)布《鐵路關(guān)鍵信息基礎(chǔ)設(shè)施安全保護(hù)管理辦法》,《辦法》第十四條提到: “運(yùn)營者應(yīng)當(dāng)加強(qiáng) 鐵路關(guān)鍵信息基礎(chǔ)設(shè)施供應(yīng)鏈安全保護(hù) , 優(yōu)先 采購安全可信的網(wǎng)絡(luò)產(chǎn)品和服務(wù) 。運(yùn)營者采購網(wǎng)絡(luò)產(chǎn)品和

    2024年01月25日
    瀏覽(27)
  • pycharm如何查看之前的運(yùn)行結(jié)果

    pycharm如何查看之前的運(yùn)行結(jié)果

    誰能懂用pycharm跑了一夜的代碼,早上起來,電腦突然關(guān)機(jī)了?。。。。。。。。?!氣死我了?。。?! 不過正是因?yàn)橛龅降囊粋€(gè)又一個(gè)的問題,才能探索未知的東西,就比如昨天某位小李同學(xué),讓我做PPT的放大鏡效果,嘿,這學(xué)習(xí)機(jī)會(huì)不就來了嗎,貴賓們是否也想知道放大鏡

    2024年02月02日
    瀏覽(18)
  • 運(yùn)行配置停止之前未連接應(yīng)用程序服務(wù)器, 原因: java.io.1OException:Failed to retrieve RMIServer stub:javax.naming. ServiceU

    運(yùn)行配置停止之前未連接應(yīng)用程序服務(wù)器, 原因: java.io.1OException:Failed to retrieve RMIServer stub:javax.naming. ServiceU

    直接修改JMX端口可以直接解決 win+r輸入cmd,然后輸入 netstat -aon|findstr 1099 回車 輸入 taskkill -f -pid 18280 這里的18280換成你查詢的,然后就成功終止了在1099上的進(jìn)程。打開tomcat就會(huì)成功。

    2024年02月06日
    瀏覽(20)
  • git如何回滾,返回到之前的記錄

    git如何回滾,返回到之前的記錄

    連續(xù)提交四次,注意每次commit都要加備注 2.1測(cè)試,回滾到第二次提交 2.1.1首先使用git log命令查看commit記錄 使用git reset --hard commitID git reset --hard 4ba182e 這里commitID可以只寫一部分 2.1.2查看結(jié)果. 可以發(fā)現(xiàn)已經(jīng)回滾到第二版。 2.1.3回滾結(jié)果提交到遠(yuǎn)程 以上操作只是在自己的本地倉

    2024年01月16日
    瀏覽(68)
  • Visual Studio如何打開之前已有項(xiàng)目(超詳細(xì))

    Visual Studio如何打開之前已有項(xiàng)目(超詳細(xì))

    目錄 一.第一步 ?二.第二步 1.打開單個(gè)項(xiàng)目 ?2.打開多個(gè)項(xiàng)目 請(qǐng)大家多多支持,一起加油呀!? 點(diǎn)擊文件——打開 分兩種情況: 點(diǎn)擊上圖數(shù)字1所示項(xiàng)目/解決方案,找到自己保存項(xiàng)目的文件夾 ?點(diǎn)擊進(jìn)入,找到自己要打開的項(xiàng)目文件 點(diǎn)擊進(jìn)入,找到.sln文件打開即可 ? 點(diǎn)擊第

    2024年02月05日
    瀏覽(30)
  • 如何在上架App之前設(shè)置證書并上傳應(yīng)用

    如何在上架App之前設(shè)置證書并上傳應(yīng)用

    在上架App之前想要進(jìn)行真機(jī)測(cè)試的同學(xué),請(qǐng)查看《iOS- 最全的真機(jī)測(cè)試教程》,里面包含如何讓多臺(tái)電腦同時(shí)上架App和真機(jī)調(diào)試。 P12文件的使用詳解 注意: 同樣可以在Build Setting 的sign中設(shè)置證書,但是有點(diǎn)麻煩,建議就在General中設(shè)置證書,比較方便,還可以查看錯(cuò)誤的地方

    2024年02月07日
    瀏覽(17)
  • git提交后如何回退到之前的版本

    如果我們已經(jīng)使用git commit把代碼提交 并且推送到了遠(yuǎn)程倉庫中,那么使用幾下幾個(gè)命令可以 回退到指定版本 1 git log 使用這個(gè)命令查看提交的記錄 這個(gè)時(shí)候會(huì)出現(xiàn)好幾次的提交記錄 每次后面都有如上的commit 編號(hào) 我們想回退到哪個(gè)版本 就把當(dāng)前的commit編號(hào)復(fù)制 然后使用如

    2024年02月11日
    瀏覽(38)
  • 【Docker】如何查看之前docker run命令啟動(dòng)的參數(shù)

    【Docker】如何查看之前docker run命令啟動(dòng)的參數(shù)

    個(gè)人主頁 :金鱗踏雨 個(gè)人簡(jiǎn)介 :大家好,我是 金鱗 ,一個(gè)初出茅廬的Java小白 目前狀況 :22屆普通本科畢業(yè)生,幾經(jīng)波折了,現(xiàn)在任職于一家國內(nèi)大型知名日化公司,從事Java開發(fā)工作 我的博客 :這里是CSDN,是我學(xué)習(xí)技術(shù),總結(jié)知識(shí)的地方。希望和各位大佬交流,共同進(jìn)

    2024年02月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包