微信扫一扫 分享朋友圈

已有 2029 人浏览分享

[服務器教學] GMS國際服直接打中文字的破解方法以及思路 「作者」: 小伍

[複製鏈接]

站長

Rank: 12Rank: 12Rank: 12

1762

威望

2943

金錢

106

A幣
主題
1315
帖子
2440
精華
3
綜合社群主題發文量
262
電玩社群主題發文量
1
娛樂社群主題發文量
4
技術社群主題發文量
26
閱讀權限
200
註冊時間
2013-1-28

我是傳奇贊助感謝勳章精華作者勳章

  • TA的每日心情

    2023-10-27 16:33
  • 簽到天數: 381 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    TWAICL 發表於  2021-9-29 19:19:08 | 顯示全部樓層 | 閱讀模式

    14492603_1359190924106277_7642528796341692754_n.jpg

    今天,給大家帶來的是如何破解國際服中聊,直接打中文字,並且修復多國語言輸入法【v62為例】

    首先,請你們跟著我的思路思考,楓之谷在打字的時候,是不是調用了主程序中原有的輸入法插件,然後來捕獲外界輸入法打出的字?或者說國際服壓根就沒有?當然這種猜想我們必須到程序中去調試才可以得出結果。
    這時候打開我們的ollydbg,然後運行62版本的私服。點擊ollydbg的文件-附加-選擇v62的進程

    這時候ollydbg窗體就會加載完畢。我們來思考,獲取的輸入法插件,那麼一定調用的imm32這個API
    有了這個思路,我們就可以很容易定位到處理輸入法的位置,我已經定位好了

    d951b874d08ab1a9 (1).png

    黃色部位為基址,紅色為Aob,藍色為彙編代碼區,紫色為代碼注釋
    且看彙編代碼分析

    [AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    int __thiscall type(int this, int a2)//這裡是從程序里調入的方法。含兩參數,this就是這個函數本體。而a2應該就是控制是否屏蔽輸入插件
    
    {
    
      /*
    
      *變量聲明區域
    
      *
    
      */
    
      int v2; // edi@1
    
      _DWORD *v3; // esi@2
    
      int v4; // ebx@2
    
      int result; // eax@2
    
      _DWORD *v6; // esi@4
    
      int v7; // edi@4
    
    
    
      v2 = this;
    
      if ( a2 )//最前面傳下來的參數,拿過來判斷
    
      {
    
      /*這裡應該是將result變量賦值為調出輸入法*/
    
        v3 = (_DWORD *)(this + 164);
    
        v4 = v0(*(_DWORD *)(this + 164));
    
        result = v0(*v3, v4);
    
        if ( !v4 )
    
          result = v0(*v3, *(_DWORD *)(v2 + 168));
    
      }
    
      else
    
      {
    
      /*這裡應該是將result變量賦值為不調出輸入法*/
    
        v6 = (_DWORD *)(this + 164);
    
        v7 = v0(*(_DWORD *)(this + 164));
    
        result = v0(*v6, v7);
    
        if ( v7 )
    
          result = v0(*v6, 0);
    
      }
    
      return result;
    
    }

    那我們的思路就是把
    if ( a2 
      {

    這個條件讓他永遠成立。那麼我們就要將

    8460a607adcd2736.png

    這個語句令他失效
    選中這個語句,右鍵-二進制-用NOP填充。這時候遊戲中應該可以調出輸入框了。

    但是打不出去的,這裡肯定是還有
    其他的判斷。這裡我們留著作為明天的講義來說吧


    既然我們已經可以在遊戲中直接打出中文,那麼在發送的時候為什麼是無法發送出去的呢?這裡我們一起來思考這個文字處理的流程
    首先-調出輸入法的插件-捕獲輸入的字符-發送-??-??-角色顯示
    (作者注釋:這裡的??就是代表我們未知的處理流程)
    這裡我們可以猜想。如果你是開發者,為了統一遊戲語系編碼問題,你會怎麼做呢?
    是不是會去檢測每個輸入的字符?然後排除異類?
    至少我是會這麼做。
    那麼我們如何來找到哪裡是處理這些字符的地方呢?
    這裡我放出死碼定位法來查找這些處理的位置
    用ollydbg附加MapleStory.exe[這裡我用的是v83的客戶端]
    然後點擊ctrl+b
    輸入以下特征碼C6 47 01 20 C6 07 20
    查找之後出來的基址是如此的

    [AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    008D54A6   /74 0B           je X008D54B3
    
    008D54A8   |C647 01 20      mov byte ptr ds:[edi+0x1],0x20
    
    008D54AC   |C607 20         mov byte ptr ds:[edi],0x20
    
    
    
    

    且看這裡的代碼分析。

    [AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
     if ( IsDBCSLeadByte(*(_BYTE *)v9) )//判斷文字是否為中文字符。
    
            {
    
              *(_BYTE *)(v9 + 1) = 32;//是中文字符就去掉這些字符或者轉碼掉
    
              *(_BYTE *)v9 = 32;//是中文字符就去掉這些字符或者轉碼掉
    
              v9 += 2;
    
            }


    然後把找到的兩個mov指令【科普下。這是數據傳送指令。把一個數據從源地址傳送到目標地址
    右鍵二進制-用nop填充
    這時候我們在遊戲中打出的中文可以輸出了。但是看到是null。這個怎麼辦呢,說明我們少了一步。這個步驟的功能就是把發出去的字轉碼成Unicode碼(國際服都這麼轉碼)
    同樣的,使用死碼定位法。特征碼我為你們找好了:C6 47 01 20 C6 06 20
    這時候出現的是和我們上次找的差不多的mov

    [AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    00937225   /74 18           je X0093723F
    
    00937227   |C646 01 20      mov byte ptr ds:[esi+0x1],0x20
    
    0093722B   |C606 20         mov byte ptr ds:[esi],0x20
    
    

    這裡我們也是選擇NOP掉
    藉此,我們的遊戲已經支持中文聊天了

    感謝各位朋友


    【作者】小伍





    共收到 0 A幣
    打賞榜
    暫無
    暫無
    暫無
    暫無
    ----
    暫無
    ----
    暫無
    ----
    暫無
    ----

    集團新軍

    Rank: 1

    1

    威望

    6

    金錢

    0

    A幣
    主題
    1
    帖子
    7
    精華
    0
    綜合社群主題發文量
    1
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2021-3-29
  • TA的每日心情

    2021-4-3 14:49
  • 簽到天數: 1 天

    連續簽到: 0 天

    [LV.1]初來乍到

    murong_mz 發表於 2021-10-1 09:06:09 | 顯示全部樓層
    請問下,GMS083修改了中文,但是非聊天狀態下,按鍵盤也會出現中文,該怎樣解決它。

    中流砥柱

    Rank: 8Rank: 8

    3700

    威望

    10萬

    金錢

    18

    A幣
    主題
    2
    帖子
    129
    精華
    0
    綜合社群主題發文量
    47
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    1
    閱讀權限
    80
    註冊時間
    2020-6-23
  • TA的每日心情
    奮鬥
    昨天 23:51
  • 簽到天數: 1228 天

    連續簽到: 81 天

    [LV.10]以壇為家III

    vic 發表於 2021-10-5 23:06:46 | 顯示全部樓層
    murong_mz 發表於 2021-10-1 09:06
    請問下,GMS083修改了中文,但是非聊天狀態下,按鍵盤也會出現中文,該怎樣解決它。 ...

    請問你的GMS083腳本有辦法顯示中文嗎@@
    我改腳本編碼也沒用

    集團新軍

    Rank: 1

    1

    威望

    6

    金錢

    0

    A幣
    主題
    1
    帖子
    7
    精華
    0
    綜合社群主題發文量
    1
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2021-3-29
  • TA的每日心情

    2021-4-3 14:49
  • 簽到天數: 1 天

    連續簽到: 0 天

    [LV.1]初來乍到

    murong_mz 發表於 2021-10-19 21:00:42 | 顯示全部樓層
    可以显示中文

    集團新軍

    Rank: 1

    1

    威望

    6

    金錢

    0

    A幣
    主題
    1
    帖子
    7
    精華
    0
    綜合社群主題發文量
    1
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2021-3-29
  • TA的每日心情

    2021-4-3 14:49
  • 簽到天數: 1 天

    連續簽到: 0 天

    [LV.1]初來乍到

    murong_mz 發表於 2021-10-19 21:00:55 | 顯示全部樓層
    vic 發表於 2021-10-5 23:06
    請問你的GMS083腳本有辦法顯示中文嗎@@
    我改腳本編碼也沒用

    可以显示中文
    您需要登錄後才可以回帖 登錄 | 註冊會員

    本版積分規則

    2440

    發文

    2943

    金錢

    106

    A幣

    ----------榮譽勳章----------

    我是傳奇 贊助感謝勳章 精華作者勳章

    熱門推薦
    圖文推薦
    • 聯繫我們

    小黑屋|AICL社群娛樂集團

    GMT+8, 2024-4-29 04:18 , 網路刷新 0.114089 秒 .

    歡迎來到 AICL網路社群

    版權AICL社群所有 2011-2021.

    Total:123 Today:213 Online:322