Feeds:
文章
迴響

Archive for the ‘C#’ Category

今天處理了一個 .netz 處理過的可執行檔, 依據 [1] 描述資料儲存在 .exe 的 resource 中, 執行階段再從 resource 讀出解壓縮最後從記憶體載入 Assembly

所以簡單的做法就是將解完的資料重導向檔案即可取得原始 dll

終於有機會試試 dnSpy 的鋒利, 步驟如下

1. dnspy 載入 .netz 處理過的 exe

2. 將 resource 的 zip.dll 匯出檔案

3. dnspy 載入 zip.dll

4. 修改 .exe 的 netz.NetzStarter.GetAssembly (加上紅色程式碼)

private static Assembly GetAssembly(byte[] data)
{
	MemoryStream memoryStream = null;
	Assembly result = null;
	try
	{
		memoryStream = NetzStarter.UnZip(data);
		memoryStream.Seek(0L, SeekOrigin.Begin);
		result = Assembly.Load(memoryStream.ToArray());
		memoryStream.Seek(0L, SeekOrigin.Begin);
		FileStream fileStream = File.Create("d:\\" + Guid.NewGuid().ToString("N") + ".dll");
		memoryStream.CopyTo(fileStream);
		fileStream.Close();
	}
	finally
	{
		if (memoryStream != null)
		{
			memoryStream.Close();
		}
		memoryStream = null;
	}
	return result;
}

5. 編譯 & 執行

6. d:\*.dll 就是原來的 dll

 

參考資料

[1] 藍色的飄漂, 反編譯 .NETZ 壓縮過的exe程序"

廣告

Read Full Post »

新案子需要 ASP.NET 於是用 VS2017 建立一個測試站, 結果一新增 ASP.NET Web Form 就彈出 “0x80070005 (E_ACCESSDENIED)" , 原本以為是權限問題, 後來 Google 後找到"Visual Studio 2017 HRESULT: 0x80070005 / E_ACCESSDENIED on project creation“解決我的問題

文中提到的方法是

1. 關閉所有的 visual studio 2017, taskkill /f /im devenv.exe

2. 刪除 %LocalAppData%\Microsoft\VisualStudio\15.0_57c28832\privateregistry.bin (紅色文字部分可能不同)

3. 啟動 visual studio 2017

 

 

 

*

Read Full Post »

ILSpy + Reflexil 修改 Class Property

話說有個C#寫的工具想修改一下. 已經找到修改點, 可是卻發現

20160121-1

屬性沒有反組譯成 IL orz

後來發現把語言切成 IL 才會出現, 這是 Bug 嗎

20160121-2

改了才注意到 C# 的 bool 轉成 IL 是 int32

return true

翻譯後就是

ldc.i4.1

ret

而 return false

翻譯後就是

ldc.i4.0

ret

此時我要的功能已經改完 XD… 繼續工作

 

 

Read Full Post »

(C#) 圖檔轉 HTML

之前那篇"原來 HTML 產生圖形是有工具 @﹍@",提到一種轉換方式,也提供 perl 的原始碼,今天我利用 C# 重寫一遍….
也移除 width * height 必須小於 10000 pixel 限制。不過,圖檔尺寸太大,最後產出的檔案也相當驚人,執行也會耗去大量記憶體

雖然,這個程式在產生 HTML 時,還有使用 Run Length Coding 概念,將同一種顏色透過 <table> 的 colspan 來減少 tag 的輸出…
不過,還是請小心使用..

主程式下載

執行結果[下載]
Snap1

Read Full Post »

[C#]Array 和 ArrayList 之間互轉

1. Array 轉 ArrayList
    1.1 使用 ArrayList 的建構子,其中一個可接受實作 ICollection 介面的物件
    1.2 使用 ArrayList 的靜態方法 Adapter,此方法可接收實作 IList 介面的物件
 
2. ArrayList 轉 Array
   2.1 使用 ToArray 方法
 
範例:
    class Program {
        static void Main(string[] args) {
            // Array To ArrayList           
            string[] names = new string[]{
                "Arick"
                ,"Mavis"
                ,"Ada"
                ,"Jeff"
            };
            // Method #1
            ArrayList al = new ArrayList(names);
            DumpList(al);
           
            // Method #2
            al = ArrayList.Adapter(names);
            DumpList(al);
            // ArrayList To Array
            string[] ss = (string[])al.ToArray(typeof(string));
            foreach (string  s in ss) {
                Console.WriteLine(s);
            }
        }
        private static void DumpList(ArrayList al) {
            foreach (object o in al) {
                Console.WriteLine(o as string);
            }
        }
}

Read Full Post »

[C#]一個監聽 http:// 伺服器的範例

using System;
using System.Net;
using System.Threading;
using System.IO;
namespace ConsoleApplication1 {
    public class ArickServer {
        private HttpListener listener = null;
        public ArickServer() {
            // 1. 建立 http 監聽
            listener = new HttpListener();
            // 2. 處理的統一資源識別元 (URI) 前置詞
            listener.Prefixes.Add("http://+:5678/");
            // 3. 啟動伺服器
            listener.Start();
            Console.WriteLine("Start…"); 
            while (true) {
                // 4. 等待接收使用者需求
                HttpListenerContext context = listener.GetContext();
                // 5. 分派一個 Thread 處理使用者需求
                ThreadPool.QueueUserWorkItem(new WaitCallback(OnGetContext), context);
            }
        }
        // 處理使用者需求
        public void OnGetContext(object objContext) {
            try {
                HttpListenerContext context = objContext as HttpListenerContext;
                if (objContext != null) {
                    // 設定回應的內容型態
                    context.Response.ContentType = "text/html";
                    // 寫入回應資料
                    StreamWriter writer = new StreamWriter(context.Response.OutputStream);
                    writer.WriteLine("<html><body><pre>");
                    writer.WriteLine("Method:" + context.Request.HttpMethod.ToString());
                    if (context.Request.HttpMethod == "POST") {
                        StreamReader sr = new StreamReader(context.Request.InputStream);
                        writer.WriteLine("Parameter:" + sr.ReadToEnd());
                        sr.Close();
                    } else {
                        writer.WriteLine("Parameter:" + context.Request.Url.Query);
                    }
                    writer.WriteLine("</pre></body></html>");
                    writer.Flush();
                    context.Response.Close();
                }
            } catch (System.Net.HttpListenerException hlEx) {
                Console.WriteLine( string.Format("{0}rn{1}", hlEx.Message, hlEx.StackTrace) );
            }
        }
    }
    class Program {       
        static void Main(string[] args) {
            ArickServer s = new ArickServer();
        }
    }
}

Read Full Post »

如何產生 guild 字串

全域唯一識別碼 (GUID)是一個 128-bit 組成的整數,也就是2的128 次方,使用通過亂數產生標準的亂數演算法產生 2的128 次方 其中之一的整數。
 
在 .Net Framework 中可以使用 Guid.NewGuid() 取得。

Read Full Post »

Older Posts »