脸蛋N开pass客户机ID检测

目前已在服务端检测,不允许同一台pc运行两个pp.

 

流程:

   用户刚登录成功后,

   服务端发,扩展检查报文,要求客户端提供机器id.

-> 客户端收,根据cpuid、系统盘的卷序列号及网卡mac地址,生成唯一的用户机器id

-> 客户端发,加码处理用户机器id,发送给服务端

-> 服务端收,检查目前所有在线用户,是否有该机器id,有则关闭套接字,强制多开的客户端下线。

 

patch原理:

  客户端收到扩展检查报文后,会调用PcExtraCheck类处理,转换报文到类中,

  PcExtraCheck类虚函数表的第4个函数负责该转换

  特征串定位查找到该虚函数表,替换到自己的函数。

  patch原要求提供机器id为空请求。

 

/
//Step1:  在“BOOL MyPatchClassName()”函数之前加入如下内容:
/

DWORD           g_dwRet;  
const BYTE      g_pZeroCheck[] = {0x16,0x67,0x54,0x89, 0x7c,0x00,0x00,0x00};
const BYTE      g_pCheckFlag[] = {0x50,0x63,0x45,0x78,0x74,0x72,0x61,0x43,0x68,0x65,0x63,0x6B,0x00,0x00,0x00,0x00};

void __stdcall MyRecvPcExtraCheck(PBYTE pThis, PVOID ptagBufStack)
{
      MyDbgPrint("[+MyRecvPcExtraCheck+] in, patch it!");

      //强制修改了接收到的PcExtraCheck报文,该8字节为协议字后的8字节,固定格式
      //实际是屏蔽了后面多组264字节,不再入vector. 则下文不再汇报本机特征id
      memcpy(pThis + 16, g_pZeroCheck, sizeof(g_pZeroCheck));
}

__declspec(naked) void __stdcall MyAsmRecvPcExtraCheck(PVOID ptagBufStack)
{
      __asm{
            pop g_dwRet                         //弹出返回地址
            push ecx                              //压入thiscall的this
            call MyRecvPcExtraCheck     //实际两形参调用
            jmp g_dwRet                         //返回原调用方
      }
}



/
//Step2: 在“BOOL MyPatchClassName()”函数最后,即“return TRUE;”语句之前,加入如下内容
/

 

//pp为vc7.1编译,特征串及地址均为4字节对齐,快速搜。位于数据段,可直接写.
for ( pSearch = pSearchBegin ; pSearch < pSearchBegin + dwSizeOfData - sizeof(g_pCheckFlag) ; pSearch+= 4){
      if ( !memcmp(pSearch, g_pCheckFlag, sizeof(g_pCheckFlag)) ){
            PDWORD pVirtual = (PDWORD)( pSearch + sizeof(g_pCheckFlag) + 4*4 );
            MyDbgPrint("[+] find PcExtraCheck pVirtual addr:0x%08x, Fun:0x%08x",pVirtual,*pVirtual);
            *pVirtual = (DWORD)MyAsmRecvPcExtraCheck;  //替换PcExtraCheck收包处理的虚函数为自己的.
            MyDbgPrint("[+] now  PcExtraCheck pVirtual addr:0x%08x, Fun:0x%08x",pVirtual,*pVirtual);
            break;
      }
}

return TRUE;  //原来最后的语句


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值