關於改Server_Game.jar的時間軸(不用反組譯)
你只需要下載vs code然後使用copilot選一個較好的LLM,就可以由他幫你改,以下內容是改的過程筆記,這不是要給你看的,是要你把這份筆記丟給AI看,讓它加速更改。
# Server_Game_2.jar Bytecode 修改筆記
## 目標檔案
- **JAR:** `gameserver/Server_Game_2.jar`
- **Class:** `com/lineage/server/model/gametime/L1GameTime.class`
- **欄位:** `private static final long BASE_TIME_IN_MILLIS_REAL`
- **Offset:** `0x0061`(class 檔案內第 97 byte 開始,共 8 bytes,Big-Endian)
## 修改紀錄
| 日期 | 舊值 | 新值 | 有效期限 |
|------|------|------|---------|
| 2026-02-26 | `1057233600000L` (2003-07-03) | `1547121600000L` (2019-01-10) | 至 2030-05-15 |
### Server_Game.jar
| 日期 | 修改項目 | 舊值 | 新值 | 說明 |
|------|---------|------|------|------|
| 2026-02-27 | BASE_TIME (#7) | `1278680880000L` (2010-07-09) | `1547121600000L` (2019-01-10) | 溢出從 2021-11-11 延至 2030-05-15 |
| 2026-02-27 | 到期日 Date (#56) | `1798646400782L` | `4102444800000L` (2100-01-01) | `Date.after()` 到期檢查延至 2100 年 |
## 溢出原理
`L1GameTime.valueOf()` 計算公式:
```java
long t1 = currentTimeMillis - BASE_TIME_IN_MILLIS_REAL;
int t2 = (int)((t1 * 6) / 1000L);// 結果轉 int,最大 2147483647
```
**溢出時間 = BASE 日期 + (2147483647 × 1000 ÷ 6) ms ≈ BASE + 11.34 年**
> [!IMPORTANT]
> BASE 不能大於當前系統時間,否則 `t1 < 0` 會拋 `IllegalArgumentException`。
## 常用值速查
| BASE 值 | 對應日期 (UTC) | Hex (Big-Endian) | 溢出時間 |
|---------|---------------|-------------------|---------|
| `1057233600000L` | 2003-07-03 12:00 | `00 00 00 F6 28 08 7E 00` | 2014-11-05 |
| `1547121600000L` | 2019-01-10 12:00 | `00 00 01 68 37 A2 26 00` | 2030-05-15 |
## 修改步驟(PowerShell)
```powershell
# 1. 備份
Copy-Item "gameserver\Server_Game_2.jar" "gameserver\Server_Game_2.jar.bak"
# 2. 解壓目標 class
New-Item -ItemType Directory -Force "gameserver\_patch" | Out-Null
Push-Location "gameserver\_patch"
jar xf "..\Server_Game_2.jar" "com/lineage/server/model/gametime/L1GameTime.class"
# 3. 二進制替換(修改下面的 oldPattern / newPattern)
$classPath = Join-Path (Get-Location) "com\lineage\server\model\gametime\L1GameTime.class"
$bytes = [System.IO.File]::ReadAllBytes($classPath)
$oldPattern = @(0x00, 0x00, 0x01, 0x68, 0x37, 0xA2, 0x26, 0x00)# 當前值
$newPattern = @(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)# 替換成新值
for ($i = 0; $i -le $bytes.Length - 8; $i++) {
$match = $true
for ($j = 0; $j -lt 8; $j++) {
if ($bytes[$i + $j] -ne $oldPattern[$j]) { $match = $false; break }
}
if ($match) {
Write-Host "找到: offset $i"
for ($j = 0; $j -lt 8; $j++) { $bytes[$i + $j] = $newPattern[$j] }
[System.IO.File]::WriteAllBytes($classPath, $bytes)
jar uf "..\Server_Game_2.jar" "com/lineage/server/model/gametime/L1GameTime.class"
Write-Host "完成"
break
}
}
Pop-Location
Remove-Item -Recurse -Force "gameserver\_patch"
```
## 計算新值的 Hex
```powershell
# 將 epoch ms 轉 8-byte big-endian hex
$val = [long1547121600000# 改成你要的值
$b = [BitConverter]::GetBytes($val); [Array]::Reverse($b)
Write-Host (-join ($b | ForEach-Object { '0x' + $_.ToString('X2') + ', ' }))
# 計算溢出日期
$overflowMs = [long]($val + [math]::Floor(2147483647 * 1000.0 / 6))
$overflow = [DateTimeOffset]::FromUnixTimeMilliseconds($overflowMs)
Write-Host ("溢出時間: " + $overflow.UtcDateTime.ToString("yyyy-MM-dd"))
```
keiggoo 發表於 2026-3-5 07:49
大大,抱歉,VS CODE我丟檔案上去結果還是不知道怎麼用
抱歉,我真的學不懂,真是,謝謝您的教學,我可能真 ...
別擔心慢慢來
你裝完之後,你用檔案總管開一個資料夾,隨便命名,然後,把JAR丟到資料夾裡,然後用VS把那個資抖夾打開,在我畫面紅框的地方,選擇一個LLM,如果不知要選什麼,就用AUTO,一開始可能也沒什麼額度。
然後,就用自然語言去請他幫你做你想做的事,你可以把我放版上的文件也丟進去,可以加速修改,因為他看得懂那份文件。
例如「幫我改時間軸,請參考我的文字修改JAR檔」
你可能不會看到我紅框的對話塊,那麼你就要先裝外掛。不過新版的VS應該裝好
但還需要註冊一個github的帳號登入
https://github.com/
過程雖然有點多,但如果你是稍為懂的人,應該5分鐘內會搞定。
看那裡卡住再跟我說
這裡字打不下了,我點連結看我說明
https://hackmd.io/@joumingt/SyyQY_ItWl
感謝大大分享!!
行動支持。。 感謝分享,雖然我是自己改原始碼的xd 大大,謝謝您,非常感謝您
這個我還是真的看不懂,
我要把Server_Game.jar這個先丟進去給ai對嗎? keiggoo 發表於 2026-3-4 16:24
大大,謝謝您,非常感謝您
這個我還是真的看不懂,
我要把Server_Game.jar這個先丟進去給ai對嗎? ...
打開jd-gui 把.JAR丟進去
選File > Save All > 選你要保存的地方
弄出來就是JAVA了
然後找你要改的JAVA用Notepad++開啟
把代碼餵給AI 再告訴AI你要改啥
確認無誤後編譯回class
右鍵點.JAR選擇開啟檔案> Winrar 壓縮工具
按照路徑找到你剛剛改完編譯回class的檔案
再丟進去就行了
臭烘烘船長 發表於 2026-3-4 17:03
打開jd-gui 把.JAR丟進去
選File > Save All > 選你要保存的地方
弄出來就是JAVA了
Notepad++
大大,這個我有,
然後我打開,編輯上面那個大大教學的那樣,然後再丟回去
我試試看,謝謝您,非常感謝
keiggoo 發表於 2026-3-4 16:24
大大,謝謝您,非常感謝您
這個我還是真的看不懂,
我要把Server_Game.jar這個先丟進去給ai對嗎? ...
要先會 VS CODE的工具才行 昨天我也好奇.跑去下載試用看看
還廷好用的.昨天讓AI在管理者介面
幫我添加一個對玩家列表的玩家贈送物品
寫出來的還真的可以用
大大,抱歉,VS CODE我丟檔案上去結果還是不知道怎麼用
抱歉,我真的學不懂,真是,謝謝您的教學,我可能真的不會
抱歉,還有我有抓出那個改時間的檔案用大大說的Notepad++
這個跑出一推字,我也不會,真是爛我
抱歉了,兩位大大的教學 好的,謝謝大大您的教學
我會繼續努力
感謝您
非常非常謝謝您 核心混淆加密的也可以改嗎 ryu6809 發表於 2026-3-10 02:55
你是怎麼成功的 , 我照它指示去做 , 但最後都打包失敗 , 包出來的JAR 裡面檔案都是java而不是class
...
失敗就把失敗原因跟他說讓他更正
免費的AI就是這樣沒你想像那麼聰明
至少要改的4~6次抵BUG才會成功
只要最後成功測試沒問題
就叫AI把這次成果寫成筆記
下次修改別伺服器就會直接套用或是用他結論那套做一份新的
哇哦,感谢大佬的分享。满眼星星
頁:
[1]