台服dnf吧 关注:112,924贴子:1,699,542
  • 25回复贴,共1

下文是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] = 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;
......
}


IP属地:河北1楼2023-03-30 18:15回复


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


      IP属地:广东3楼2023-03-30 18:29
      收起回复
        加三告辞


        IP属地:北京来自Android客户端4楼2023-03-30 19:42
        回复
          这段代码似乎是用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()。


          IP属地:湖南来自Android客户端5楼2023-03-30 20:05
          收起回复


            IP属地:江苏来自Android客户端6楼2023-03-30 20:24
            收起回复
              1


              IP属地:河北7楼2023-03-30 21:44
              回复
                这段反汇编代码是一个用于发送游戏网络包的函数。具体来说,它做了以下几件事情:
                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;
                // ...
                }
                }
                ```


                IP属地:河南来自手机贴吧8楼2023-03-30 21:49
                收起回复
                  没看懂,这是可以自定义单机嘛


                  IP属地:福建来自iPhone客户端9楼2023-04-03 00:15
                  回复
                    对不起 做不到


                    IP属地:山东10楼2023-04-03 15:26
                    回复
                      我认为意大利面就应该拌42号混凝土,后面我忘了


                      IP属地:湖南来自iPhone客户端11楼2023-04-12 01:07
                      回复
                        哥,问一下,开启真GM模式,需要打开文件,找不到呢。 taiwan _login.gm_manifest


                        来自Android客户端12楼2023-04-30 21:02
                        收起回复
                          我个人认为意大利面不应该拌混凝土


                          IP属地:河南13楼2023-06-20 08:23
                          回复
                            然而这个代码在所有客户端都有,而且这只是进图初始化的部分代码,只包含进图是否是调试,跟并不是完整调试模式,神牛给你的只是思路,不能死盯着这里


                            IP属地:山东来自iPhone客户端15楼2023-06-20 09:50
                            回复
                              研究出来了吗


                              IP属地:山西来自iPhone客户端16楼2023-09-11 03:07
                              收起回复