破解Java to C# Converter

来源:http://www.cnblogs.com/yiyan127/archive/2016/07/14/CSharp_CrackJava2CSharpConverter.html
-Advertisement-
Play Games

起因 最近在對接一個第三方平臺。該平臺只提供了Java版本的SDK,C#版本的還處於敬請期待狀態。由於C#可以復用絕大部分代碼,便考慮找一個Java到C#的轉換器,在試用了幾個軟體之後,發現還是Java to C# Converter(下文簡稱Converter)好用一點。然而基本版功能受限(文件夾 ...


起因

最近在對接一個第三方平臺。該平臺只提供了Java版本的SDK,C#版本的還處於敬請期待狀態。由於C#可以復用絕大部分代碼,便考慮找一個Java到C#的轉換器,在試用了幾個軟體之後,發現還是Java to C# Converter(下文簡稱Converter)好用一點。然而基本版功能受限(文件夾不能超過1000行代碼,代碼片段不能超過100行),高級版的則要$169。

在經歷過自己寫小程式轉換Java、手寫代碼、利用Converter分批次轉換、查找替換等方式完成C#版本之後。終於按捺不住心中的好奇心,研究了下軟體的破解。

希望

首先看看這個軟體是不是C#寫的,將文件拖入ILSpy,一看之下,果然有驚喜。

1

嗯,驚喜就是雖然該軟體是利用C#+WinForm寫成的,但是很明顯的經過了混淆。嚇得我趕忙利用ILSpy的Save Code功能將其保存為工程文件。看能不能重新編譯成可執行程式。

失望

首先試試雙擊工程文件,VS沒反應。換用dotPeek依然如此。

然後新建工程,將項目添加到工程中,一大堆錯誤,無外乎是變數名不正確。換用dotPeek依然如此。如果時間充足的話,可以細心研讀代碼,修複錯誤,重新編譯。一來錯誤太多、二來我也不想花太多時間在讀代碼上面、三來我的目的不在這上面。於是果斷放棄該方式。

2

新希望

思路

我們知道,C#程式是編譯成IL的,恰好我知道Reflexil可以直接編輯IL。上Reflexil官網一看,現在也支持ILSpy(以前我以為只支持Reflector),那就直接在ILSpy中改寫IL。

查找編輯位置

要編輯IL的話,關鍵是要找對地方。軟體未註冊的話,好多時候都會彈出一個對話框,Converter也與此類似。

3

直接在VS中查找相應的字元串,如最開始的The Free Edtion of。經過簡單分析後不難看出_g22.cs正是我們要找的地方。

internal static bool _g41(List<string> Copyright_Tangible_Software_Solutions_p0)
    {
        if (_g22._g24 == _g3.FreeEdition)
        {
            if (_g22._m21 != 100)
            {
                Copyright_Tangible_Software_Solutions_g810._g844(Copyright_Tangible_Software_Solutions_g810._g843);
                return false;
            }
            if (Copyright_Tangible_Software_Solutions_p0 == null)
            {
                return true;
            }
            int num = 0;
            for (int i = 0; i < Copyright_Tangible_Software_Solutions_p0.Count; i++)
            {
                if (Copyright_Tangible_Software_Solutions_p0[i].Trim().Length > 0 && !Copyright_Tangible_Software_Solutions_p0[i].TrimStart(new char[0])._g1079("//"))
                {
                    num++;
                    if (num > _g22._m21)
                    {
                        new _g376(string.Concat(new string[]
                        {
                            "The Free Edition of ",
                            Application.ProductName,
                            " doesn't allow conversion of snippets with more than ",
                            _g22._m21.ToString(),
                            " lines at a time."
                        }));
                        return false;
                    }
                }
            }
        }
        return true;
    }

下麵還有兩個函數,_g42和_g43形式與此類似,_g42應該是文件夾的許可,_g43不知道是做什麼的。從函數的代碼上看,感覺直接將返回值改成true就好了。不管那麼多,先來試試改寫_g41。

準備工作

在網站上下了reflexil.for.ILSpy.2.0.AIO(我愣了下才反應過來AIO是All In One的意思),解壓後將裡面的DLL複製到ILSpy目錄下。打開ILSpy(如果ILSpy複製前是打開,則需重啟),在View中點擊Reflexil v2.0,然後在ILSpy中打開Converter的可執行文件,找到_g22類中的_g41函數。如下圖所示:

6

Instructions標簽頁就是進行IL編輯操作的地方。雖然在Reflexil中可以直接編輯源碼:在Instructions標簽頁的表格中選擇Replace all with code,在彈出的視窗中編輯源碼。但是在Converter中預設的代碼方法體無任何內容,而且Complie也會訪問錯誤(雖然並沒有錯誤)。於是果斷放棄這種方式。

7

編輯IL

編輯IL還有一個問題就是我們要將IL改變成什麼樣。在本例中就是return true對應的IL是什麼 。這個問題說難也難,說簡單也簡單。只要我們在VS中編寫一段同樣的代碼,生成後在ILSpy中以IL方式查看即可。

8

C#形式的代碼

9

IL形式的代碼

接下來就是將Instructions標簽頁表格中的IL改為與上圖的IL一樣。整個過程很簡單,刪除、添加、修改,只要保持指令與目標一致。值得一提的是,總共6條指令(nop將就留下吧),只有第4條有操作數,可將其最後添加。因為是跳轉語句,需要在Operand type中選擇Instruction reference,然後在Operand選擇要跳轉的指令位置。

10

大功告成

在ILSpy中Converter可執行文件上單擊右鍵,在彈出的右鍵菜單中選擇Save As,保存好文件(可以對Converter原文件作好備份後直接覆蓋)。驗證後發現針對代碼片段的限制確實失效了。

如果對_g42和_g43也如法炮製,就會發現針對文件夾的限制也會失效。

結語

我是抱著研究學習的態度來嘗試破解的,破解之後也沒有作其他用途。本著跟大家溝通交流的初衷將這個過程寫下來,請各位多多賜教,同時,也希望大家多支持正版。

然而我辛辛苦苦作出的C#版本最終一點用都沒派上,這真是一個溫暖人心的結局。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1:打開任務管理器, [運行新任務] 2:(勾上以系統管理員許可權創建此任務) 輸入 cmd 3:進入要安裝的軟體所在的目錄:cd D:\111_安裝包\submit 3 (本文以安裝submit 為例子) 4:輸入命令:Sublime Text Build 3083 x64 Setup.exe 就會 ...
  • 定義這樣一個方法,然後接收前臺傳過來的值,調用這個方法就行了.. ...
  • 這篇文章我們開始看一下ActionFilter,從名字上其實就大概知道ActionFilter就是Action上的Filter,對吧,那麼Action上的Filter大概有幾個呢??? 這個問題其實還是蠻簡單的,因為我們聽說Mvc本身就是一個擴展性極強的框架,自然就是層層有攔截,層層有過濾,對吧,比 ...
  • 前言: 你先得知道HelpPageConfig文件,不知道說明你現在不需要這個,所以下文就不用看了,等知道了再看也不急.當然如果你很知道這個,下文也不用看了,因為你會了. 方法一: 方法二: 自定義一個支持從目錄載入xml文檔的XmlDocumentationProvider 使用方法: 使用方法: ...
  • 首個基於NHibernate的應用程式 Your first NHibernate based application 原文地址:http://www.nhforge.org/wikis/howtonh/your-first-nhibernate-based-application.aspx 本文涉 ...
  • 1. Tamcat 的安裝,此不介紹 路徑:F:\SolrTest\apache-tomcat-8.0.18 2. 解壓 solr 5.3.2 路徑:F:\Tool\solr-5.3.2 3. 複製solr5.3.2 webapp到tomcat 路徑:“F:\Tool\solr-5.3.2\serv ...
  • 本文適合初學者,老鳥請點贊即走,謝謝。 文字功底有限,表述不恰當的地方,請各位多多包涵。 一,核心 現在ORM已經很多了,功能也齊全了,大家說我這是乾無聊的事,造的連車輪子都還不算,反正我就當學習。 還有就是,下麵這個不算正在的ORM,離真正在ORM差的很遠的。 主要思想 二,實例測試 1,基礎數據 ...
  • 下麵給出了Remoting的小實例,主要功能是將客戶端的數據寫入到服務端。 分析圖: 程式代碼為2個控制台應用程式(1個客戶端,1個伺服器端)和1個類庫,如下所示。 客戶端代碼: using RemotingObjects; using System; using System.Collection ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...