基於Mono的Unity編輯器加密方案

2021-09-26 02:48:51 字數 2537 閱讀 9939

該部落格是寫給需要保護自己智財權的遊戲開發者,本文加密方式相對簡單易懂,但起到的效果足以讓大多數小白竊取者望而卻步

一.準備

2.visual studio 2010(2017的mono版本需要用此vs版本進行編譯)

3.加密的演算法(隨意,基於c編碼)

二.正文

1.修改載入原始碼(前幾部分比較簡單,不再一一贅述,直接進入主題)

monoimage *

mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, monoimageopenstatus *status, gboolean refonly, const char *name)

// 這裡的data為讀取dll後的資料

// 我們可以在這裡通過對名字的篩選來對我們已加密的dll進行解密

datac = data;

if (need_copy)

memcpy (datac, data, data_len);

} image = g_new0 (monoimage, 1);

image->raw_data = datac;

image->raw_data_len = data_len;

image->raw_data_allocated = need_copy;

image->name = (name == null) ? g_strdup_printf ("data-%p", datac) : g_strdup(name);

iinfo = g_new0 (monocliimageinfo, 1);

image->image_info = iinfo;

image->ref_only = refonly;

image->ref_count = 1;

image = do_mono_image_load (image, status, true, true);

if (image == null)

return null;

return register_image (image);

}

monoassembly *

mono_assembly_open_full (const char *filename, monoimageopenstatus *status, gboolean refonly)

} else

mono_trace (g_log_level_info, mono_trace_assembly,

"assembly loader probing location: '%s'.", fname);

new_fname = null;

if (!mono_assembly_is_in_gac (fname))

new_fname = mono_make_shadow_copy (fname);

if (new_fname && new_fname != fname)

image = null;

// 這裡會對讀取進來的資料進行分析

// 當bundles加密後,原來的dll資料格式被改變

// 所以我們需要在這裡做處理,讓讀進來的dll資料不被過濾

file * pfile;

long lsize;

char * buffer;

size_t result;

char*name;

name = g_path_get_basename(filename); // 獲取dll名稱

if (strstr(name, "my***.dll" != null) // 判斷是否符合需要解密條件(這裡是用dll的名稱)

else if (bundles != null)

image = mono_assembly_open_from_bundle (fname, status, refonly);

if (!image)

image = mono_image_open_full (fname, status, refonly);

if (!image)

if (image->assembly)

ass = mono_assembly_load_from_full (image, fname, status, refonly);

if (ass)

/* clear the reference added by mono_image_open */

mono_image_close (image);

g_free (fname);

return ass;

}

之後使用vs2010進行編譯替換即可生效

2018後,方法有所不同,後面我再找個時間更新下,原理基本還是一樣的

認識Unity編輯器

儲存整個專案所有資源的載體。專案中無論是從外部匯入的包 package 資源 後面有詳細 講解 模型資源,音訊資源,還是自己建立的各種指令碼 材質等,都需要在本檢視中儲存 編輯與展現出來。scene 場景檢視 視覺化展現與編輯當前場景中所有的遊戲物件。本檢視與上面層級檢視的區別是 場景檢視是視覺化遊...

Unity編輯器拓展

有時候為了加快效率,不得不做一些方便的小工具,尤其是有那種改變體屬性,調整ui布局,或者調整字型,有選擇性的新增修改元件的時候,如果乙個兩個手動該沒問題,如果物件數量很多,而且只是做一些簡單的更改的時候,那還是推薦大家先做乙個工具,還能練練手。時候會比如我們需要用鉸鏈把一串transform連起來,...

Unity編輯器擴充套件

unity引擎除了提供大部分通用的功能以外,還為開發者提供了編輯器的擴充套件開發介面,開發者可以編寫編輯器指令碼,打造適合自己的遊戲輔助工具和定製的編輯器。以前指令碼開發中使用的一些api和元件類,都屬於執行時類,unity還提供了編輯器類用於編輯器的擴充套件開發,包括編輯器環境下使用的gui類,編...