【MyEclipse 2015】 逆向破解實錄系列【1】(純研究)


聲明

  • My Eclipse 2015 程序版權為Genuitec, L.L.C所有.
  • My Eclipse 2015 的注冊碼、激活碼等授權為Genuitec, L.L.C及其付費用戶所有.
  • 本文只從逆向工程的興趣出發,研究軟件保護機制.
  • 不會釋出完整源代碼和破解補丁.
  • 會直接推測出授權信息的地方打碼處理
  • 本文針對My Eclipse 2015 Stable 2.0或CL版本

背景

在上兩篇博文中,我們研究了逆向中的兩大手段:

在本篇,將着重利用上述兩種手段,來參破My Eclipse 2015的注冊、激活算法及軟件保護機制。

先看成果,Bling授權至2099年

這里寫圖片描述

激活通過

這里寫圖片描述


熟悉軟件本身

因為之前並不熟悉My Eclipse,所以找了很久都找不到提示授權信息的界面在哪里,汗一個先!

逆向本身,是從無道到有道,其中的樂趣在於探索本身,而不是結果。

要逆向一個東西,得先熟悉它的布局、機理,否則逆向只能是空談。

  • My Eclipse軟件太大,光安裝包就1.3G左右,而且國內是百度網盤下載,奇慢無比.
  • My Eclipse插件巨多,要找出關鍵的包、lib和代碼片段,稍顯復雜和繁瑣.
  • 因為軟件規格明顯比CLion高出一個級別,所以其中的困難可謂重重,至少在實現動態調試上需要特殊處理.

插件巨多:

這里寫圖片描述

當面對的是一頭大象,要戰勝它,就需要忍耐,你需要觀察它的一舉一動,然后才能出擊。

分析類加載信息

這里,用我們熟悉的verbose大法,分析類加載信息,縮小目標。
同時,搜集到的類加載信息,在后續的jar包分析中,也是頻繁要來看一看,找一找的。

關於main

這里寫圖片描述

關於license/licence

這里寫圖片描述

一旦發現或者猜想到一些門路,就要來這里看一看,然后分析jar包中的關鍵類的四周信息,以充分掌握軟件的特性,避免做無用功。


創建靜態分析環境

分析啟動信息

對My Eclipse安裝目錄下的*.ini進行修改,指定我們自己的java/jre/jvm,以方便使用 jinfo 等工具.

這里寫圖片描述

查看vm optionscommand line args

這里寫圖片描述

通過分析,從$ME_HOME/plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar入手,嘗試將程序啟動起來。

這里寫圖片描述

正如其名,真的是個launcher/loader,雖然程序啟動起來了,但是要想在注冊授權信息/My Eclipse Subscription Info之類的附近斷掉程序,並且顯示源碼,這一點還是遠遠不夠的。

打造代碼檢索環境

為了能夠充分掌握某個關鍵類、方法的調用路徑,以方便我們進行回溯或者探索重要信息,通常我們采用如下幾種方法:

  • 反編譯源代碼,在關鍵點處充分修改,打印調用棧.
  • 利用靜態AOP或者hook,插入我們的調試器.
  • 將代碼當作文本處理,以利用sed/grep/less等工具,以及文件索引能力,方便大批量的進行關鍵代碼搜索.
  • 直接用調試器附加目標進程,要顯示源碼的話,往往需要我們加-g以產生調試信息,這一點在My Eclipse的保護機制下受到限制,但這也是我們需要突破的地方.
  • 利用IDE提供的查找使用/正向依賴/反向依賴分析技術.
  • 利用dump,將關鍵代碼段或者類信息從目標進程中dump出來並還原為源代碼.

總之,靈活結合上述幾種手段,目的是為了充分在My Eclipse這頭大象身上輾轉騰挪,取我所需.

解壓縮jar包,並將class反編譯為java文件

jar包是采用zip格式壓縮的,所以我們也可以利用unzip來進行解壓縮.

為了取得更好的反編譯效果,我們這次不使用jd來做,在博主安裝的Intellij IDEA的lib下,有一個fern flower的反編譯工具,這也是IDEA的默認反編譯器,我們就用它了,有興趣的東西可以搜索下,貌似跟mine craft有很大淵源。

反編譯,首先將需要反編譯的包搜集到一個文件中,比如genuitec.jar.txt中,然后建立一個簡單的腳本進行批處理:
這里寫圖片描述

解壓縮類似,就不貼圖了,我們利用unzip,你也可以利用jar/編程等方式實現解壓縮,當然,如果你不嫌累,1000多個jar包,你也可以手工解壓縮^^.

unzip ${jar} -d ${out_dir}

建立索引

有條件的可以用solr/lucene來做,這里我們利用IDE的索引能力就可以了,很簡單,將所有我們感興趣的java文件,丟進IDE:

這里寫圖片描述

然后,就可以這樣來方便地搜索我們需要的class/java文件了:

這里寫圖片描述

當然,也可以路徑搜索:

這里寫圖片描述

雖然因為各種依賴關系極其復雜,要全部修復十分困難,無法全面編譯並利用語義搜索等手段,但這一步,為我們充分地占有資料並檢索打下堅實基礎,配合前面所述的verbose信息,我們可以對關鍵代碼、類、路徑、符號進行搜索、跳轉,極大地提升我們的分析效率。


打造動態調試環境

在靜態階段,我們的分析能力是受到局限的,了解一個軟件的運行機制,比較好的辦法,就是調試它。

但是,我們面對的是My Eclipse這樣的大象,即使給你完整的源代碼,要分析清楚也是一件很困難的事,所以,我們要利用修復、截取等手段,縮小我們動態調試的范圍,降低難度。

上面所述,是建立在我們的靜態分析基礎之上,而靜態分析,需要做大量的工作,繁瑣、細碎,有時會極為惱火,讓你有rm -rf /的沖動,這時候,就靜下來,你做的是逆向工作,是從沒有門路,創造門路,耐心和調節心情是必做的一件事,這個時候,聽聽無腦的神曲,盡快reset自己的煩躁,因為后面,還有許多未知的困難在等着你挑戰。

ok,這里在我們反編譯的java代碼中,挑一段感興趣的地方,小小修改一點,編譯為class文件,替換到對應的jar包中,然后利用前文所述的launcher來跑一下看看吧!

這里寫圖片描述

我擦,這什么鬼東西?

后話:My Eclipse 2015 采用的完整性驗證技術,配合數字簽名,以達到檢測代碼被修改的目的。

真是令人惱火,看來沒有CLion那么好搞,靜一靜,想想思路。

讓我們來推測一下這個提示框的調用棧:

	java 
	-> main 
	-> initialize 
	-> .. 
	-> integrationCheck 
	-> alert("騷年,你動了我的代碼!")

好的,想必你已經懂我在說什么。

利用回溯法來分析完整性驗證機制,並看看它做了什么.


破除軟件完整性驗證保護

自己造輪子,精准搜索:finder

既然修改了代碼,出現了錯誤,動態調試從何談起?

作為工程師,你能夠改變世界的那一點,就在於你可以按照需要,來造輪子。

這個時候,我們有兩種辦法:

  1. 還是從靜態環境中,來搜索錯誤提示
  2. 自己造輪子,來搜索錯誤提示.

為什么需要自己造輪子呢?

  • 靜態環境的搭建極其耗時
  • 逆向目標復雜,靜態分析容易遺漏
  • 方便后續的補丁操作

看看我們這個時候需要的輪子:

這里寫圖片描述

沒錯,我們需要在jar包中、zip包中、文件夾中、class文件中:

  • 找到我們感興趣的文件格式
  • 查找字節指紋
  • 打印我們需要的各類信息

如下:

這里寫圖片描述

這個時候,我們的檢索能力如下:

  1. verbose信息.
  2. 靜態環境提供的路徑、符號、文件搜索.
  3. 提供文件指紋、字節特征碼搜索的finder.
  4. ServiceAbility Agent提供的運行時信息.

抹除完整性驗證代碼

在抹除前,My Eclipse的完整性驗證代碼之一如下:

這里寫圖片描述

抹除后,如下:

這里寫圖片描述

MyEclipse 2015 的完整性驗證,分散在多個jar包的多個類中,要不遺漏,一是需要耐心,二是依賴finder的字節指紋搜索,同時配合靜態環境的分析。
這里,思路很重要,剩下的就看你擅長不擅長干細活了^^.


自己造輪子,文件補丁師 : patcher

現在,我們需要用抹除驗證的代碼,替換原來的代碼,並刪除、增加一些東西,這里你可以手動去做,畢竟jar包就是zip格式,也可以自己做patch程序。

考慮自己做patch程序的主要目的:

  1. 不可能一次patch到位,需要多次進行補丁操作.寫程序來做,配置后即可自動化完成.(省時)
  2. 輸出必要的調試信息以方便診斷.(省心)
  3. 自動化crack過程.(省力)

如下:

這里寫圖片描述

調試信息:

這里寫圖片描述

讓程序飛起來

做完了上面的步驟,基本上,就可以為所欲為了。

現在,讓我們將程序跑起來,以確保我們的小范圍修改可以如期運行:

這里寫圖片描述

完整性驗證保護已突破,但是還有注冊保護,如上圖所示,看來,逆向之旅還遙遙無期呢?

那么,如何破解注冊保護呢?
下篇揭曉。

撰文不易,若覺得本文對你有益或者博你一笑,留個言,點個推薦吧 :]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM