最近在對接一個第三方平台。該平台只提供了Java版本的SDK,C#版本的還處於敬請期待狀態。由於C#可以復用絕大部分代碼,便考慮找一個Java到C#的轉換器,在試用了幾個軟件之後,發現還是Java to C# Converter(下文簡稱Converter)好用一點。然而基本版功能受限(文件夾不能超過1000行代碼,代碼片段不能超過100行),高級版的則要$169。
在經歷過自己寫小程序轉換Java、手寫代碼、利用Converter分批次轉換、查找替換等方式完成C#版本之後。終於按捺不住心中的好奇心,研究了下軟件的破解。
首先看看這個軟件是不是C#寫的,將文件拖入ILSpy,一看之下,果然有驚喜。
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函數。如下圖所示:
C#形式的代碼
IL形式的代碼