btb 發表於 2017-11-18 15:10:34

TwMS v202.1 CRC 滑鼠指向取得技能ID

// TwMS v202.1 CRC 滑鼠指向取得技能ID
// ReCreate:XMAX 2017-10-07

RegisterSymbol(SkillID)
Alloc(GetSkillID, 128)
Alloc(SkillID, 04)

GetSkillID:
mov ,eax
db 89 81 80 00 00 00
jmp 019ECC72  

019ECC6C:
jmp GetSkillID


019ECC6C:
db 89 81 80 00 00 00

UnRegisterSymbol(SkillID)
DeAlloc(GetSkillID)
DeAlloc(SkillID)

caca 發表於 2017-11-18 16:48:59

本帖最後由 caca 於 2017-11-18 17:36 編輯

019ECC6C:
jmp GetSkillID
這個寫法洽當嗎?另一篇滑鼠取的道具ID也有同樣問題。
這可能造成不預期的後果。建議改成這樣較正統吧:
019ECC6C:
jmp GetSkillID
nop

有人問起為什麼要這樣寫。先看看 019ECC6C 這位置
019ECC6C - 89 81 80000000        - mov ,eax
019ECC72 - FF 76 04              - push
019ECC75 - C7 85 6CFFFFFF 00000000 - mov ,00000000 { 0 }
019ECC7F - E8 AC3BB4FE           - call 00530830

019ECC6C 是 89 81 80 00 00 00 6個字節。
但 數據內只寫
019ECC6C:
jmp GetSkillID
這個只有5個字節,將數據寫入後,可看到會變成這樣
019ECC6C - E9 8F336C09           - jmp 0B0B0000
019ECC71 - 00 FF                 - add bh,bh
019ECC73 - 76 04                 - jna 019ECC79
019ECC75 - C7 85 6CFFFFFF 00000000 - mov ,00000000 { 0 }
019ECC7F - E8 AC3BB4FE           - call 00530830

用正統的寫法
019ECC6C:
jmp GetSkillID
nop
這是6個字節,將數據寫入後,可看到會變成這樣
019ECC6C - E9 8F337009           - jmp 0B0F0000
019ECC71 - 90                    - nop
019ECC72 - FF 76 04              - push
019ECC75 - C7 85 6CFFFFFF 00000000 - mov ,00000000 { 0 }
019ECC7F - E8 AC3BB4FE           - call 00530830

就本數據而言,第一種寫法未必會出事(因為89 81 80000000 最後是00 如果是其他字節就可能出問題),
但畢竟不是正常寫法
頁: [1]
查看完整版本: TwMS v202.1 CRC 滑鼠指向取得技能ID