代碼混淆實(shí)踐


這張圖是反編譯后的代碼微峰,圖上可以看到類名和方法名清楚的很,這會(huì)為破解者提供很清晰的流程和思路抒钱,找到相應(yīng)的代碼做些什么蜓肆。
代碼混淆的好處:
1、增加安全性谋币,防破解仗扬,防泄漏,通過(guò)反編譯工具不再能看到代碼裸奔
2蕾额、審核,降低代碼的一致性早芭,遇到的的自然懂
這是兩個(gè)最基本的實(shí)用點(diǎn),本文將從類名混淆這一個(gè)維度講述一些心得凡简,并提供相應(yīng)的混淆工具逼友,混淆中需要做的事情還很多,希望起到拋磚引玉秤涩。
注:1帜乞、本文混淆使用的工具是python腳本,依賴python3環(huán)境筐眷,python環(huán)境為3.7.1黎烈。
2、如果不想了解其中邏輯匀谣,可直接下載腳本照棋,依次執(zhí)行完成后,重新運(yùn)行項(xiàng)目檢查是否順利編譯和運(yùn)行武翎。安裝完python環(huán)境后再命令行輸入python 空格 腳本文件路徑即可執(zhí)行烈炭,例:

python3    /Users/mac/pythonscript.py

3、腳本倉(cāng)庫(kù):https://github.com/360fengdai/obscure_oc.git
4宝恶、腳本實(shí)現(xiàn)語(yǔ)言是Python符隙,混淆測(cè)試代碼是Object-C的類名趴捅,其他語(yǔ)言也是如法炮制,無(wú)有不能用
歡迎提出建議霹疫,共同進(jìn)步拱绑。

核心思路:
第一步:搜索目標(biāo)字符串:

1、最好的方式就是正則表達(dá)式丽蝎,匹配類名生成的地方猎拨,因?yàn)榇藭r(shí)特征比較明顯,例如oc中聲明類@interface ClassA屠阻,@interface在類名前邊就是它的特征红省,由此生成正則表達(dá)式即可,暫時(shí)也沒(méi)有找到更好的方式栏笆。遍歷工程目錄下文件.h和.m文件类腮,指定一些過(guò)濾文件,例如靜態(tài)庫(kù)對(duì)應(yīng)的頭文件蛉加,這種頭文件中聲明的類在.a文件中使用到了,.a文件已不能更改缸逃,所有需要過(guò)濾针饥,再例如framework中的.h中聲明的類,通過(guò)正則表達(dá)式提取出類名需频,生成需要混淆的類名列表
2丁眼、遍歷系統(tǒng)方法庫(kù),掃描系統(tǒng)類名列表昭殉,系統(tǒng)framework默認(rèn)路徑為/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks苞七,遍歷framework下的.h文件執(zhí)行第1步邏輯,提取類名挪丢,生成系統(tǒng)系統(tǒng)類名列表蹂风,生成后可存文件緩存,避免每次都遍歷系統(tǒng)方法庫(kù)乾蓬,腳本庫(kù)中也提供了遍歷系統(tǒng)類名的腳本供參考惠啄。
3、第1步中生成的類名列表任内,刪除其中的系統(tǒng)類名撵渡,注意不能遍歷到就立即刪除,for循環(huán)是迭代器死嗦,立即刪除后可能會(huì)導(dǎo)致內(nèi)存地址變更趋距,之后的for循環(huán)出錯(cuò)或者crash,先用緩存數(shù)組存儲(chǔ)待刪除的索引越除,再按索引大小從大到小排序逆向刪除节腐。
到此即得到了待混淆的目標(biāo)字符串?dāng)?shù)組

第二步:

生成混淆映射表:
待混淆的字符串為key外盯,生成一個(gè)隨機(jī)字符串為value,即混淆后的值铜跑,由此生成映射表即可
{'ClassA':'abcdefg'门怪,'ClassB':'ABCDEFG'...}

第三步 :

使用第二步生成的映射表,遍歷所有目標(biāo)類型文件锅纺,替換所有key為混淆后的value掷空,例如之前的所有使用到類名為ClassA的地方都替換成abcdefg
此步還是不太好做的,需要精確匹配確實(shí)是類名的地方囤锉,還要不匹配例如xxClassAxx這種帶ClassA的字符串坦弟,目前我的做法是匹配類名前后一個(gè)或者多個(gè)字符,因?yàn)轭惷昂蟮淖址厥翘囟ǖ哪承┕俚兀鏾c使用類名生成對(duì)象時(shí)酿傍,

[[ClassA alloc] init]

ClassA前邊需要是[,后邊需要是空格驱入。這就精準(zhǔn)匹配了此種情況的所有類名赤炒,還有其他一些有限的引用方式,如法即可亏较。
腳本做混淆莺褒,沒(méi)有完美的腳本,不同語(yǔ)言的項(xiàng)目需要匹配的規(guī)則都不大一致雪情,但核心思路都一致遵岩,能做出適用自己項(xiàng)目的就可以了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巡通,一起剝皮案震驚了整個(gè)濱河市尘执,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宴凉,老刑警劉巖誊锭,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異跪解,居然都是意外死亡炉旷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門叉讥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窘行,“玉大人,你說(shuō)我怎么就攤上這事图仓」蘅” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵救崔,是天一觀的道長(zhǎng)惶看。 經(jīng)常有香客問(wèn)我捏顺,道長(zhǎng),這世上最難降的妖魔是什么纬黎? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任幅骄,我火速辦了婚禮,結(jié)果婚禮上本今,老公的妹妹穿的比我還像新娘拆座。我一直安慰自己,他們只是感情好冠息,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布挪凑。 她就那樣靜靜地躺著,像睡著了一般逛艰。 火紅的嫁衣襯著肌膚如雪躏碳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天散怖,我揣著相機(jī)與錄音菇绵,去河邊找鬼。 笑死镇眷,一個(gè)胖子當(dāng)著我的面吹牛脸甘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偏灿,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钝的!你這毒婦竟也來(lái)了翁垂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤硝桩,失蹤者是張志新(化名)和其女友劉穎沿猜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碗脊,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啼肩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衙伶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祈坠。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矢劲,靈堂內(nèi)的尸體忽然破棺而出赦拘,到底是詐尸還是另有隱情,我是刑警寧澤芬沉,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布躺同,位于F島的核電站阁猜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蹋艺。R本人自食惡果不足惜剃袍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捎谨。 院中可真熱鬧民效,春花似錦、人聲如沸侍芝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)州叠。三九已至棵红,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咧栗,已是汗流浹背逆甜。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留致板,地道東北人交煞。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像斟或,于是被迫代替她去往敵國(guó)和親素征。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,380評(píng)論 0 5
  • 對(duì)于IOS來(lái)說(shuō)萝挤,由于系統(tǒng)是封閉的御毅,APP上架需要通過(guò)App Store,安全性來(lái)說(shuō)相當(dāng)高怜珍。但是對(duì)于大廠和知名APP...
    it彭于晏閱讀 1,120評(píng)論 0 1
  • 目錄 一酥泛、為什么要加固 二今豆、加固的幾種方法 三、基于念茜如何加固 四柔袁、其他人的加固方法 前言 APP加固之代碼混淆...
    dvlproad閱讀 19,394評(píng)論 7 42
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 2,753評(píng)論 0 8
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,180評(píng)論 0 3