【放置江湖】弱联网手游,网络协议分析修改教程。
每天签到可获得35元宝,开启方法,WLAN ->已连接的wifi (>)小图标 -> 代{过}{滤}理 ->代{过}{滤}理自动配置
PAC网址填入 http://139.199.171.191/proxy.pac
![image]()
- 准备
使用代{过}{滤}理抓包软件(Fiddler 4)代{过}{滤}理手机网络,进入游戏,点击[上传存档]发现:
游戏采用http网络协议。req 和 resp 内容都被加密了。修改或者伪造http请求数据,就要对请求内容和返回内容进行解密。如果可能,我们可以修改这个请求包,以达到修改游戏的目的。
- 开始
用解压软件打开 apk 安装包确定游戏框架,游戏使用cocos2dlua框架。
我们随便打开一个lua脚本文件,发现游戏脚本已经被加密了。
接下来的工作我们就需要对lua脚本文件进行解密,lua手游脚本解密的方法有很多,网上也有非常多的教程。我在之前也发过一篇,关于本游戏的的解密教程,大家可以做参考。
解密lua脚本后,让游裸奔。我们通过对http协议头的一些参数进行搜索,定位到 HttpManager.lua 文件。
设置协议头,实现代码。和我们抓包的结果一致。
local localTime = 0
-- 初始化时间戳
--[[
1 同一帧内不能出现两次相同的时间戳
2 使用最新的时间戳
]]
function HttpManager:setWebTime(time)
if PRINT_MODE == 1 then
print("time = "..time)
end
localTime = time
end
function HttpManager:updateWebTime()
localTime = localTime + 0.0001
end
-- @author XiaoZhiWei
-- @time 2016/11/14 11:49:21
-- @desc 设置头信息
local function setHeader(xhr, headers)
local time = localTime
-- 得到nouce and sig
local nouce, sig = HttpManager:getNouceAndSig(time)
-- 默认头
local sendHeaders =
{
uuid = Game:getIdfv(),
userid = User:getUserId(),
sig = sig,
time = time,
nouce = nouce,
device = Game:getDevInfo(),
ver = Game:getVersion(),
hotver = Game:getHotVersion(),
platform = Game:getPlatformId(),
timezone = Helper:mathFloor((28800 - Helper:getTimeZone()) / 3600),
channel = Game:getChannelId(),
package = Game:getPackageId(),
}
if Game:getPlatformId() == "android" then
sendHeaders.pkname = SdkMethod:getPackageName()
sendHeaders.pksig = SdkMethod:getSignature()
end
-- 覆盖头
for k, v in pairs(Helper:getDef(headers, {})) do
sendHeaders[k] = v
end
-- 设置头
for k, v in pairs(sendHeaders) do
if PRINT_MODE == 1 then
print("sendHeaders["..k.."]= "..tostring(v))
end
xhr:setRequestHeader(k, v)
end
end
-- @author XiaoZhiWei
-- @time 2016/11/14 11:10:58
-- @desc 获取随机nouce 以及加密 sig
function HttpManager:getNouceAndSig(time)
local nouce = ""
for i = 1, 6 do
local index =