首页
社区
课程
招聘
[求助]一份JAVA源代码 需要知道它的加密方式
发表于: 2019-6-17 16:44 2953

[求助]一份JAVA源代码 需要知道它的加密方式

2019-6-17 16:44
2953
ShunWoPackageHandler  = class("ShunWoPackageHandler")

socketListeners = {}

function ShunWoPackageHandler:ctor()
	 ClassUtil.extends(self, AbstractPackageHandler);
	 self._packageLenByteNum = ffiMgr:sizeOf("TCP_Info"); --包长度的尺寸,即前几字节是包长度
     self._packageHeadByteNum = ffiMgr:sizeOf("TCP_Head"); --包长度的尺寸,即前几字节是包长度

     createSetterGetter(self, "dataType", nil)
end

function ShunWoPackageHandler:cookOject2Bytes(bodyStruct, serialId, mainCmdId, subCmdId, truncateLen, notUseFfi)
    local bodyStr = ""
    if bodyStruct then
        if notUseFfi then
            bodyStr = bodyStruct;
        else
            bodyStr = ffiMgr:toLuaString(bodyStruct, truncateLen);
        end
    end
    local bodyLen = #bodyStr;

    local bufferStruct = ffiMgr:createCStruct("TCP_Buffer");
    bufferStruct.Head.CommandInfo.wMainCmdID = mainCmdId;
    bufferStruct.Head.CommandInfo.wSubCmdID = subCmdId;

    local packageLen = bodyLen + self._packageHeadByteNum;
    bufferStruct.Head.TCPInfo.wPacketSize = packageLen;
    bufferStruct.cbBuffer = bodyStr;

    local dataStr = ffiMgr:toLuaString(bufferStruct, packageLen)

    -- return dataStr
    local t = CryptoSwManager_mappedBuffer(dataStr, self._dataType)
    return t.buffer;
end

-- 这里要注意一下,旧的服务器是整包中TCP_Info(TCP_Head的前部分)之后的包内容才加密,
-- 所以我们此时读取TCP_HEAD时,其中TCP_COMMAND是加密过的,不能保存为self._tcpHeaderCStruct
function ShunWoPackageHandler:readPackageLen()
	local curPos = self._buffer:getPosition();
	local headerInfoStr = self._buffer:readBytes2String(self._packageLenByteNum);
	self._buffer:setPosition(curPos)
	local tempHeaderInfoStruct = ffiMgr:toCStruct(headerInfoStr, "TCP_Info")
	return tempHeaderInfoStruct.wPacketSize;
end

function ShunWoPackageHandler:handlePackage(byteArray)
    local bytesLen = byteArray:getBytesAvailable();
    if bytesLen > 0 then
    	local byteStr = byteArray:readBytes2String(byteArray:getBytesAvailable());
    	local resultTable = CryptoSwManager_unmapBuffer(byteStr, self._dataType)
        if resultTable then
        	byteStr = resultTable.buffer;
        	local tcpHeadStr = string.sub(byteStr, 1, self._packageHeadByteNum);
        	local bodyStr = string.sub(byteStr, self._packageHeadByteNum + 1);
        	local tcpHeaderCStruct = ffiMgr:toCStruct(tcpHeadStr, "TCP_Head");
        	local mainId = tonumber(tcpHeaderCStruct.CommandInfo.wMainCmdID);
        	local subId = tonumber(tcpHeaderCStruct.CommandInfo.wSubCmdID);
        	-- print("服务器返回协议", mainId, subId)
            local function handleObj()
                networkMgr:onSocketDataReceived(mainId, subId, bodyStr, self._dataType)
            end
            xpcall(handleObj, __G__TRACKBACK__);
        end
    end
end


--错误返回处理
-- 默认的的服务器请求错误处理
function ShunWoPackageHandler.defaultSocketErrorCallback(data)
    -- local resultCode = YiNiuPdkPackageHandler.getResultCode(data);
    -- resultCode = parseInt(resultCode);
    -- local config = getCSVField("errorMessage")[resultCode]
    -- if config then
    --     if config.tipType == 1 then
    --         popupMgr:showAlert(config.msg);
    --     else
    --         tweenMsgMgr:showRedMsg(config.msg);
    --     end
    --     -- errorMgr:handlerServerTips(resultCode, data)
    -- else
    --     tweenMsgMgr:showRedMsg(I18n.get("c1577", tostring(resultCode)));
    -- end
    -- trace("服务器报错,错误代码:" .. tostring(resultCode));
end

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1385
活跃值: (5609)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
2
这不是java.
2019-6-17 17:41
0
雪    币: 1392
活跃值: (5177)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
3
有点像GO语言
2019-6-17 18:03
0
雪    币: 12
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
 IDEA  
2019-6-17 18:04
0
雪    币: 260
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是Lua代码吗?
2019-6-17 22:58
0
雪    币: 220
活跃值: (18)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
lua吧。
2019-6-18 09:22
0
雪    币: 236
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
Lua代码
2019-6-18 10:55
0
游客
登录 | 注册 方可回帖
返回
//