class dump使用方式和原理
class dump使用方式和原理
一、安裝
官網下載安裝包完成後,將class-dump複製到usr/bin資料夾下
如果這個時候沒有發現usr資料夾 說明其隱藏起來了 去查詢mac系統下怎麼顯示隱藏檔案
發現mac os 10.11不讓複製 沒有這個許可權
解決辦法如下:
重啟電腦,按住 command + R,出現 OS X Utilities 介面後,在 Utilities 選單中選擇 Terminal ,執行 “csrutil disable; reboot” ,電腦自動重啟。(開啟 sip “csrutil enanbel;reboot”)
重新啟動後,usr/bin下可以複製進class-dump檔案了
接下來 給class-dump賦許可權
sudo chmod 777 /usr/bin/class-dump
然後要求輸入密碼
輸入class-dump 出現如下圖
則表示安裝成功了 在任何一個目錄裡都可以正常使用class-dump了
二、使用
class-dump在dump從appstore上下載下來的app的時候,首先是需要對app進行砸殼處理的,具體的砸殼工具是ipaguard、clutch等等。
以ipaguar為例,
使用ipaguard來對程式進行加固
程式碼加固是進一步保護應用的一種方式,通常透過特定平臺來對應用進行加固處理。
這邊以ipaguard為例,目前還在免費階段,想薅羊毛的快快試試。
Ipa Guard是一款功能強大的ipa混淆工具,不需要ios app原始碼,直接對ipa檔案進行混淆加密。可對IOS ipa 檔案的程式碼,程式碼庫,資原始檔等進行混淆保護。 可以根據設定對函式名、變數名、類名等關鍵程式碼進行重新命名和混淆處理,降低程式碼的可讀性,增加ipa破解反編譯難度。可以對圖片,資源,配置等進行修改名稱,修改md5。只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5類app。
所以就要使用到混淆器,混淆器是把裡面的程式碼變數等資訊進行重新命名,這樣可讀性會變得非常差,接著,
到這裡,我們完成了對程式碼的混淆,但是還沒有進行加固,防止反編譯,所以,請往下看
然後匯入自己的包就可以了,這裡是流水式的走下來,所以只需要匯入和匯出就可以了,
新增單個檔案,選擇好剛剛混淆後的包,然後你做的事情就是等,等待上傳完--加固完--下載完--已完成,當到已完成的時候,說明這裡已經可以匯出了,匯出需要前面提到的自己建立的簽名,這裡可是會用到的,如果不用,則包安裝包可能會出現問題
選擇匯出簽名包,選擇簽名檔案,輸入密碼,然後點選開始匯出
匯出的包是經過混淆,經過加固比較安全的包了
但可以對自己編寫的app進行dump,同時也可以dump私有框架的標頭檔案
1:對自己寫的app進行dump
進入終端 到桌面
class-dump -H test1.app -o testgod
將test1.app的可執行檔案 進行dump到桌面testgod資料夾裡(不需要事先建立)
結果在testgod裡發現
這個是dump之前的工程檔案
這個是dump出來的工程檔案
dump的很準確
對比前後ViewController.h裡的檔案
這是原檔案
這是dump後的檔案
發現dump後的還多了幾個方法
對比一下:
cxx_destruct是析構方法 在原ViewController裡沒有顯示呼叫 自從使用了ARC模式之後
didReceiveMemoryWarning 在原ViewController裡有實現,但是在原ViewController的標頭檔案中沒有進行過宣告
buttonClick,viewDidLoad也分別在原ViewController裡有實現,但是在原ViewController的標頭檔案中沒有進行過宣告
這一點就充分說明class-dump的準確性,這裡我提出一個疑問,既然class-dump能如此精準的提取標頭檔案,甚至能提出.m檔案裡有的.h檔案裡沒有宣告過的,為什麼就不能連函式體一起提取出來呢?
在研究完 中就可以回答這個問題
Mach的檔案結構裡的data部分,就只有類的名稱和類的方法,class-dump自然是根據Mach的檔案結構來分析的。設想一下,如果有類的方法的實際,那麼這個Mach可執行檔案得有多大。
所以class-dump只能提取函式的方法名。
2:對私有框架進行提出
查詢資料 無果
仍然顯示:
This file does not contain any Objective-C runtime information.
採用swift編寫或是關鍵部分採用C語言編寫的模組是無法dump出標頭檔案的
據說xcode7之後ios9之後,dylib變成tdb,所有的私有函式的dump就無法使用class-dump而只能使用runtime dump了。
而關於class-dump的解析原理,以及本文中提及到的兩個問題 都和Mach-o檔案解析格式有關。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026554/viewspace-2998478/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- class-dump 下載安裝使用
- class-dump 混淆加固、保護與最佳化原理
- 理解Python asyncio原理和簡潔使用方式Python
- iOS逆向之旅(進階篇) — 工具(class-dump)iOS
- Java獲取Class物件的方式和例項化物件的方式Java物件
- PostgreSQL邏輯備份pg_dump使用及其原理解析SQL
- 高通進dump和抓取解析dump log
- Linux core dump使用Linux
- JVM dump和分析JVM
- iOS[super class]和[self class]iOS
- 使用Visual Studio分析dump
- Typescript的interface、class和abstract classTypeScript
- 使用Splunk監控SAP Dump
- 使用Visual Studio分析.NET Dump
- self::class和static::class的區別
- 28、Static Nested Class 和 Inner Class的不同。
- Class 的基本使用
- zookeeper使用和原理探究
- Docker原理和基本使用Docker
- SAP ABAP Dump Analysis(ST22) 工具的使用和背景介紹
- redis資料備份和遷移工具redis-dump安裝和使用初探Redis
- RestTemplate和 apache HttpClient 使用方式RESTApacheHTTPclient
- iOS底層原理總結–instance、class、meta-calss物件的isa和superclassiOS物件
- iOS底層原理總結--instance、class、meta-calss物件的isa和superclassiOS物件
- Java中獲取Class物件的三種方式Java物件
- zookeeper的原理和使用(一)
- Android LeakCanary的使用和原理Android
- CSS的繼承和使用方式CSS繼承
- 使用 vue-class-setup 編寫 class 風格組合式API,支援Vue2和Vue3VueAPI
- JVM載入Class檔案的原理機制JVM
- Oracle redo解析之-2、BBED & DUMP工具使用Oracle Redo
- 使用mysqldump以SQL格式來dump資料MySql
- Linux dump命令有什麼作用?如何使用?Linux
- PostgreSQL、Oracle/MySQL和SQL Server的MVCC實現原理方式OracleMySqlServerMVC
- vue 的 class 與 style 使用Vue
- python3 class的使用Python
- SCSS @mixin和class 區別CSS
- jQuery 新增和刪除classjQuery