1. 程式人生 > >iOS 安全之程式碼混淆

iOS 安全之程式碼混淆

這裡主要說的是Objective-C的程式碼混淆,其實關於Objective-C的程式碼混淆文章在網上可以找到很多,這裡推薦一下念茜大神的部落格,還有一個寫的不錯的文章 iOS 對原始碼進行混淆.在我接觸程式碼混淆的時候基本上就是通過這兩個文章學會使用的.

寫這個文章的主要目的是在使用程式碼混淆時踩到的坑分享一下,這裡先簡單介紹下加入程式碼混淆的步驟

1.在你的專案檔案下建立如下兩個檔案,也可以在其他地方建立好之後拖進來,然後通過svn或者git新增到版本管理庫

image.png
- confuse.sh是指令碼語言檔案,內容拷貝自念茜大神的部落格.我這裡直接拷貝出來

#!/usr/bin/env bash
TABLENAME=symbols SYMBOL_DB_FILE="symbols" STRING_SYMBOL_FILE="func.list" HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h" export LC_CTYPE=C #維護資料庫方便日後作排重 createTable() { echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE } insertValue() { echo "insert into $TABLENAME
values('$1' ,'$2');"
| sqlite3 $SYMBOL_DB_FILE } query() { echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE } ramdomString() { openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16 } rm -f $SYMBOL_DB_FILE rm -f $HEAD_FILE createTable touch $HEAD_FILE echo '#ifndef Demo_codeObfuscation_h #define Demo_codeObfuscation_h'
>> $HEAD_FILE echo "//confuse string at `date`" >> $HEAD_FILE cat "$STRING_SYMBOL_FILE" | while read -ra line; do if [[ ! -z "$line" ]]; then ramdom=`ramdomString` echo $line $ramdom insertValue $line $ramdom echo "#define $line $ramdom" >> $HEAD_FILE fi done echo "#endif" >> $HEAD_FILE sqlite3 $SYMBOL_DB_FILE .dump
  • func.list檔案是存放你希望進行混淆的方法名檔案.在我使用的過程中我發現只能存放一個檔案內的方法名,也就是說只能對一個.m檔案內的方法進行混淆,而不能同時對多個.m檔案
2.在pch檔案中新增如下程式碼
#ifdef __OBJC__

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
// 新增混淆作用的標頭檔案(這個檔名是指令碼confuse.sh中定義的)
//#import "codeObfuscation.h"
#endif
3.配置Run Script
  • 開啟build phases 如果沒有Run Script這項, 點選左上角加號”+”,新增
    image.png
    image.png
  • 新增指令碼語言檔案,拷貝如下程式碼
$PROJECT_DIR/confuse.sh

image.png

4.開啟指令碼檔案執行許可權
  • 開啟終端,cd到工程目錄下,執行chmod 755 confuse.sh,摁下回車.
    image.png
5.開啟專案,command + B

目的:執行一次指令碼檔案,此時會建立codeObfuscation.h檔案(第二步新增至pch檔案內被註釋的程式碼)
該檔案目的是對方法名進行巨集定義.編譯成功後,在pch檔案內去掉codeObfuscation.h的註釋.在編譯一次,如果編譯成功,那說明混淆檔案已經配置ok了

6.在 func.list 檔案裡,寫入待混淆的函式名,然後command + B

image.png
開啟codeObfuscation.h檔案,可以看到對應的巨集定義,至此,程式碼混淆已經配置成功!
image.png

小結:

1.加上程式碼混淆之後,專案編譯非常耗時,因為每次都需要重新編譯,所以在開發過程中,建議關閉程式碼混淆功能.

關閉方法:1.註釋codeObfuscation.h. 2.關閉build phases內 Run Script選項

2.切記需進行混淆的類的內部方法名不要與其他類方法名重名,否則會造成意想不到的bug.

相關推薦

iOS 安全程式碼混淆

這裡主要說的是Objective-C的程式碼混淆,其實關於Objective-C的程式碼混淆文章在網上可以找到很多,這裡推薦一下念茜大神的部落格,還有一個寫的不錯的文章 iOS 對原始碼進行混淆.在我接觸程式碼混淆的時候基本上就是通過這兩個文章學會使用的.

iOS 探討 程式碼混淆

#!/usr/bin/env bash TABLENAME=symbols SYMBOL_DB_FILE="symbols" STRING_SYMBOL_FILE="func.list" HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h" expo

[ios]安全攻防程式碼混淆的一個小工具

看了“念茜”的這篇文章: http://blog.csdn.net/yiyaaixuexi/article/details/29201699 覺得非常好,不過裡面提到一個func.list的檔案。 規則: 建立函式名列表func.list,寫入待混淆的函式名,如:-(voi

幾維安全Javascript程式碼混淆(js加密)線上使用說明

幾維安全Javascript程式碼混淆是一項線上加密服務,使用者只需將JS檔案打包成zip包,提交到加密平臺,即可完成程式碼混淆、字串加密、屬性加密、呼叫轉換等多項保護措施,提高攻擊者分析Javascript程式碼邏輯的難度,從而保護核心程式碼。 功能一、程式碼混淆 Javascript程式

Android開發程式碼混淆

應用混淆(ProGuard) ProGuard是一個免費的JAVA類檔案壓縮,優化,混淆器。 它探測並刪除沒有使用的類,欄位,方法和屬性,它刪除沒有用的說明並使用位元組碼得到最大優化,它使用無意義的名字重新命名類,欄位和方法。 我們先來介紹下ProGuard 我們為啥要使用ProGu

android學習程式碼混淆小結

之前一直沒有對程式碼混淆有一個很明確的認識,今天重新對程式碼混淆做了一番瞭解,並記錄一下在Androidstudio上是如何做程式碼混淆的。 第一步: buildTypes { release { minifyEnabled true prog

iOS逆向 程式碼注入

一 framework注入1. 新建工程001--Demo,根據我上一篇文章的重簽名方式之三 指令碼重簽名的xcodeCodesign.sh檔案,進行重簽名後2. Xcode -> TARGETS -> +號 ->Cocoa Touch Framework新

JAVA程式碼混淆proguard基礎(一)

講解的比較全面的一篇文章http://blog.csdn.net/glony/article/details/8852245 一官方網站用法               http://proguard.sourceforge.net/index.html#/manual/

iOS安全class-dump的安裝和使用

寫的很好 http://www.cnblogs.com/mddblog/p/4942894.html 用來dump目標檔案的class資訊的工具。它利用Objective-C語言的runtime的特性,將儲存在mach-O檔案中的@interface和@protocol資訊

iOS逆向程式碼注入(framework)

題外話:此教程是一篇嚴肅的學術探討類文章,僅僅用於學習研究,也請讀者不要用於商業或其他非法途徑上,筆者一概不負責喲~~ 準備工作 程式碼注入思路: DYLD會動態載入Frameworks中所有的動態庫,那麼在Frameworks中加一個自己

安全程式設計Android APK打包程式碼混淆

第一步:在專案工程目錄下的proguard-rules.pro檔案中配置自定義的混淆規則 #注意: #1.引用外部的jar包 如果不是自己寫的最好不混淆它們,因為外部jar包有可能已經混淆過 #2.不要混淆XML佈局中使用的自定義控制元件類,混淆後加載佈局會報找不到該控制

Android安全NDK的程式碼混淆 -- Ollvm

安卓開發者交流群歡迎您加入 418263790 關鍵程式碼放JNI (C/C++)裡真的很安全嗎? 很多Android開發者都認為 把關鍵程式碼放到C/C++裡 然後打包靜態庫 然後破解者就無法破解 我想說 你太嫩了 不信? 舉個例子:

iOS安全攻防結構體保護使用

fff n) cnblogs 調用 hook hang ras evel amp   Objective-C 代碼很容易被 hook,因此需要對一些重要的業務邏輯進行保護,可以改用結構體的形式,把函數名隱藏在結構體裏,以函數指針成員的形式存儲。這樣編譯後只留了下地址,去掉了

iOS安全攻防使用 Frida 繞過越獄設備檢測

檢測 攻防 -i blog 越獄 工具 分析工具 href 設備   Frida 是 一款有趣的手機應用安全分析工具。   文章參考:Bypass Jailbreak Detection with Frida in iOS applications      iOS安全攻防

iOS狂暴路--兩種佈局方式操作詳解(xib檔案和程式碼編寫)

一、前言 在Android中我們進行佈局操作也是有兩種方式,一種是直接手寫xml佈局,還有一種就是用程式碼編寫,在iOS中其實也是類似,有兩種方式一種是xib檔案,一種程式碼編寫。本文就來介紹iOS開發中最麻煩的最常用的知識佈局內容。有了這些知識之後結合之前的講解的網路和多

iOS開發崩潰日誌符號化及程式碼定位

提交應用到App Store時如果稽核被拒,可能會發送給我們一個崩潰日誌,如果提示資訊不足以讓我們知道崩潰在哪裡,那就使用以下這種通過定位日誌從而知道崩潰vc與行數。 // 回到你的打包介面 // 找到.dsYM檔案 這時回到iTunes con

iOS-程式碼混淆加固策略

對於IOS來說,由於系統是封閉的,APP上架需要通過App Store,安全性來說相當高。但是對於大廠和知名APP而言,別人給的安全保障永遠沒有自己做的來得踏實。所以對於大廠、少部分企業級和金融支付類應用來說加固是相當重要的。 下面是目前幾個專業加固大廠提供的加固策略 網

iOS平臺程式碼混淆指令碼

這是一款用於混淆iOS程式碼的外掛。最近試用了幾款目前很多開源的針對iOS程式碼混淆的外掛,但混淆生成的檔案一直不如人意,執行程式碼報錯的地方依舊很多。同時有些外掛實現的方式個人認為過於複雜,需要使用類似於class-dump的技術來進行反編譯再進行混淆操作,同時很多

編譯與程式碼安全認識(一)

         好久沒有更新部落格了,今天週末索性喝杯茶,靜下心來把最近一段時間自己所理解和思考的關於軟體程式碼保護的東西寫下來。幫助所需之人,多有不對,望批評指正。         一提到編譯,大家很多人覺得不就是詞法分析、語法分析然後產生一個針對特定機器的檔案。感覺這

Java列舉, 程式設計師應該掌握的開發技巧“簡潔易懂又安全程式碼

java列舉 背景 JDK1.5引入了新的型別——列舉,列舉型別提高了程式碼的 簡潔性、安全性以及便捷性 。 學習目標 學會列舉的基本用法 利用列舉去設計業務功能 程式碼舉例 寫一個新增內容的邏輯 內容實體物件 一般程式設計師可能定義static、ty