首页
论坛
课程
招聘
[原创]硬件破解之将军令及虚拟财产防护讨论
2016-3-11 12:50 11772

[原创]硬件破解之将军令及虚拟财产防护讨论

2016-3-11 12:50
11772
题外话:
  生活在杭州,出门基本已不带钱包,以前是虚拟财产,现在是财产虚拟,so..抛砖引玉
  
思路:
  1将军令是根据当前时间生成的,有效期为1分钟左右
  2如果服务器有验证过,那么当前时间段内的KEY无效,所以需要断开CLIENT机与SERVER的通信
  
  其它如清册表要清理,不然KEY窗口不会弹等不在此讨论范围

  直接上代码,附注释

char MiddleAttackServerIP[50]={0x00};//中转数据包的服务器IP
int MiddleAttackServerPort=8000;//中转数据包的服务器端口

bool mHookIt=false;//是否开始拦截


int (WSAAPI* True_recv)(__in SOCKET s, __out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf, __in int len, __in int flags)=recv;
int WSAAPI hkrecv(__in SOCKET s, __out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf, __in int len, __in int flags)
{
	//如果开始拦截,中断WOW数据包,防止失效并造成网络拥堵假象
	if(mHookIt==true)
	{
		struct sockaddr addr;
		struct sockaddr_in* addr_v4;
		int addr_len = sizeof(addr);
		DWORD s_Port=0;
		ZeroMemory(&addr, sizeof(addr));
		if (0 == getpeername(s, &addr, &addr_len))
		{
			if (addr.sa_family == AF_INET)
			{
				addr_v4 = (sockaddr_in*)&addr;
				s_Port = ntohs(addr_v4->sin_port);
			}
		}		 
		//调试信息 
		//FUNC_DEBUG_MSG("hkrecv[%d]",s_Port);		
		if(s_Port==1119 || s_Port==3724)//if((newIP != NowIP))
		{
			closesocket(s);
			return -1;
		}
	}
	return True_recv( s, buf,len,flags);
}


int (WSAAPI* True_connect)(IN SOCKET s, IN const sockaddr * name, IN int namelen)=connect;
int WSAAPI hkconnect(IN SOCKET s, IN const sockaddr * name, IN int namelen)
{
	if(mHookIt==true)
	{
		struct sockaddr_in *paddr =(struct sockaddr_in *)name;	
		char *ip =inet_ntoa(paddr->sin_addr);	
		int port =ntohs(paddr->sin_port);	
		if(port==1119) //port != 80 && port != HACK_SERVER_PORT (中转的不处理)
		{
			int rport=MiddleAttackServerPort;
			DWORD newIP= inet_addr(MiddleAttackServerIP);
			struct sockaddr_in clientService; 
			clientService.sin_family = AF_INET;
			clientService.sin_addr.s_addr = newIP;
			clientService.sin_port = htons( rport ); 
			return True_connect( s, (sockaddr *)&clientService, sizeof(clientService));
		} 
	}	
	return True_connect( s, name,namelen);
}

//HOOK connect recv两个函数
LONG HookConnectDetour()
{	
	DetourTransactionBegin();
	DetourUpdateThread(GetCurrentThread());	

	DetourAttach(&(PVOID&)True_connect, hkconnect);//WS2_32.DLL 
	DetourAttach(&(PVOID&)True_recv, hkrecv);//WS2_32.DLL 
	
	if(DetourTransactionCommit() != NO_ERROR)
			FUNC_DEBUG_MSG("error:detoured hook unsuccessfully");
	 
	return 1;
}


中转服务端就简单了
直接中转下数据包,并把第一个返回数据包转给CLIENT即可,之后的包丢弃.

防:
  现在是一手一个智能手机,通过APP的2次效验(学习淘宝)+防中间人攻击加密(如SSL)
  异常虚拟财产交易有信息通知,并支持数据回滚(这个涉及到架构)
  其它想法大家一起来说
  
  若有疏漏,欢迎指正交流,也可加Q65234

2021 KCTF 秋季赛 防守篇-征题倒计时(11月14日截止)!

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 1196
活跃值: 活跃值 (537)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
Tennn 活跃值 5 2016-3-11 16:44
2
0
Detour用法~还真是今天才知道 特地登录感谢楼主分享。
雪    币: 175
活跃值: 活跃值 (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dfsy 活跃值 2016-3-12 10:26
3
0
  相互学习
游客
登录 | 注册 方可回帖
返回