x64明文发包


一、确认发包函数

  用OD附加游戏后在各种发包函数下断,最终发现可以在ws2.32_send 函数下断,可以断下。说明这个游戏系采用呢个发包函数。

二、.计划以喊话内容作为突破点,去找明文发包。在游戏聊天窗口 输入1111,回到OD发包函数下断点。马上切去游戏中按发送(要求手速够快>_<);

  1. 断下后,观察堆栈参数。

RCX 是第一个参数 socKet
RDX 是第二个参数包地址
R8 是第三个参数 包长度
R9 是第四个参数 FLAG

2.需要喊话2次,分别断下来观察 包地址是否发生变化。

    •  不变就可以作为一个突破口。
    •   变了。我只好去找下一个突破口《包长度R8》
  3. 找到r8的来源,来源于edi,edi来源于eax,eax是上面这个call的返回值
    •   
   4. 分析这个call的参数,都是地址。不好下断点呀。只能进入这个call一直追,看看谁给eax赋值
    1. 是edi给eax赋值!!

    2. 按减号,追edi

    3.  edi被清0了

      1. 分析这段代码:比较rbx+14里的值是否等于0,如果不是0,跳去140ce2005,如果是,清0
      2. edi 是包长度,包长度为0就不发包了,由上可得,rbx+14是发包状态的地址,
    4.  追rbx,观察rbx 是否固定不变,如果固定不变我们就可以下写入断点。

    5. 固定不变,在OD数据窗口中跳到RBX+14的位置 下一个硬件写入断点。
    6. 成功断下,(记住硬件断,是停在下一行)
    7. 继续返回几层,然后停下来在call下断。看看能不能断到喊话call

三、验证这个call,只有在喊话的时候才断下。并且有明文喊话内容

 四、找到了喊话call ,如何定位明文发包call呢

  1. 找到最内层的喊话call ,进去里面,头部就是明文发包

 五、验证明文发包call

  1. 在游戏中使用一个发包的功能,例如技能。断下后,ctrl +f9 就来到了 技能call,这时候在这个call下断的话,喊话是不会断的,只有用技能的时候才会断。