周五最后一天上班了,明后休假,写个简单的游戏分析吧!
问我为啥不先分析内存?
答:游戏框架很简单就是一个未加密未混淆的libil2cpp游戏,dump下来自己找函数就行,没啥难度也没啥意思。毕竟分析游戏只是为了好玩,并没有其他的原因,所以就直接分析协议了。1. 模拟器运行游戏

image.png (475.13 KB, 下载次数: 5)
下载附件
2019-11-15 17:46 上传

image.png (97.49 KB, 下载次数: 4)
下载附件
2019-11-15 17:56 上传

image.png (115.93 KB, 下载次数: 2)
下载附件
2019-11-15 18:06 上传

image.png (9.91 KB, 下载次数: 3)
下载附件
2019-11-15 18:12 上传

image.png (66.59 KB, 下载次数: 4)
下载附件
2019-11-15 18:15 上传
[Asm] 纯文本查看 复制代码
function hook_sendMessage(addr){ console.green_log('[+] hook_sendMessage [url=home.php?mod=space&uid=402414]@[/url] '+addr.toString()); Interceptor.attach(addr, { onEnter: function (args) { if (Socket.type(args[0].toInt32()) == null) return //tcp var address = Socket.peerAddress(args[0].toInt32()) if (address === null) return var package_size = args[1].readU16() //获取包长 var package_name_size = args[1].add(0x2).readU16() //获取Message str 大小 var package_name = args[1].add(0x4).readUtf8String(package_name_size) //获取Message str var send_buff = args[1].add(0x4).add(package_name_size) //定位包体位置 var proto_buff = send_buff.add(0x2) //定位protobuf序列的位置 var proto_buff_size = send_buff.readU16() //获取protobuf序列长度 if(package_name == 'OnHeartPkgRequest') //过滤心跳包 return var messages = {} var protobuff_list = byteArray2list(proto_buff.readByteArray(proto_buff_size)) decode_protobuf(protobuff_list, 0, protobuff_list.length, messages) //反序列化包字节 print_dump(args[1], args[2].toInt32()) console.yellow_log('Message_name: ' + package_name) console.green_log(JSON.stringify(messages, null, 4)) switch(package_name) //修改封包 { case 'Backpack_OnUseDaoJu': var write_messages = { "1:0:Varint": 0, "2:1:Varint": 0 } break case 'Duplicate_OnSaoDangGuanQia': var write_messages = { "1:0:embedded message": { "1:0:Varint": 0, "2:1:Varint": 5, "3:2:Varint": 15 } } break case 'ChatPart_Speak': var write_messages = { "1:0:Varint": 0, "2:1:string": "", "3:2:string": "22222", "4:3:Varint": 1 } break } if(typeof(write_messages) != "undefined") { var data = [] encode_protobuf(write_messages, data) //序列化包字节 Memory.writeByteArray(proto_buff, data) //写入长度 send_buff.writeU16(data.length) //写入protobuf包长 args[1].writeU16(package_size - proto_buff_size + data.length) //写入package长度 args[2] = ptr(package_size - proto_buff_size + data.length + 2) //改写发包长度 print_dump(args[1], args[2].toInt32()) } }, onLeave: function (retval) { } }); }
image.png
(2.91 KB, 下载次数: 31)
下载附件
2019-11-15 18:07 上传

















查看全部评分