綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] 修改Assembly-CSharp的疑問

 關閉 [複製連結] 查看: 1123|回覆: 3|好評: 0
跳轉到指定樓層
樓主
e0ru8jo | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2016-10-2 11:26

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
修改Assembly-CSharp的時候
一般來說入門應該就只是利用.NET Reflector+reflexil,或者ildasm,弄出IL
改改個參數然後存個檔(以前有篇文章是白貓那邊發出來的)

因為一些遊戲大神不再更新,想要嘗試自己更改
我自己本身也就只會改參數而已...
但是解開來看,好不容易找到他們修改的地方
(許多修改者貌似都會打亂程式碼,這個是用甚麼軟體辦到的阿XD)
原本是
// Code size       12 (0xc)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance class PlayerData BattleCardBase::get_PlayerData()
    IL_0006:  callvirt   instance int32 CardBaseData::GetAtk()
    IL_000b:  ret

但是我看他改成這樣
// Code size       46 (0x2e)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  callvirt   instance bool BattleCardBase::get_PlayerHere()
    IL_0006:  brtrue     IL_000d

    IL_000b:  ldc.i4.0
    IL_000c:  ret

    IL_000d:  ldarg.0
    IL_000e:  call       instance class PlayerData BattleCardBase::get_PlayerData()
    IL_0013:  callvirt   instance int32 CardBaseData::GetAtk()
    IL_0018:  newobj     instance void [mscorlib]System.Random::.ctor()
    IL_001d:  ldc.i4     0x32
    IL_0022:  ldc.i4     0x64
    IL_0027:  callvirt   instance int32 [mscorlib]System.Random::Next(int32,
                                                                      int32)
    IL_002c:  mul
    IL_002d:  ret


這時候我用IL直接去Notepad++修改存檔,包不回去dll
但是用.NET Reflector,我也不知道他是怎麼reflexil新增出來這麼多的
看il指令看起來他自己也有新增函數的樣子,例如get_PlayerHere()
這個我也不知道他是如何用.NET Reflector加進去

有沒有大神能夠提供進階教學,或者....哪邊可以學習

題外話.NET Reflector可以用C#去觀看
那他有辦法直接去修改程式碼在包回去嗎?
貌似修改都是要靠reflexil,不能直接動程式碼
假設以後要新增好幾行程式碼,那有沒有方便的方式
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
william8888 | 收聽TA | 只看該作者
發表於 2016-10-2 11:52
應該是用 ilasm 將 il 包回 dll. 有安裝 .net 套件應該會有 ilasm 這工具

似乎並非新增函數, 是呼喚另一個函數, 在 BattleCardBase 內有一函數叫 "get_PlayerHere", 試試在 BattleCardBase 內找找

至於修改, 似乎不是用 reflexil, 應該是用類似 notepad 的文字編輯器, 然後用 ilasm 包回 dll.

用 c# 觀看, 只是 "觀看" 用途, 最後還是要用 il 方式修改.
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
mn1 | 收聽TA | 只看該作者
發表於 2016-10-2 12:13
你用ildasm反編譯出來有 xxxxx.res 的這檔嗎?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
 樓主| e0ru8jo | 收聽TA | 只看該作者
發表於 2016-10-2 15:25
william8888 發表於 2016-10-2 11:52
應該是用 ilasm 將 il 包回 dll. 有安裝 .net 套件應該會有 ilasm 這工具

似乎並非新增函數, 是呼喚另一個 ...

在原版是沒有get_PlayerHere的函數
但是在修改版裡面有,所以我推測是作者自己新增的

我原本就是用notepad在修改,但是不曉得為何就是無法用ilasm包回去dll
他說有錯誤,在想是不是因為學那位作者修改的時候,遺漏了什麼函數QQ
如果只是修改參數是可以包的回去,但是如果是像這位作者一樣新增多行,就包不回去ˊ口ˋ

可惜了,還以為有甚麼方是可以方便直接程式碼修改
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
 樓主| e0ru8jo | 收聽TA | 只看該作者
發表於 2016-10-2 15:26
mn1 發表於 2016-10-2 12:13
你用ildasm反編譯出來有 xxxxx.res 的這檔嗎?

有的,不過我有記得下res的指令
我正常自己修改是包的回去

但是如內文那樣修改,我就包不回去了= =
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則