題目:https://buuoj.cn/challenges#[FlareOn2]YUSoMeta

查殼

使用ExeinfoPe查殼,發現是.net程序加了混淆,嘗試使用提示的.NET Generic unpacker的工具去除混淆,發現不行

Untitled

拉入DIE,發現其所使用的混淆名為Smart Assembly,可使用de4dot工具來去除

Untitled

使用de4dot去除混淆

Untitled

  • 進入\Release\net45,可以看到de4dot.exe
  • 使用指令de4dot.exe -d [path]查看用了哪種混淆,確定了果真是SmartAssembly

Untitled

  • 使用指令de4dot.exe [path] -p sa去除SmartAssembly混淆,反混淆後的檔案放在了原exe的目錄
  • 選項說明-p sa:指定混淆類型,sa代表SmartAssembly

Untitled

代碼分析

  • 將反混淆後的程序拉入dnSpy進行分析
  • 找到如下的關鍵地方,發現只要test == b時就能得到flag,易知test是用戶輸入,而b的生成又與text無關,因此直接動調獲取b的值

Untitled

  • 得出b = \u001DL{a\0^o\u0017[nm\u001DEn\u0017@|h\u0015^d_5C047EAE20B8A616D34B9BE06D342C54,輸入後發現不對
  • 猜測可能是因為反混淆的過程中,某些地方修復錯誤所導致,因此這時嘗試打開原文件,找到相同的地方,重新獲取一次數據

Untitled

取得的數據為metaprogrammingisherd_DD9BE1704C690FB422F1509A46ABC988

Untitled

輸入後,果真得到flag

Untitled

資料參考