如何尋找楓之谷封包的 AES Key

作者:风之谷冒险    时间:2017-07-06 19:38

相信大家不管在GMS 、EMS、TWMS 中

最困擾的就是封包的Key了

封包的AES加密的金鑰會隨著版本而變動了

每次改版楓之谷鯊魚這個解封包程式也不一定馬上有Key能解

接下來要教你如何自己來抓Key

 

請先準備好  CheatEngine  這個工具

我們要用他的搜尋來找我們要的函數

在楓之谷封包加密時,才會去生成key來使用

所以進遊戲後有HackShield,並不好拿CE來找東西

所以我們直接在Play畫面就提取Key出來

而楓之谷加密的函數如下

004A531C - 55                    - push ebp
004A531D - 8B EC                 - mov ebp,esp
004A531F - 81 EC 3C010000        - sub esp,0000013C
004A5325 - A1 300A9201           - mov eax,[01920A30] : [840EA1CE]
004A532A - 33 C5                 - xor eax,ebp
004A532C - 89 45 FC              - mov [ebp-04],eax
004A532F - 83 7D 18 00           - cmp dword ptr [ebp+18],00
004A5333 - 56                    - push esi
004A5334 - 8B 75 0C              - mov esi,[ebp+0C]
004A5337 - 57                    - push edi
004A5338 - 8B 7D 08              - mov edi,[ebp+08]
004A533B - 74 05                 - je 004A5342
004A533D - E8 BCE8FFFF           - call 004A3BFE
004A5342 - 83 A5 C4FEFFFF 00     - and dword ptr [ebp-0000013C],00
004A5349 - 8D 85 C8FEFFFF        - lea eax,[ebp-00000138]
004A534F - 50                    - push eax
004A5350 - 68 28578A01           - push 018A5728 : [00000088]
004A5355 - E8 05FFFFFF           - call 004A525F
004A535A - FF 75 10              - push [ebp+10]
004A535D - 8D 85 C8FEFFFF        - lea eax,[ebp-00000138]
004A5363 - 56                    - push esi
004A5364 - FF 75 14              - push [ebp+14]
004A5367 - 50                    - push eax
004A5368 - E8 F6ECFFFF           - call 004A4063
004A536D - 83 C4 18              - add esp,18
004A5370 - 83 7D 10 00           - cmp dword ptr [ebp+10],00
004A5374 - 74 1B                 - je 004A5391
004A5376 - 8D 85 C4FEFFFF        - lea eax,[ebp-0000013C]
004A537C - 50                    - push eax
004A537D - 57                    - push edi
004A537E - FF 75 10              - push [ebp+10]
004A5381 - 8D 85 C8FEFFFF        - lea eax,[ebp-00000138]
004A5387 - 56                    - push esi
004A5388 - 50                    - push eax
004A5389 - E8 37FDFFFF           - call 004A50C5
004A538E - 83 C4 14              - add esp,14
004A5391 - 8D 85 C4FEFFFF        - lea eax,[ebp-0000013C]
004A5397 - 50                    - push eax
004A5398 - 8B 85 C4FEFFFF        - mov eax,[ebp-0000013C]
004A539E - 03 F8                 - add edi,eax
004A53A0 - 8D 85 C8FEFFFF        - lea eax,[ebp-00000138]
004A53A6 - 57                    - push edi
004A53A7 - 50                    - push eax
004A53A8 - E8 74FEFFFF           - call 004A5221
004A53AD - 8B 4D FC              - mov ecx,[ebp-04]
004A53B0 - 83 C4 0C              - add esp,0C
004A53B3 - 5F                    - pop edi
004A53B4 - 33 CD                 - xor ecx,ebp
004A53B6 - 5E                    - pop esi
004A53B7 - E8 33BDCD00           - call 011810EF
004A53BC - C9                    - leave
004A53BD - C3                    - ret


這是我事先抓好的,你也可以從國外論壇找到的GMS idb去看看 CAESCipher__Encrypt 這個函數然後再抓特徵回臺版

特徵的部分怎麼抓的?
其實只是把會變動的地方全部改成 ? 就能囉

在這邊我直接給你囉:
55 8B EC 81 EC 3C 01 00 00 A1 ? ? ? ? 33 C5 89 45 FC

在 Value Type 框框選擇 Array of bytes
將 Writeable ,Executable 打勾 因為我們抓的地方是屬於能寫入跟執行的~
搜尋框框填入上面的特徵
最後按下搜尋

你會發現…..

怎會有兩個?
這是因為別忘了一件事
有加密就有解密
CAESCipher__Decrypt 長得跟  CAESCipher__Encrypt 很像
然後依照一直以來的慣例
順序都是Decrypt先
所以我們取第二個

加密函數到手了,那怎麼讓它觸發初始化Key的動作呢?

答案是:執行他吧( ´ ▽ ` )ノ

執行之前,是否還忘記一件事情?
Key 存在哪?
Key 存在哪?
Key 存在哪?

很重要,不然你拿到加密函數也沒用 哈哈哈哈哈哈哈

其實我上面有偷偷打亮(逃
上面幾加密函數的函數中
有個 push 018A5728
018A5728 這就是金鑰存的位置拉~

CheatEngine 有個很棒的功能
可以做 Code Inejection
你可以把寫好的 Assembly Code 輕鬆的執行
只要點下 Memory View

 

然後按下 Ctrl + A
就能開啟自動彙編的視窗囉~
我們要些來寫一個讓函數執行的扣
以剛剛圖片來看
我們找到加密函數 004A531C
那就能這樣寫:


Alloc(CallFunc, 256)
CreateThread(CallFunc)
CallFunc:
call 004A531C
ret

好了之後先別急著按下執行

先在 Memory View 下方的 Hex View 按下 Ctrl + G 然後填入 Key 所在的位置 018A5728

 

再回到 Auto ASM 那邊執行剛剛寫的扣

 

你會發現有東西紅紅der

 

到這就大功告成了

取 Key 的時候只取每一列的 4 個 byte

88 00 00 00
6B 00 00 00
F9 00 00 00
71 00 00 00
0D 00 00 00
86 00 00 00
Db 00 00 00
4F 00 00 00

拿 Key 的教學就到這裡為止 , 有時間我再寫點別的教學( ´ ▽ ` )ノ

相关文章BOOKMARK