首页
社区
课程
招聘
[未解决,已结帖] 一份 IDEA 源代码封包处理文件需要知道加密方式 50.00雪花
发表于: 2019-6-17 16:33 2335

[未解决,已结帖] 一份 IDEA 源代码封包处理文件需要知道加密方式 50.00雪花

2019-6-17 16:33
2335
--
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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-6-17 18:05 被vinlton编辑 ,原因: 由于本人是菜鸟 这边有源代码文件奈何JAVA连入门都不算 需要知道它的封包加密解密方式 如果封包加密文件不在此文件 可以 加我Q 3586 36 6839 报酬另算
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
这根本不是java代码。。。
最后于 2019-6-17 18:04 被myangel编辑 ,原因:
2019-6-17 18:04
0
游客
登录 | 注册 方可回帖
返回
//