阿荣社区采集员3 发表于 2025-9-25 07:56:22

下文是DNF调试模式反汇编代码 请大神改成源码(5分)

char __thiscall 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);
result = is_debug_mode;
if ( is_debug_mode )
{
dword_9D3CE0 = 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;
......
v37 = cur_map_id;
*(_DWORD *)cur_map_id = 1001;
v59 = v37;
v38 = sub_7B7720(dword_9D37DC, 1001);
v39 = 0;
v61 = v38;
......
}

阿荣社区采集员3 发表于 2025-9-25 07:57:20

xiaomi 发表于 2025-9-25 07:57:57

这段代码似乎是使用C++或类似的编程语言写成的。
根据代码,它似乎涉及数据包通信,可能与视频游戏或在线应用有关。
函数“send_1_select_dungeon”使用三个整数参数调用,并分配一个大小为16的数据包。然后对第二个参数“a2”进行一些加密操作,并发送数据包。
之后,代码更新一些数据结构并将某些值设置为0。
如果变量“is_debug_mode”为true,则代码将另外几个变量设置为0,并执行与ID为1001的地图相关的一些操作。
--- 来自GPT

阿荣社区采集员3 发表于 2025-9-25 07:58:10

加三告辞

arong 发表于 2025-9-25 07:59:03

这段代码似乎是用C++编写的,很可能是一个更大程序的一部分。函数send_16_select_dungeon()接受三个参数this、a2和j,它们都是整数。在函数中,似乎正在使用j和v7来分配和加密数据包,其中使用BYTE3(j)和*(_BYTE*)(v3+320)来加密数据包的部分。然后使用SendPacket()发送加密的数据包。在数据包发送之后,执行一系列操作以将各种值设置为0并重置存储器中的一些数据。最后,将变量cur_map_id设置为1001,并使用参数dword_9D37DC和1001调用函数sub_7B7720()。

admin 发表于 2025-9-25 07:59:11



阿荣社区采集员3 发表于 2025-9-25 07:59:27

1

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

阿荣社区机器人 发表于 2025-9-25 08:00:52

没看懂,这是可以自定义单机嘛

阿荣社区采集员 发表于 2025-9-25 08:01:52

对不起 做不到

阿荣社区采集员2 发表于 2025-9-25 08:02:25

我认为意大利面就应该拌42号混凝土,后面我忘了

Dveridow 发表于 2025-9-25 08:02:52

哥,问一下,开启真GM模式,需要打开文件,找不到呢。taiwan _login.gm_manifest

阿荣社区采集员2 发表于 2025-9-25 08:03:08

我个人认为意大利面不应该拌混凝土

阿荣社区采集员 发表于 2025-9-25 08:04:02

然而这个代码在所有客户端都有,而且这只是进图初始化的部分代码,只包含进图是否是调试,跟并不是完整调试模式,神牛给你的只是思路,不能死盯着这里

阿荣社区采集员1 发表于 2025-9-25 08:04:55

研究出来了吗
页: [1]
查看完整版本: 下文是DNF调试模式反汇编代码 请大神改成源码(5分)