因爲有需要,所以對一款CAD導出插件進行逆向分析。該插件主要作用是把AutoCAD模型對象導出爲obj模型,插件名:OBJ Exporter for Autodesk® AutoCAD®,下稱OBJ Exporter。
OBJ Exporter是由一家以插件開發爲主的數據公司開發,本文逆向分析的是OBJ Exporter的試用版,正式版需要支付$99! OBJ Exporter的使用非常簡單,幾乎是一鍵導出。安裝後在CAD的附件模塊:
OBJ Exporter插件位置
插件只有兩個界面,一個。一個選項界面,一個關於界面:
選項界面1
選項界面2
1. 導出設置界面:可以設置導出參數,主要是精度和法線,及翻轉設置。可以通過設置精度多次導出實現導出帶LOD(level of detail)的模型,當然這不是本文關注的重點。
關於界面
2. 關於界面:這個是本文的關注重點,上圖紅色框內的提示則是也是突破點!
我這裏導出看一下
點一下Export後輸入文件名即可:
導出過程(動圖)
用win10自帶的Paint3D查看如下(至於顏色爲什麼是這樣,我暫時也不清楚):
Paint3D查看
我們再來看一下“關於”,試用次數變爲9。
二話不說,開幹!
開打插件安裝目錄C:ProgramDataAutodeskApplicationPluginsOBJExporterForAutoCAD.bundle
插件安裝目錄
打開PackageContents.xml文件查看下入口模塊。
入口模塊
進入主目錄:
插件主目錄
幾乎可以肯定,混淆了!先用dnSpy查看下:
OBJExporterForAutoCAD反編譯結果
隨便點開一個類查看:
Zheshi需要祭出另外一款神器:de4dot。.net反混淆工具。使用方法非常簡單,把需要處理的dll/exe拖上去即可!下圖爲反混淆後的dll:
反混淆後的dll
我們再看下OBJExporterForAutoCAD:
反混淆後的OBJExporterForAutoCAD.Dll
那麼問題來了:這麼多個dll怎麼查找我們想要的信息呢?回過頭看下插件的兩個界面及PackageContents.xml文件便能找到些蛛絲馬跡。插件的幾個菜單按鈕記錄在PackageContents.xml文件中的:分別是AboutOBJExporter、SaveAsOBJ和OBJPreferences。這三個關鍵函數一定存在於OBJExporterForAutoCAD.dll中。
PackageContents.xml文件信息
查看下OBJExporterForAutoCAD.dll可以看到下面的信息:
OBJExporterForAutoCAD.dll結構
爲了方便查找(當然也可以不導出到工程,我需要的不僅僅是破解所以導出了整個工程),將整個工程保存爲解決方案,在dnSpy中選中這幾個dll,保存爲工程,然後用vs打開,解決方案結構如下:
OBJExporterForAutoCAD解決方案結構
打開在dnSpy中看到的類:
SaveAsCommand類
沒什麼好說的,基本算是現場裸奔!順藤摸瓜,打開關於窗體,打開設計器:
關於窗體設計器
注意紅色框,轉到代碼,構造函數裏面:
AboutDialog構造方法
可以看到標籤內容是根據licenseStatus改變的,繼續往上找:
進入ValidateLocalLicense方法:
注意Licensepath這個屬性,進入查看:
這應該是一個本地文件,存放在C盤用戶,公用目錄下,如下,幾乎可以斷定,@16@20@19@[email protected]爲license文件。
回到ValidateLocalLicense方法再簡單看下兩個判斷,文件存在時自然應該是驗證內容,我們再看下不存在的情況做了什麼,進入method_6:
感覺像是讀一個東西然後把內容寫到剛纔的本地目錄,有可能是讀註冊表的內容!再接着往上看RegistryEntry. BaseRegistryKey:
一個引用,還是剛纔那個get,registryKey_0應該只是個私有字段,搜索下賦值基本就能找到:
雖然沒有找到直接賦值的地方,但是找到這個註冊表信息,直接按照上面的註冊表信息查找下:CMDàregedità回車,找到鍵值:
廢話不多說,幹掉註冊表和本地文件看下:
至此,破解完成,沒什麼技術含量。
總結:
總結還是需要的。本文通過對AutoCAD一款導出插件逆向分析,該過程沒什麼技術含量,幾乎只是dnSpy和de4Dot兩款工具的使用。當然無限試用該插件還有其他方法。破解該插件不是目的,只是一種學習、成長的手段。本人雖然把該插件的核心代碼完全反編譯甚至還原,但並沒有將該插件據爲己有倒賣成品,相反通過反編譯該插件,學習了AutoCAD的一些新東西,一些網上幾乎沒找到的用法。