該部落格是寫給需要保護自己智財權的遊戲開發者,本文加密方式相對簡單易懂,但起到的效果足以讓大多數小白竊取者望而卻步一.準備
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類,編...