本文为看雪论坛优秀文章
看雪论坛作者ID:零加一
00.抓包
00.0.印证
def DecodeData(Data,IsSend,ShowLog):
Len=0
index=0
Maxlen=len(Data)
b_msg=b''
Res=[]
while index<Maxlen:
ZmFlag=Data[index:index+2]
index+=6
Len=Data[index:index+4]
index+=4
Len=int().from_bytes(Len, byteorder='big', signed=True)
if index+Len<=Maxlen:
b_msg=Data[index:index+Len]
index+=Len
msg=msgpack.unpackb(b_msg,raw=False)
Res.append(msg)
if ShowLog:
print(msg)
Len=0
else:
break
return Res
01. 拆包
首先清掉文件开头多出来的11个字节保存:
嚯,好家伙。看了一下,半喜半忧。
.bss:036D6D18 StringLiteral_14090 % 4 ; DATA XREF: LuaEncryption$$Encrypt+5C↑o
.bss:036D6D18 ; LuaEncryption$$Encrypt+68↑o ...
.bss:036D6D18 ; m71
python ./main.py --recursive ./xy_luac --dir_out ./xy_lua_d --catch_asserts -e luac
02. 分析
local key = MISC_MGR.lst()
function lst()
return _last_sync_time
end
function sync_server_time(time)
_last_sync_time = tostring(time) .. "000000"
logger:info("SYNC server time %f", time)
_time_diff = time - UnityEngine.Time.realtimeSinceStartup
end
return function (rid, server_id, time, start_server_time)
logger:info("玩家(%s)登录成功,时间=%d", rid, time)
REMOTE_MGR.set_local_server_id(server_id)
MISC_MGR.sync_server_time(time)
MISC_MGR.set_start_server_time(start_server_time)
LTSDK_MGR.login_report()
AUTHSERVER_MGR.disconnect()
LTSDK_MGR.sync_last_request()
WINDOW_MGR.hide_wait()
['sync_server_time', [1614052775]]
msg = "cr" .. cry.encrypt(key, msg, 16, 1)
function encrypt(n, s, h, r, d)
assert(n ~= nil, "Empty password.")
assert(n ~= nil, "Empty data.")
local r = r or CBCMODE
local h = h or AES128
local l = {
string.byte(n, 1, #n)
}
local u = util.padByteString(s)
if r == ECBMODE then
return ciphermode.encryptString(l, u, ciphermode.encryptECB, d)
elseif r == CBCMODE then
return ciphermode.encryptString(l, u, ciphermode.encryptCBC, d)
elseif r == OFBMODE then
return ciphermode.encryptString(l, u, ciphermode.encryptOFB, d)
elseif r == CFBMODE then
return ciphermode.encryptString(l, u, ciphermode.encryptCFB, d)
elseif r == CTRMODE then
return ciphermode.encryptString(l, u, ciphermode.encryptCTR, d)
else
error("Unknown mode", 2)
end
end
AES128 = 16
AES192 = 24
AES256 = 32
ECBMODE = 1
CBCMODE = 2
OFBMODE = 3
CFBMODE = 4
CTRMODE = 4
aes = e(function (n, ...)
local s = util.putByte
local h = util.getByte
local r = "rounds"
local d = "type"
...
03. 筑基
看雪ID:零加一
https://bbs.pediy.com/user-home-749276.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!