|  | 
 
 发表于 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;
 // ...
 }
 }
 ```
 | 
 |