現在用unity的遊戲大多都加密了assembly-csharp.dll, 這篇文章給出乙個通用的解密方法。
原理是通過呼叫遊戲自身的libmono.so的匯出函式mono_image_open_from_data_with_name
對遊戲自身指令碼檔案的解密。
#include #include struct _monoimage ;
int main()
// 使用 dlsym 函式,嘗試解析新開啟的物件檔案中的符號。您將會得到乙個有效的指向該符號的指標,或者是得到乙個 null 並返回乙個錯誤
mono_image_open_from_data_with_name = dlsym(libm_handle,"mono_image_open_from_data_with_name");
errorinfo = dlerror();// 呼叫dlerror方法,返回錯誤資訊的同時,記憶體中的錯誤資訊被清空
if (errorinfo != null)
printf("call mono_image_open_from_data:0x%x\n", mono_image_open_from_data_with_name);
const char* pdll = "/data/local/tmp/assembly-csharp.dll";
file *fpdll;
fpdll = fopen(pdll, "r");
if(fpdll == null)
fseek(fpdll, 0, seek_end);
int len = ftell(fpdll);
fseek(fpdll, 0, seek_set);
char *data = (char *)malloc(len);
fread(data, 1, len, fpdll);
fclose(fpdll);
result = (*mono_image_open_from_data_with_name)(data, len, 0, 0, "assembly-csharp.dll");
printf("call result:0x%x\n", result);
char *pdata = result->raw_data;
int size = result->raw_data_len;
printf("%d", size);
file* pfile = fopen("dump.dll","wb");
fwrite(pdata,size,1,pfile);
fclose(pfile);
dlclose(libm_handle);
return 0;
}
這裡提供乙份編譯好的檔案
訪問密碼 36eb
Unity遊戲狀態指令碼控制思考
最近忙,好久沒發部落格的,見諒。突發奇想,unity的各個指令碼是怎麼有條不紊運作的,於是自己簡單的用c 控制台程式模擬下,只是理下思路,具體的流程自己去體會,輕噴,不囉嗦,直接上 首先是遊戲指令碼介面,如下 inte ce igame 有了指令碼介面我們就能夠去實現具體邏輯了,這裡就簡單的實現兩個...
提取Unity遊戲資源和指令碼
直接預覽 檢視場景樹狀結構 檢視shader 檢視文字內容 1.unity編譯後最終會將 編譯在dll裡面,無論是ios還是android解開包以後都可以拿到dll,路徑在data managed assembly csharp.dll 2.ios其實不用做 混淆,應該是蘋果幫我們做了,反編譯以後只...
Unity3d DLL指令碼通用解密方法
網上已經有很多文章講解過unity3d指令碼dll 解密,基本方法原理都差不多,就是通過hook或者除錯下斷mono image open from data with name這個函式拿到解密後的dll。這些方法都需要比較專業的知識 hook或者過反除錯 另外對於使用了強度比較高的第三方保護,也無...