1. 程式人生 > >iOS class-dump反編譯和程式碼混淆

iOS class-dump反編譯和程式碼混淆

參考連結
一、class-dump反編譯
1、由於/usr/bin/在OS X 10.11上沒有許可權了,將解壓後的class-dump,拖入到 /usr/local/bin/class-dump中
這裡寫圖片描述

2、開啟終端,cd /usr/local/bin/class-dump
3、修改class-dump的許可權:sudo chmod 777 /usr/local/bin/class-dump/class-dump
4、輸入class-dump會出現它的相關命令,說明class-dump安裝正確

這裡寫圖片描述

5、將打包的ipa反編譯下,.ipa改成.zip,並解壓
這裡寫圖片描述

6、右擊—顯示包內容,找到如下有個白框黑底的
這裡寫圖片描述

7、將其複製到桌面tt資料夾中,在終端中輸入相關命令
先進入class-dump的路徑中,cd /usr/local/bin/class-dump/

class-dump -H /Users/xxx/Desktop/tt/ConfigXcodeDemo -o /Users/xxx/Desktop/tt/

然後在tt檔案中就可以看到多出的很多.h檔案

-H 是要反編譯的檔案位置
-o 是反編譯後文件儲存的位置
這裡寫圖片描述

二、ios程式碼混淆

1、在專案的Resource資料夾中新建
指令碼檔案:confuse.sh,
巨集定義檔案:codeObfuscation.h,
函式列表檔案:func.list,
標頭檔案:PrefixHeader.pch

可指令碼建立
cd 專案/YCFMixConfuseDemo/Resource
touch confuse.sh
touch func.list
touch codeObfuscation.h
touch PrefixHeader.pch

此處使用的混淆方法是:將一些以ycf_xxx開頭的方法替換成隨機的字元,目前該方法只能針對1個的引數的方法
這裡寫圖片描述

2、在confuse.sh檔案中,輸入以下程式碼,注意路徑

TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="$PROJECT_DIR/YCFMixConfuseDemo/Resource/func.list"

CONFUSE_FILE="$PROJECT_DIR/YCFMixConfuseDemo"

HEAD_FILE="$PROJECT_DIR/YCFMixConfuseDemo/Resource/codeObfuscation.h"
export LC_CTYPE=C #取以.m或.h結尾的檔案以+號或-號開頭的行 |去掉所有+號或-號|用空格代替符號|n個空格跟著<號 替換成 <號|開頭不能是IBAction|用空格split字串取第二部分|排序|去重複|刪除空行|刪掉以init開頭的行>寫進func.list grep -h -r -I "^[-+]" $CONFUSE_FILE --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *\^\/\{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^ycf_/p" >$STRING_SYMBOL_FILE #維護資料庫方便日後作排重,一下程式碼來自念茜的微博 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

注意:需要將ycf換成你自己的函式字首
這裡寫圖片描述

3、在專案——Target——Build Phases中 新增New Run Script Phase
這裡寫圖片描述

這裡寫圖片描述

4、將新建的標頭檔案PrefixHeader.pch中匯入codeObfuscation.h

#ifndef PrefixHeader_pch
#define PrefixHeader_pch

// Include any system framework and library headers here that should be included in all compilation units.
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
#import "codeObfuscation.h"
#endif /* PrefixHeader_pch */

5、將新建的PrefixHeader.pch標頭檔案新增到Xcode中去

在Build Settings中搜索Prefix Header,在Prefix Header中寫入我們新建標頭檔案的路徑
這裡寫圖片描述

6、執行專案,但是會報如下問題
這裡寫圖片描述

/Users/xxx/Library/Developer/Xcode/DerivedData/YCFMixConfuseDemo-bampqtmksvysbbbaixdeifkkoaqd/Build/Intermediates.noindex/YCFMixConfuseDemo.build/Debug-iphonesimulator/YCFMixConfuseDemo.build/Script-1ED6530E2004577400286FE9.sh: line 2: /Users/youchunfen/Desktop/專案復件/demo/YCFMixConfuseDemo/YCFMixConfuseDemo/Resource/confuse.sh: Permission denied

是說confuse.sh沒有許可權,那麼我們cd 到 Resource資料夾中,檢視它的許可權,發現它沒有執行許可權,將其修改有可執行的許可權
cd /Users/xxx/demo/YCFMixConfuseDemo/YCFMixConfuseDemo/Resource

檢視某個檔案的許可權 ls -l 檔名
chmod a+x 檔名 給該檔案可執行許可權,a是所有人

這裡寫圖片描述

7、這次就可運行了,但是發現第一次的執行後,然後使用本文的第一部分的class-dump來反編譯發現,並沒有程式碼並沒有混淆,再次執行後,相關以ycf_開頭的函式名才被混淆

appdelegate中原來的函式名
這裡寫圖片描述
混淆後
這裡寫圖片描述

在ViewController中方法名混淆前
這裡寫圖片描述

混淆後
這裡寫圖片描述

相關推薦

iOS class-dump編譯程式碼混淆

參考連結 一、class-dump反編譯 1、由於/usr/bin/在OS X 10.11上沒有許可權了,將解壓後的class-dump,拖入到 /usr/local/bin/class-dump中 2、開啟終端,cd /usr/local/bin/c

iOS逆向 class-dump的安裝使用

一、概述 class-dump是進行iOS逆向開發常用的一款工具,其主要作用是匯出App的標頭檔案內容。根據這些標頭檔案可以大致分析出APP的結構和內容。 二、下載和安裝 下載class-dump-3.5後,將dmg檔案裡的class-dump複製

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

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

java防止編譯之proguard混淆代碼

proguard 混淆、jar proguard5.3下載地址:http://down.51cto.com/data/2316123從eclipse中導出工程的jar包(這個就不詳細說了)安裝proguard後打開bin目錄下的proguardgui.bat啟動proguard如下圖所示:點擊Inpu

Android Apk的編譯加密

打不開 源文件 資源 left 結果 blog 9.png 規則 找到   這幾天在上海出差,忙裏偷閑學習了一下Apk的反編譯工具的基本使用。下面就簡單介紹一下如何將我們從網上下載的Apk文件進行反編譯得到我們想要獲得的資源文件和源碼。 一、Apk文件組成   Androi

[iOS]FFmpeg框架在iOS平臺上的編譯使用

_id hex ips selector 文件 str content pat tps 使用環境 Mac OS Yosemite 10.10.5 開發工具 Xcode 7.0 Terminal 需要的文件鏈接 gas-preprocessor yasm F

如何通過jad把class批量編譯成java文件

完全 之前 文件夾 文章 cli 自己的 官網 定義 沒有 背景:前幾天在項目開發的時候遇到一個問題,那就是利用myeclipse編寫好的一個項目打包成jar包後上傳部署到服務器裏,之後本地的項目被自己改來改去出現了一些問題,想著把上傳到服務器裏面的war包下載下來重新利用

Android編譯二次打包

犯錯 解壓 就會 field har stat 生成 https make 參考:APK反編譯 一、工具介紹: 1、解壓工具 2、JDK 3.apktool: aapt.exe,apktool.bat,apktool.jar;三個在同一目錄結合使用,用來反編譯apk

android_編譯java程式碼

下載dex2jar-2.0.zip找個最新版的下了就行 http://sourceforge.net/projects/dex2jar/files/ 這個工具用於將dex檔案轉換成jar檔案(dex檔案是什麼先不用考慮) 之後解壓這個dex2jar-2.0.zip 找一個自己寫好的程式 匯

Android編譯 -- 錯誤程式碼還原

PS:如果閱讀體驗不好,可以嘗試Github版 (<-點左邊) 1. setColor(-16777216) 反編譯的程式碼中會有很多setColor(int)的情況,比如setColor(-16777216),這個值比較特別,能輕易的查到Android文件中對

android apk編譯編譯—改程式碼—再編譯—簽名)

1.工具(請到網站搜尋並自行下載):     ①apktool(反編譯:能得到圖片資源與佈局檔案等)     ②dex2jar(反編譯:能得到activity等java程式碼)     ③jd-gui(檢視dex2jar得到的java檔案)     ④手機簽名工具

unity3D 如何提取遊戲資源 (編譯)+程式碼編譯【P.M.出品】

首先感謝 雨鬆MOMO 的一篇帖子 教我們怎麼提取 .ipa 中的遊戲資源。教我們初步的破解unity3d資源的基本方法 附上原帖的連結:http://www.xuanyusong.com/archives/2584 下面我會從頭介紹一下提取的全過程:步驟一:首先從 https://github.com/a

Mac下編譯重新編譯打包APK

反編譯APK需要的工具如下: - dex2jar 這個工具用於將dex檔案轉換成jar檔案 下載地址:http://sourceforge.net/projects/dex2jar/files/

Android Studio多渠道打包程式碼混淆教程

http://coolshell.info/blog/2015/03/android-studio-prefrence.html 什麼是Gradle Gradle是一種依賴管理工具,基於Groovy語言,面向Java應用為主,它拋棄了基於XML的各種繁瑣配置,取而

iOS 使用巨集定義函式程式碼

iOS使用巨集定義函式和程式碼塊 今天在開發過程中碰到一個問題:就是父類中要向外傳送通知,然後子類中或者其他類中來接收它。當然一般是把它寫到類方法中去,但是有個問題,就是如果呼叫的類不是它的子類,就不能直接呼叫,當然也可以採用靜態方法實現,我這裡主要是想用巨集

Android 編譯XML 程式碼亂碼問題 解決

今天在寫一個佈局的時候 出了點小問題 原本已經完成的佈局讓我一不小心改掉了,由於修改回去比較麻煩,一想我自己手機上安裝的是沒修改以前的,因此也就想著反編譯一下取回當時的程式碼了。 首先我把apk直接解壓了,在res資料夾下 開啟佈局檔案,可是卻是亂碼,不可

beyond compare 對class檔案編譯及比較

首先開啟beyond compare,選擇工具-》檔案格式,點選開啟檢視是否有一下選項(預設沒有),有的話請打鉤,沒有則需要安裝外掛 搜尋框輸入class關鍵字 點選下載 下載完成後,會得到 BCFormats.bcpkg 檔案。開啟已經安裝完畢的beyon

class-dump的安裝使用

用來dump目標檔案的class資訊的工具。它利用Objective-C語言的runtime的特性,將儲存在mach-O檔案中的@interface和@protocol資訊提取出來,並生成對應的.h檔案。 安裝步驟 open /usr/local

關於iOS開發中編譯的那些事兒

現在僅討論程式碼層面的反編譯 1、反編譯工具 (1)class-dump 主要用來反編譯一個庫檔案或者app的方法名、屬性等宣告(即.h檔案,強大的是反編譯出來的.h不僅僅包含標頭檔案中的宣告,.m中的function方法名稱也同樣能夠反編譯出來)。class-dump的安

APK檔案使用ApkTool解包編譯重新打包及簽名

前段使用一直使用一個手機APK軟體,不過最近軟體更新,出現了一個很討厭的語音提示,於是想通過重新編譯把語音提示去掉。 【準備工作】 配置JAVA環境,到http://www.java.com/下載並進行安裝,如已安裝的可忽略 Windows下只需要下載這兩個檔案