[逆向][Writeup]ISG2015 flagfinder - .NET程序逆向

這個題目同樣是一道.NET的逆向題,.NET的逆向方法在之前的博文中已經介紹過,這里不做重復的說明。本題的源程序可以在我的github上下載:https://github.com/gsharpsh00ter/reverse

0x01 逆向

flagfinder為.NET編譯的PE文件,用dnSpy反編譯后,得到如下源碼:

  1 using System;
  2 using System.IO;
  3 using System.Linq;
  4 using System.Security.Cryptography;
  5 using System.Threading;
  6 using Microsoft.VisualBasic.CompilerServices;
  7 
  8 namespace flagfinder
  9 {
 10     // Token: 0x02000007 RID: 7
 11     [StandardModule]
 12     internal sealed class Module1
 13     {
 14         // Token: 0x06000012 RID: 18 RVA: 0x000020D4 File Offset: 0x000002D4
 15         [STAThread]
 16         //遍歷所有驅動器上的所有文件
 17         public static void Main()
 18         {
 19             DriveInfo[] drives = DriveInfo.GetDrives();
 20             checked
 21             {
 22                 for (int i = 0; i < drives.Length; i++)
 23                 {
 24                     DriveInfo driveInfo = drives[i];
 25                     if (driveInfo.IsReady)
 26                     {
 27                         Module1.SearchDir(driveInfo.RootDirectory);
 28                     }
 29                 }
 30             }
 31         }
 32 
 33         // Token: 0x06000013 RID: 19 RVA: 0x0000210C File Offset: 0x0000030C
 34         public static void SearchDir(DirectoryInfo dir)
 35         {
 36             checked
 37             {
 38                 try
 39                 {
 40                     FileInfo[] files = dir.GetFiles();
 41                     for (int i = 0; i < files.Length; i++)
 42                     {
 43                         FileInfo file = files[i];
 44                         //對于每一個文件,會進行檢查,找到符合條件的文件會打印flag
 45                         Module1.CheckFile(file);
 46                     }
 47                     DirectoryInfo[] directories = dir.GetDirectories();
 48                     for (int j = 0; j < directories.Length; j++)
 49                     {
 50                         dir = directories[j];
 51                         Module1.SearchDir(dir);
 52                     }
 53                 }
 54                 catch (Exception expr_49)
 55                 {
 56                     ProjectData.SetProjectError(expr_49);
 57                     Console.WriteLine("Unable to search: " + dir.FullName);
 58                     ProjectData.ClearProjectError();
 59                 }
 60             }
 61         }
 62 
 63         // Token: 0x06000014 RID: 20 RVA: 0x00002198 File Offset: 0x00000398
 64         public static void CheckFile(FileInfo file)
 65         {
 66             try
 67             {
 68                 Console.WriteLine("Analyzing " + file.FullName + " ...");
 69                 //此處為判斷條件,文件內容的MD5為指定值后會計算sha256哈希值,并打印flag
 70                 MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider();
 71                 if (mD5CryptoServiceProvider.ComputeHash(file.OpenRead()).SequenceEqual(Module1.target))
 72                 {
 73                     SHA256CryptoServiceProvider sHA256CryptoServiceProvider = new SHA256CryptoServiceProvider();
 74                     Console.WriteLine("We've found the flag on your hard drive:");
 75                     Console.WriteLine("ISG{" + BitConverter.ToString(sHA256CryptoServiceProvider.ComputeHash(file.OpenRead())).ToLower() + "}");
 76                     Environment.Exit(0);
 77                 }
 78                 Thread.Sleep(100);
 79             }
 80             catch (Exception expr_81)
 81             {
 82                 ProjectData.SetProjectError(expr_81);
 83                 Console.WriteLine("Unable to read: " + file.FullName);
 84                 ProjectData.ClearProjectError();
 85             }
 86         }
 87 
 88         // Token: 0x04000006 RID: 6
 89         private static byte[] target = new byte[]
 90         {
 91             108,
 92             203,
 93             97,
 94             69,
 95             90,
 96             216,
 97             146,
 98             25,
 99             144,
100             43,
101             58,
102             246,
103             10,
104             154,
105             45,
106             28
107         };
108     }
109 }

0x02 分析

程序邏輯比較簡單,運行后會遍歷驅動器上的所有文件,并對每一個文件進行檢查。如果某個文件的內容經過MD5哈希后是指定的值(target),則該文件為flag文件,此時會計算器sha256的哈希值,并打印flag。

顯然我們不太可能根據已有的MD5值去逆向破解出文件的內容。可以用google查一下對應的MD5值。在http://www.herdprotect.com/a2cmd.exe-12fc1578b371d0847bf158eefb36f85f42cb9fb3.aspx這個頁面,我們發現相關的信息:

MD5: 6ccb61455ad89219902b3af60a9a2d1c

Sha256: 4cbce92e74fc64dba2b0c5194dd54bf7d694d37fc758572f46bd5b3b8a0c1a80

這應該是一個惡意文件的MD5值,雖然我們沒有該文件,但是沒關系,我們已經得到了sha256的哈希值,根據程序邏輯,我們已經可以自己打印flag了。

打印flag的python代碼如下:

 1 #!/usr/bin/python2
 2 
 3 #targets = [108, 203, 97, 69, 90, 216, 146, 25, 144, 43, 58, 246, 10, 154, 45, 28]
 4 md5="6ccb61455ad89219902b3af60a9a2d1c"
 5 sha256="4cbce92e74fc64dba2b0c5194dd54bf7d694d37fc758572f46bd5b3b8a0c1a80"
 6 flag="ISG{"
 7 
 8 for i in range(0, len(sha256), 2):
 9     flag = flag + sha256[i:i+2] + "-"
10 flag += "}"
11 flag = flag.replace("-}", "}")
12 print flag

運行結果如下:

Flag為:

ISG{4c-bc-e9-2e-74-fc-64-db-a2-b0-c5-19-4d-d5-4b-f7-d6-94-d3-7f-c7-58-57-2f-46-bd-5b-3b-8a-0c-1a-80}

轉載于:https://www.cnblogs.com/gsharpsh00ter/p/6404940.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259584.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring是如何管理 事務的

Spring提供的事務管理可以分為兩類&#xff1a;編程式的和聲明式的。編程式的&#xff0c;比較靈活&#xff0c;但是代碼量大&#xff0c;存在重復的代碼比較多&#xff1b;聲明式的比編程式的更靈活方便。 1、傳統使用JDBC的事務管理 以往使用JDBC進行數據操作&#xff0c;使用…

java 編譯原理 字符串_Java編譯原理(javac)

Java中的編譯分為兩個部分&#xff1a;源碼文件編譯成字節碼文件(前端編譯)字節碼文件被虛擬機加載以后編譯成機器碼(后端編譯)對于開發來說接觸的一般都是第一個步驟也就是源碼編譯成字節碼文件(class文件)&#xff0c;第二個步驟開發幾乎不會接觸&#xff0c;因為這是虛擬機在…

sql2012一段時間無法連接報53錯誤

2019獨角獸企業重金招聘Python工程師標準>>> 解決方案 在sqlserver網絡配置下的msqlserver協議下改將ip3改成如下圖所示 轉載于:https://my.oschina.net/u/2511906/blog/840373

ICE第三篇------一些疑難點

1 間接代理 參考http://blog.sina.com.cn/s/blog_53e8499c0100lkoo.html IceGrid用于支持分布式網絡服務應用&#xff0c;一個IceGrid域由一個注冊表&#xff08;Registry&#xff09;和任何數目的節點(Node)構成。注冊表&#xff08;Registry&#xff09;和節點(Node)一起合作…

windows phone 8 使用頁面傳對象的方式 實現頁面間的多值傳遞

在做windows phone 開發的時候&#xff0c;會經常碰到頁面間之間的跳轉和傳遞數據&#xff0c;如果傳遞的值不多&#xff0c;只有兩三個&#xff0c;我們通常使用NavigationService.Navigate(new Uri("頁面名? Name“”&ID“ ”, UriKind.Relative)); 要是碰到要傳遞…

php生成圖片驗證碼代碼,PHP生成圖片驗證碼以及點擊切換的代碼

這篇文章主要介紹了PHP生成圖片驗證碼實例,同時介紹了點擊切換(看不清&#xff1f;換一張)效果實現方法,需要的朋友可以參考下這里來看下效果:現在讓我們來看下 PHP 代碼<?php session_start();function random($len) {$srcstr "1a2s3d4f5g6hj8k9qwertyupzxcvbnm&quo…

python 時間日期處理

refer to : http://www.wklken.me/posts/2015/03/03/python-base-datetime.html#datetime-string http://www.cnblogs.com/65702708/archive/2011/04/17/2018936.html http://www.runoob.com/python/python-date-time.html 轉載于:https://www.cnblogs.com/qingyuanjushi/p/640…

php 字符型轉變為數值,php怎么把字符串轉換為數值?

php怎么把字符串轉換為數值&#xff1f;下面本篇文章給大家介紹一下PHP把字符串轉換為數值的方法。有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對大家有所幫助。PHP中的字符串可以很容易地轉換成數值(float / int / double類型)。在大多數用例中&am…

解決rspec 生成報告時報utf-8錯誤的方法

找到gems\1.9.1\gems\rspec-core-2.14.3\lib\rspec\core\formatters\snippet_extractor.rb文件中的第27行&#xff1a; 在這邊記錄一下&#xff0c;防止以后再遇到。。。出現這個原因是因為ruby文件用utf-8格式的&#xff0c;但是源碼都是GBK處理的&#xff0c;找到\lib\ruby\…

aspose.words復制插入同一word文檔中的某個頁面

選擇word模板 Document doc new Document(Server.MapPath("~\\templet") "\\" name.Name);doc.MailMerge.CleanupOptions doc.MailMerge.CleanupOptions & ~MailMergeCleanupOptions.RemoveUnusedRegions;DocumentBuilder builder new DocumentBu…

開源游戲服務器C#

https://github.com/ScutGame/Scut/wiki轉載于:https://www.cnblogs.com/porter/p/6408955.html

EFProf Entity Framework Profile 工具

SQL Server Profiler用來跟蹤應用程序發送到SQL Server中的SQL語句&#xff0c;用于檢測性能&#xff0c;查找問題。Entity Framework 也有它的跟蹤工具EFProf&#xff0c;用于跟蹤Entity Framework發送到SQL Server中的SQL語句。 首先在代碼中添加對程序集HibernatingRhinos.P…

php面試中的問題,十個值得深思的PHP面試問題

十個值得深思的PHP面試問題過來人在以往的面試中總結的10個值得深思的 PHP 面試問題&#xff0c;希望對你現在的面試有用&#xff0c;少走彎路&#xff0c;更多內容請關注應屆畢業生網!Q1第一個問題關于弱類型$str1 yabadabadoo;$str2 yaba;if (strpos($str1,$str2)) {echo &…

Android中ExpandableListView控件基本使用

本文採用一個Demo來展示Android中ExpandableListView控件的使用&#xff0c;如怎樣在組/子ListView中綁定數據源。直接上代碼例如以下&#xff1a; 程序結構圖&#xff1a; layout文件夾下的 main.xml 文件源代碼例如以下&#xff1a; <?xml version"1.0" encodi…

【暴力】Codeforces Round #398 (Div. 2) A. Snacktower

題意不復述。 用個bool數組記錄一下&#xff0c;如果某一天&#xff0c;當前剩下的最大的出現了的話&#xff0c;就輸出一段。 #include<cstdio> using namespace std; int n; bool vis[100010]; int main() { // freopen("a.in","r",stdin);scanf(&…

javascript的對象創建模式---命名空間模式

javascript中對象的概念是很普遍的&#xff0c;對象是是對象&#xff0c;數組是對象&#xff0c;函數也是對象&#xff0c;字符串其實也是對象。常見的對象創建方法有對象字面量、構造函數創建。我們先來看看對象的創建還有哪些更高級的模式。 一、命名空間模式 二、模塊模式 三…

把Liststring集合,編程string,并以“,”號分割

List<int> roleIdList GetRoleIdList(user.ID); string roleIdsStr ""; if (roleIdList ! null) {roleIdsStr string.Join(",", roleIdList); } 轉載于:https://www.cnblogs.com/lijingran/p/6420364.html

武林外史java游戲,武林外史_網絡游戲專區_騰訊游戲頻道

1 、武師用防御工具1) 武衛類> 用土布制作的防護工具。階段圖片名稱說明1武威帶所需功力值所需力量所需技藝所需體力所需智能所需敏捷性防御力防御成功率8013013021 %武威甲所需功力值所需力量所需技藝所需體力所需智能所需敏捷性防御力防御成功率4160150021 %武威長褲所需功…

簡單實現KeyChain實例

目錄結構如下&#xff1a; AppDelegate.m 1 //2 // AppDelegate.m3 // KeyChain4 //5 // Created by apple on 14-12-26.6 // Copyright (c) 2014年 ll. All rights reserved.7 //8 9 #import "AppDelegate.h" 10 11 interface AppDelegate () 12 13 end 14 1…

Oracle 建立包 和 包體

--創建包create or replace package pac_stuastype cur_stu is ref cursor;procedure getStu(i in number,cur_stu out cur_stu);end pac_stu;--創建包體create or replace package body pac_stuasprocedure getStu(i in number,cur_stu out cur_stu)asnums number(10);begins…