app 安全和ios及安卓馬甲包代碼混淆的demo的手把手教你的詳細(xì)教程

Security-And-CodeConfuse(安全與編譯碼器)

App Security And CodeConfuse (app 安全和代碼混淆的demo的手把手教你的詳細(xì)教程)

本篇文章內(nèi)容

  • 一)為什么要進(jìn)行代碼混淆
  • 二)代碼混淆的兩種方法(①宏替換 ②腳本實(shí)現(xiàn)替換)
  • 三)代碼混淆參考的博客及說(shuō)明

1為什么要進(jìn)行代碼混淆?

iOS 的任何app都可以使用classdump對(duì)原程序進(jìn)行dump,可以dump出所有源程序的函數(shù)所有信息:源程序所有函數(shù)類型,變量全部泄露及現(xiàn)在2018年ios新規(guī)狡逢,想要上架章姓,其中一個(gè)必要的小技巧就是要做混淆,不管你是金融,棋牌,彩票,菠菜或者其他正規(guī)套殼馬甲包都是一樣的酷师,除了隱藏便于ios或者安卓應(yīng)用市場(chǎng)上架審核方面另一個(gè)就是安全I醋ⅰH狸棍!這樣的話身害,讓攻擊者,也就是黑客們了解了程序結(jié)構(gòu)方便逆向草戈。因?yàn)樵诠こ讨兴欤覀冞@些變量或函數(shù)命名都是有一定可讀性的,例如跟用戶名相關(guān)的唐片,那一般里面會(huì)有 userName丙猬,跟密碼相關(guān)的一般會(huì)有 passWord,這樣定義也是為了我們自己代碼可讀性更強(qiáng)费韭,我們修改的時(shí)候才更加的方便茧球。但是我們相信,這么個(gè)定義法星持,我們只是希望方便我們自己抢埋,我們可不希望方便黑客們?nèi)テ平馕覀兊腁PP。 如果我們把自己的程序打包為ipa 使用class-dump ,dump出程序的所有頭文件可以看到所有的頭文件,打開頭文件就可以看到所有的變量和函數(shù)了:

image.png

代碼沒混淆反編譯結(jié)果,.h文件中函數(shù)如下圖所示

image.png

代碼混淆反編譯結(jié)果,.h文件中函數(shù)如下圖所示

image.png

也許你會(huì)問(wèn),對(duì)微信和支付寶看看他們的頭文件可不可以呢?當(dāng)然也是可以的,具體怎么做 參考我的這篇博客iOS 逆向?qū)С鯽pp的頭文件(逆向工程書籍補(bǔ)充),當(dāng)然你也可以找更好的博客,看看微信的iOS開發(fā)人員函數(shù)命名是否規(guī)范,我看過(guò),少數(shù)也是不規(guī)范的,大部分還是比較規(guī)范的! 為了阻止別人使用逆向工程修改我們的代碼需要做反編譯,微信的代碼很多是沒有反編譯的钉汗。反向工程會(huì)帶來(lái)許多問(wèn)題羹令,諸如知識(shí)產(chǎn)權(quán)泄露,程序弱點(diǎn)暴露易受攻擊等损痰。 很多人實(shí)現(xiàn)用Hopper搞定Mac迅雷的會(huì)員以及離線下載功能等等逆向工程,這些逆向之所以成功,是因?yàn)檫@些微信和迅雷的實(shí)現(xiàn)這些功能的核心代碼沒有進(jìn)行代碼混淆,如果進(jìn)行了代碼混淆,即使逆向了,找不到實(shí)現(xiàn)功能的函數(shù),無(wú)法修改這些函數(shù),就無(wú)法實(shí)現(xiàn)用Hopper搞定Mac迅雷的會(huì)員以及離線下載功能了福侈。

為什么做混淆 ?還有更重要的原因:某一天某安全公司給你發(fā)一份安全測(cè)試報(bào)告,你的代碼沒做混淆(當(dāng)然不只這一個(gè)風(fēng)險(xiǎn)),存在安全風(fēng)險(xiǎn),boss 聽說(shuō)有風(fēng)險(xiǎn)肯定讓你解決這個(gè)問(wèn)題啊,我們公司就是這樣的情況,我才做的的代碼混淆的!! 如何進(jìn)行代碼混淆,經(jīng)過(guò)我查閱資料,發(fā)現(xiàn)有兩種方法,一種簡(jiǎn)單較low,一種復(fù)雜點(diǎn)檔次高點(diǎn)!

下面介紹代碼混淆的兩種方法

2代碼混淆的兩種方法

2.1簡(jiǎn)單的宏替換(很簡(jiǎn)單也有一點(diǎn)點(diǎn)low)

2.1.1 打開項(xiàng)目新建ConfuseReplace.h 文件,把需要替換的函數(shù)名使用#define就可以(本方法其實(shí)可以用這一句就可以說(shuō)完的)

#ifndef ConfuseReplace_h
#define ConfuseReplace_h]

#define sample        XZwTFgszVxFieZta
#define seg1        mviuwjseJZYYamwu
#define zheshi     uNCrcYEobhpPGLuf
#define xxxxxx     achfhhffhhfh

#endif /* ConfuseReplace_h */

2.1.2 controller.h文件中

@interface ViewController : UIViewController

-(void)sample;
-(void)seg1:(NSString *)string seg2:(NSUInteger)num;
-(void)zheshi:(NSString *)string seg2:(NSUInteger)num;

- (void)xxxxxx;

@end

controller.m文件中

-(void)sample{  
}

-(void)seg1:(NSString *)string seg2:(NSUInteger)num{
}
-(void)zheshi:(NSString *)string seg2:(NSUInteger)num{

}
- (void)xxxxxx{ 
}

上面已經(jīng)搞定了代碼混淆,就是這么簡(jiǎn)單.每個(gè)函數(shù)名的串都是宏定義好的,也許有人會(huì)問(wèn),人家拿到了ConfuseReplace.h文件,那這么替換豈不是白搭,人家知道那個(gè)函數(shù)名和那個(gè)字符串對(duì)應(yīng)啊,經(jīng)筆者親自驗(yàn)證,宏定義的字符串使用class-dump 是dump 不出來(lái)的,所以我們就放心的用

我們使用代碼混淆讓別人使用class-dump 反編譯出我們的方法名是亂碼,達(dá)到混淆的目的,混淆之后黑客使用class-dump 出你的頭文件不知道你這個(gè)函數(shù)是做什么,就不能修改你的功能 ,使用這種混淆方法class-dump 后的頭文件如下, 使用class-dump需要先安裝class-dump,有如何安裝class-dump和使用class-dump 導(dǎo)出.h文件的過(guò)程如下圖所示

image.png

查看導(dǎo)出的頭文件

image.png
- (void)XZwTFgszVxFieZta;
- (void)achfhhffhhfh;
- (void)didReceiveMemoryWarning;
- (void)mviuwjseJZYYamwu:(id)arg1 seg2:(unsigned long long)arg2;
- (void)uNCrcYEobhpPGLuf:(id)arg1 seg2:(unsigned long long)arg2;

這種方法的demo其實(shí)說(shuō)這么多大家看一下Demo秒懂,唯一的難點(diǎn)是需要學(xué)習(xí)下class-dump導(dǎo)出頭文件來(lái)驗(yàn)證是否混淆成功!教程都給你鏈接了,學(xué)不學(xué)就看你啦!

2.2使用腳本替換方法名(很簡(jiǎn)單也有一點(diǎn)點(diǎn)low) 第一、新建一個(gè)工程,在工程項(xiàng)目路徑中建立一個(gè)confuse.sh卢未、一個(gè)func.list文件先打開終端肪凛,然后 cd 到你的項(xiàng)目工程路徑下:

image.png

cd 到項(xiàng)目工程路徑下然后創(chuàng)建兩個(gè)文件,一個(gè) confuse.sh辽社,一個(gè) func.list:

image.png

注意點(diǎn),不按照下面兩個(gè)操作,運(yùn)行腳本會(huì)報(bào)錯(cuò):

image.png
image.png

創(chuàng)建兩個(gè)文件這時(shí)候我們打開這個(gè)工程文件夾伟墙,可以看到,這兩個(gè)文件已經(jīng)創(chuàng)建好了:

image.png

我們創(chuàng)建的兩個(gè)文件打開工程滴铅,把剛才創(chuàng)建的兩個(gè)文件加進(jìn)去戳葵,右鍵你的項(xiàng)目藍(lán)色標(biāo)志,然后選擇 Add Files to...:

image.png

添加到工程中

添加進(jìn)去了:

image.png

成功添加點(diǎn)擊 confuse.sh(confuse.sh,和func.list必須添加到NSUTest目錄下)發(fā)現(xiàn)還是空白的汉匙,什么都沒有拱烁,現(xiàn)在要在這上面加上代碼了:

image.png

需要添加的代碼原腳本代碼出自:http://blog.csdn.net/yiyaaixuexi/article/details/29201699
第二生蚁、在 .pch 文件中添加代碼不要跟我說(shuō)你的工程沒有 .pch 文件,如果真沒有戏自,自行百度邦投,這應(yīng)該算是標(biāo)配,常識(shí)來(lái)的擅笔。

 #ifdef __OBJC__  #import <UIKit/UIKit.h> 
 #import <Foundation/Foundation.h>  
//添加混淆作用的頭文件(這個(gè)文件名是腳本confuse.sh中定義的) 
 #import "codeObfuscation.h" #endif</pre>

寫到這里志衣,編譯的時(shí)候是不是發(fā)現(xiàn)報(bào)錯(cuò)啦?剛才的 .pch 文件里面的添加的代碼居然報(bào)錯(cuò)了:

image.png

報(bào)錯(cuò)了猛们!不要慌念脯,先把那句報(bào)錯(cuò)的先給注釋掉:

image.png

先注釋掉報(bào)錯(cuò)的這一行代碼然后我們繼續(xù)往下走! 第三阅懦、配置 Build Phase1:添加 Run Script

image.png

添加 Run Script

2:配置好 Run Script

image.png

配置好 Run Script然后再回到終端和二,同樣先 cd 到工程目錄下,接著我們要打開剛才 .sh 這個(gè)腳本文件的運(yùn)行權(quán)限耳胎,因?yàn)槟J(rèn)是沒有這個(gè)權(quán)限的,在終端輸入以下指令:

image.png

打開運(yùn)行權(quán)限回車惕它,搞定怕午,回到我們的工程,先 command + b 編譯一下工程淹魄,然后再把我們剛剛注釋掉的那句代碼解開:

image.png

打開剛剛被我們注釋掉的代碼再次 command + b 編譯郁惜,現(xiàn)在是不是編譯通過(guò)啦?剛剛報(bào)錯(cuò)的甲锡,現(xiàn)在解決了兆蕉! 基本上就搞定了,剩下的就是添加上我們想要混淆的變量名或函數(shù)名 第四缤沦、在 func.list 文件里虎韵,寫入待混淆的函數(shù)名如果像下面這幾個(gè)屬性跟函數(shù):

image.png

需要混淆的屬性跟函數(shù)名那么就這在 fun.list 就這么列出來(lái)就好了:

image.png

列出需要混淆的,大功告成!現(xiàn)在 command + b 運(yùn)行一下缸废,然后在哪里看結(jié)果呢包蓝,請(qǐng)看這里:

image.png

運(yùn)行結(jié)果可能這么看有點(diǎn)麻煩,那來(lái)個(gè)簡(jiǎn)單一點(diǎn)的:

image.png

查看哈哈企量,你會(huì)發(fā)現(xiàn)测萎,多了好多宏定義,其實(shí)就是我們剛才的字段來(lái)的:

image.png

結(jié)果當(dāng)然届巩,這也只是最簡(jiǎn)單的代碼混淆而已硅瞧,APP安全還是有很多需要注意的。一步一步來(lái)吧恕汇!
最后需要說(shuō)明,出現(xiàn)下圖所示的這里并不一定說(shuō)明代碼混淆成功,只能說(shuō)明你的腳本運(yùn)行成功,.pch文件中一定要導(dǎo)入#import "codeObfuscation.h"最好對(duì)自己混淆的代碼 打包成ipa進(jìn)行dump,查看你混淆的頭文件的函數(shù)名是不是隨機(jī)的字符串了.

image.png

image.png

github地址和Demo中的各個(gè)文件夾用途說(shuō)明

image.png

對(duì)上圖中的各個(gè)文件夾說(shuō)明如下:

  • class dump header of confuseDemo: 里面放的是對(duì)confuseDemo(進(jìn)行了混淆)打包為ipa,再執(zhí)行class-dump,dump 出來(lái)的所有的頭文件
  • class dump header of Demo2 confuse success 里面放的是對(duì)Demo2(進(jìn)行了混淆)打包為ipa,再執(zhí)行class-dump,dump 出來(lái)的所有的頭文件
  • class dump header of Demo2 not confuse success 里面放的是對(duì)Demo2(沒有進(jìn)行混淆)打包為ipa,再執(zhí)行class-dump,dump 出來(lái)的所有的頭文件
  • confuseDemo 使用宏定義替換的demo,直接參考,移植到自己的工程就行
  • confuseDemo ipa 對(duì)confuseDemo 打包為ipa了,你可以使用里面的confuseDemo.app文件進(jìn)行class-dump
  • Demo2 使用腳本進(jìn)行代碼混淆的demo ,你可以參考,移植到自己的工程中

以上文章轉(zhuǎn)自jiang chen查看原文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腕唧,一起剝皮案震驚了整個(gè)濱河市冒嫡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌四苇,老刑警劉巖孝凌,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異月腋,居然都是意外死亡蟀架,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門榆骚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)片拍,“玉大人,你說(shuō)我怎么就攤上這事妓肢“剖。” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵碉钠,是天一觀的道長(zhǎng)纲缓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)喊废,這世上最難降的妖魔是什么祝高? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮污筷,結(jié)果婚禮上工闺,老公的妹妹穿的比我還像新娘。我一直安慰自己瓣蛀,他們只是感情好陆蟆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惋增,像睡著了一般叠殷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上器腋,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天溪猿,我揣著相機(jī)與錄音,去河邊找鬼纫塌。 笑死诊县,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的措左。 我是一名探鬼主播依痊,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了胸嘁?” 一聲冷哼從身側(cè)響起瓶摆,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎性宏,沒想到半個(gè)月后群井,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毫胜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年书斜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酵使。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荐吉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出口渔,到底是詐尸還是另有隱情样屠,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布缺脉,位于F島的核電站痪欲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏枪向。R本人自食惡果不足惜勤揩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秘蛔。 院中可真熱鬧,春花似錦傍衡、人聲如沸深员。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)倦畅。三九已至,卻和暖如春绣的,著一層夾襖步出監(jiān)牢的瞬間叠赐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工屡江, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芭概,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓惩嘉,卻偏偏與公主長(zhǎng)得像罢洲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子文黎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容