.Net Reactor混淆導致匿名類處理出現的問題處理分析

来源:https://www.cnblogs.com/wuhuacong/archive/2019/09/29/11608230.html
-Advertisement-
Play Games

.Net Reactor 是一款比較不錯的混淆工具,比VS自帶的那個好用很多,一直以來也陪伴著我們的成長,雖然沒有完美的混淆工具,不過也算還是不錯的,至少能在一定程度上對DLL進行一定的保護處理。 不過最近客戶反映我們在混合框架刪除操作的時候,沒有如期的實現刪除操作,由於混合框架是基於Web ... ...


.Net Reactor 是一款比較不錯的混淆工具,比VS自帶的那個好用很多,一直以來也陪伴著我們的成長,雖然沒有完美的混淆工具,不過也算還是不錯的,至少能在一定程度上對DLL進行一定的保護處理。

不過最近客戶反映我們在混合框架刪除操作的時候,沒有如期的實現刪除操作,由於混合框架是基於Web API / WCF這樣的分散式開發方式,因此和普通跟蹤的方式有所不同,針對Web API的使用是比較廣泛的在雲端實現數據集中管理的一種方式,相對普通的調試來說,難度增加了一些,需要在服務端(本篇主要是Web API操作)進行調試,以及在客戶端界面進行聯合調試處理。

本篇隨筆主要介紹如何在碰到基於分散式處理數據的介面的時候,對錯誤問題的分析和逐步縮小範圍的方式進行排查,最終解決問題的分析處理過程。

1、定位問題的發生

在我們出現問題的時候,往往需要定位在那個部分出現了錯誤,首先我們在客戶端和服務端都需要進行跟蹤調試,首先我們需要在Web  API 層跟蹤對應的控制器操作是否獲得對應要刪除記錄的ID值。

我們前面功能測試的時候,發現所有刪除操作都出現了無法刪除的問題,因此很可能是沒有傳遞ID值,或者轉換過程中出現了問題。

我們伺服器端的刪除操作介面如下所示。

        /// <summary>
        /// 根據指定對象的ID,從資料庫中刪除指定對象(用於整型主鍵)
        /// </summary>
        /// <param name="key">指定對象的ID</param>
        /// <returns>執行成功返回<c>true</c>,否則為<c>false</c></returns>
        [HttpPost]
        public virtual CommonResult Delete(KeyInfo keyInfo, string token, string signature, string timestamp, string nonce, string appid)
        {
            //檢查用戶是否有許可權,否則拋出MyDenyAccessException異常
            base.CheckAuthorized(AuthorizeKey.DeleteKey, token, signature, timestamp, nonce, appid);

            CommonResult result = new CommonResult();
            try
            {
                if (keyInfo != null)
                {
                    result.Success = baseBLL.Delete(keyInfo.id);
                }
            }
            catch (Exception ex)
            {
                LogTextHelper.Error(ex);//錯誤記錄
                result.ErrorMessage = ex.Message;
            }
            return result;
        }

其中的KeyInfo類是我們定義的一個實體類,定義代碼如下所示。

    /// <summary>
    /// 用於刪除的ID對象
    /// </summary>
    [Serializable]
    public class KeyInfo
    {
        /// <summary>
        /// ID主鍵
        /// </summary>public object id { get; set; }
    }

我們在調試Web API控制器的時候,無法獲得KeyInfo參數的值,如下界面所示。

 那麼可能KeyInfo無法被反序列化,又或者是KeyInfo沒有傳遞過來,我們跟蹤對應的介面,方向本來應該在客戶端POST提交的ID信息,無法提交過來。

這個是針對客戶端提交操作的抓包處理,本來想用Fiddler來抓取的,不過Fiddler好像無法直接抓取localhost的請求包體,通過代理設置沒有處理成功,改用以前用的很順手的 HttpAnalyzer,直接運行就可以抓取了,非常方便。

通過上面的操作,我們發現數據沒有提交到控制器裡面,因此排除Web API控制器反序列化對象的時候丟掉值的可能,而是客戶端根本沒有提交數據過來

2、定位具體的值丟失位置

那麼我們回到對刪除操作的統一處理方法裡面看看,有Delete和Delete2操作類似,分別對應不同類型處理。

 我們發現這裡的處理,是直接把ID傳遞過來構建一個匿名對象,然後序列化為JSON字元串提交給Web API控制器處理的。在界面上主要就是通過統一調用進行刪除的,傳遞ID給對應介面進行處理的。

以許可權系統模塊,用戶刪除操作為例,它的界面端處理代碼如下所示。

 以上代碼我增加了一行用來記錄是否獲得ID的內容的,通過日誌記錄,可以看到有ID傳遞給介面處理了。

 這樣看到,問題出現在介面的處理裡面,也就是可能由於我對DLL採用了混淆操作,導致的匿名類解析出現了問題了。

我們首先重寫一下具體類的刪除介面操作,跟蹤一下問題。

 

  為了有效驗證我們的問題出現在這裡,我們對比勾選和取消了紅色勾選,編譯後的代碼進行測試。

對比處理結果,我們可以看到混淆前後,介面獲得的數據不同,因此可以知道是混淆導致匿名類處理出現了問題。

 於是,我們對所有相關的DLL,取消對應的這個混淆選項,運行可以得到正確的結果。

 以上就是我們對這個.Net Reactor混淆導致匿名類處理出現的問題處理分析,其中主要涉及到了客戶端localhost地址的本地抓包處理,採用了比較方便易用的HttpAnalyzer來分析是否數據提交有問題,還是數據解析出現問題,定位問題的邊界,然後逐步對界面和介面部分進行分析。

由於對DLL混淆導致的錯誤問題,一般來說不易推斷,所以儘可能多的列出可能影響的因素,逐一測試解決,慢慢縮小範圍即可獲得解決問題的辦法。

 


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

-Advertisement-
Play Games
更多相關文章
  • 做技術的人,要不要學一學Git呢? 提出這個問題,是因為很多小伙伴還不會使用Git。 對於任何新一代的技術工具,它在業界普及都有一個過程,Git的阻礙是:學習成本、工具迭代的成本。 SVN誕生於2001年,由於較為先進的管理方式而迅速取代了CVS。 很多80後小伙伴都是從SVN開始上手的,大家都熟練 ...
  • 一、抽象和封裝是面向對象編程的基礎特性,抽象用來忽略細節,在不同的層次上處理細節,封裝則實現了對細節的不同程度的訪問許可權;即抽象允許相關信息可視化,封裝用來實現所需級別的抽象; 1.根據封裝的原則,命名空間可以指定其中每個類型對外部代碼的可訪問性,類和結構可以指定其中每個成員對外部代碼的可訪問性,可 ...
  • 本文為技術討論,思路記錄,為以後如有需要用到此業務場景提供參考。 業務背景: 一個中小型企業,擁有多個軟體產品,服務的客戶的需求也是五花八門,有時候用一個版本庫會極難處理和均衡各方需求,出於管理方便,可能就每個客戶有對應的一套源碼進行管理,因此需要有一套自動化管理軟體的發佈服務程式。否則版本管理的工 ...
  • 當我們在登錄一些網站的時候,需要第三方的登錄。比如,現在我們要登錄簡書https://www.jianshu.com/sign_in,我們使用微博登錄,點擊下方的一個微博的小按鈕,就會出現這麼一個地址https://api.weibo.com/oauth2/authorize?client_id=1 ...
  • 一般的 時間戳 格式分為兩種 即 10位(秒)時間戳 與 13位(毫秒)時間戳 時間戳 類型也分為兩種 即 本地時間戳 與 世界統一(UTC)時間戳 廢話不多說,直接上代碼: 一、時間戳獲取方法 二、時間戳驗證方法 三、由 時間戳 轉換為 DateTime 方法 ...
  • 開發環境 Vs2019 16.3.1 dotnetcore 3.0 一、開始 1. 新建webapp項目 或Vs 中新建項目選擇 Web應用程式。 在StartUp.cs 中增加兩處配置。 ConfigureServices 方法: Configure 方法 1. 使用Vs打開項目,預設頁面和目錄暫 ...
  • .net開發。用VS2017工具,打開VS2010創建的WebSevice工程時,提示工程不可用。 重新載入後提示:已經在解決方案中打開了具有該名稱的項目。 該問題原因是因為啟用了源代碼管理工具的問題。 打開sln文件,刪除其中的關於這個WebService的配置信息。如下: SccProjectU ...
  • 這個問題原因是因為安裝了高版本的office然後卸載掉,又安裝了低版本的office導致的。 博主是 office2016卸載後,安裝了office2013. EXCEL報錯信息為: 無法將類型為“Microsoft.Office.Interop.Excel.ApplicationClass”的 C ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...