.NET Decompilers 比較

不久之前我整瓜咗一隻 Xamarin project,手頭上淨低未瓜之前嘅 apk,因為 apk 可以 decompress 攞番隻 dll 出嚟,咁,我可以試下用 decompiler 去搵番啲 source codes,以前試過 decompile 一隻 Windows Forms 嘅 program,都算幾成功㗎,有 九成幾嘅成功率,今次係 Xamarin,Android project,唔知得唔得?😬

我㨂咗:

  1. JetBrains 嘅 dotPeek,同埋
  2. Telerik 嘅 JustDecompile

先試 dotPeek:

唔使安裝,下載嘅 EXE 檔案,直接 launch。 初次啓動係咁樣嘅,可以立即用 File  > Open 去打開你隻要 decompile 嘅 dll。
   
 我隻 apk 有兩隻係我寫嘅 dll:
xFilm5.Staff 同 xFilm5.Staff.Droid。
 順利 open 咗!
左邊個 tree view 顯示我啲 folders 同 pages,好似好正!係好似,😂 打開一頁嚟睇,慘!唔係好對路,啲 syntax 佢識我我唔識佢。😱
不過,如果用得嘅話我都所謂,可惜…
要登記先可以下載。1 仲要安裝添。
好似好 smart 搵哂我部機有咩 Visual Studio 版本。 要俾料先准安裝。
好傳統嘅 installer。 第一次 launch。
Open 相同的 dll 左邊 Tree View,好正!
打開一頁嚟睇下,都算 readable,不過,都係差唔多,都係 compile 唔倒!😰

搵頁複雜啲嘅嚟對比下:

啲 code 應該係咁樣嘅:

namespace xFilm5.Mobile.Staff.ViewModels
{
    public class OrderViewModel
    {
    private System.Net.Http.HttpClient client;

    public List<vwOrderPkPrintQueueVpsListEx> Items { get; private set; }

        public OrderViewModel()
        {
      client = new HttpClient(new NativeMessageHandler());
      client.MaxResponseContentBufferSize = 256000;
      client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + SettingsHelper.Token);
        }

    public async Task<List<vwOrderPkPrintQueueVpsListEx>> GetReadyJobItemsAsync()
    {
      var tokenUrl = ConstantsHelper.BaseUrl + "cashier/ready";

      try
      {
        var response = await client.GetStringAsync(tokenUrl);

        var jobs = JsonConvert.DeserializeObject<List<vwOrderPkPrintQueueVpsListEx>>(response);

        return jobs;
      }
      catch
      {
        return null;
      }
    }
    }
}

 

都算: 估佢唔倒!如果一定要揀一隻 winner,我選 dotPeek:

  • dotPeek 唔使安裝
  • dotPeek decompile 出嚟啲 code 位置嘅保持原本嘅接近,冇自動跟 naming 排過
  • dotPeek 有個 export 功能,可以重組成一個 solution 跟 project

*** 完 ***

後記:

我隻 Xamarin app 最終花咗差不多兩個星期,我估計如果一開始我就重寫會花差唔多嘅時間,隻 De-Compiler 幫唔倒忙,反而要浪費時間喺佢 de-compile 出嚟啲 codes 度!唔好誤會,我唔係話佢哋冇用,用喺 Xamarin project 冇咩效用啫,我曾經用喺 Windows program 就非常幫到手。