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下只需要下載這兩個檔案