|
|
发表于 2025-9-25 07:59:53
|
显示全部楼层
这段反汇编代码是一个用于发送游戏网络包的函数。具体来说,它做了以下几件事情:
1. 分配了一个长度为16的网络包,并把传入的a2赋值给j变量。
2. 对j变量进行加密,分别对其前两个字节和第三个字节进行不同的加密,并将结果分别存储到分配的网络包中。
3. 发送通过加密后得到的网络包。
4. 修改一些游戏内部状态,比如清除某些变量、设置地图编号等。
其中,最后部分的代码只在调试模式下执行,用于清空一些调试相关的变量。
改写成原代码如下:
```c
char send_16_select_dungeon(int this, int a2, int j) {
AllocatePacket(dword_A5BA58, 16);
j = a2;
EncryptPacket(dword_A5BA58, (int)&j, 2);
BYTE3(j) = v7;
EncryptPacket(dword_A5BA58, (int)&j + 3, 1);
BYTE3(j) = *(_BYTE *)(v3 + 320);
EncryptPacket(dword_A5BA58, (int)&j + 3, 1);
SendPacket(dword_A5BA58);
*(_DWORD *)(*((_DWORD *)dword_9D3244 + 17) + 4 * *(_DWORD *)(v3 + 184)) = dword_A5E8DC ^ (*((_DWORD *)dword_9D3244 + 17)+ 4 * *(_DWORD *)(v3 + 184)) ^ 1;
*(_DWORD *)(*((_DWORD *)dword_9D3244 + 18) + 4 * *(_DWORD *)(v3 + 184)) = dword_A5E8DC ^ (*((_DWORD *)dword_9D3244 + 18)+ 4 * *(_DWORD *)(v3 + 184)) ^ 1;
*(_BYTE *)(*(_DWORD *)(v3 + 24) + 17) = 0;
*(_BYTE *)(*(_DWORD *)(v3 + 28) + 17) = 0;
v9 = *(_DWORD *)(v3 + 32);
*(_BYTE *)(v9 + 17) = 0;
*(_BYTE *)(*(_DWORD *)(v3 + 36) + 17) = 0;
sub_6CE570((int)dword_9D3834, v9, 60);
// Debug mode code
if ( is_debug_mode ) {
dword_9D3CE0[0] = 0;
dword_9D3CE4 = 0;
dword_9D3CE8 = 0;
dword_9D3CEC = 0;
dword_9D3CF0 = 0;
dword_9D3CF4 = 0;
dword_9D3CF8 = 0;
dword_9D3CFC = 0;
dword_9D3D00 = 0;
dword_9D3D04 = 0;
dword_9D3D08 = 0;
dword_9D3D0C = 0;
dword_9D3D10 = 0;
// ...
int v37 = cur_map_id;
*(_DWORD *)cur_map_id = 1001;
int v38 = sub_7B7720(dword_9D37DC, 1001);
int v39 = 0;
int v61 = v38;
// ...
}
}
``` |
|