| 
                        副标题[/!--empirenews.page--]
                         放假和小伙伴们打了几把PUBG,大半年没碰,居然也意外地躺着吃了次鸡。吃鸡这个游戏果然得4个认识的人打(dai)战(dai)术(wo)才更有趣。 
由于身边搞安全的人比较多,之前也会和一些安全圈的大佬一起玩,经常会有些认识或不认识的黑阔大佬开着高科技带着躺鸡。当然笔者也曾羞耻地开过挂带妹(纪念号被封的第193天)。 
那么这些黑阔大佬们,在不开挂的情况下,谁会是他们之中技术最好的呢?带着这样的疑问,试着从数据分析的角度来看看谁会是安全圈的吃鸡第一人。 
注:全文所指的“安全圈”是一个非常狭义的概念,在本文中仅覆盖到小部分安全从业者玩家,所以标题有些夸大。如有其他错误也欢迎指出。 
  
一、数据收集 
怎么才能知道哪些安全从业者在玩这个游戏,他们的ID又是什么呢? 
在一些APP里可以查到玩家的战绩,其中比较有价值的是,还能看到每位玩家的好友列表。 
那么可以有这么个思路,也就是一个广度优先遍历: 
    - 确定一个初始的ID链表,并保证初始链表内都是安全圈内人士。
 
    - 遍历初始链表内每一位玩家的所有好友。
 
    - 当链表内H的好友J,同时也是链表内另外两位黑客的共同好友,那么认为J也是安全圈内人士,加入到链表尾处。
 
    - 向后迭代重复2、3。
 
 
1. 动手实现 
发现走的是https,挂上证书以MITM的方式来监听https流量: 
  
可以发现数据是以json格式传递的,写个python脚本来自动完成获取数据,单线程+限速(一方面不至于给别人家的api爬挂了另一方面也不至于触发IDS、anti-CC等机制)。 
脚本主要代码是: 
- def r_get(nickname,offset): 
 -  
 - #发送给api的request 
 - ... 
 -  
 -     return json#返回一个json格式 
 -  
 - def get_friends(nickname): 
 -  
 -     offset  = 0  
 -     res_js = r_get(nickname,str(offset)) 
 -     temp_friends = res_js['result']['board'] 
 -     if res_js['status'] == "ok": 
 -         while len(res_js['result']['board']) == 30: 
 -             offsetoffset = offset + 30 
 -             res_js = r_get(nickname,str(offset)) 
 -             temp_friendstemp_friends = temp_friends + res_js['result']['board'] 
 -         print("   {0}   的好友人数    {1}".format(res_js['result']['user_rank']['nickname'], len(temp_friends) -1 )) 
 -         friends = [] 
 -         Wxname  = "" 
 -         Wxsex = "" 
 -         Wxavatar  = "" 
 -         sql = "" 
 -         for playerinfo in temp_friends: 
 -             if playerinfo['nickname'] != res_js['result']['user_rank']['nickname']: 
 -                 friends.append(playerinfo['nickname']) 
 -             elif playerinfo.has_key('heybox_info') == True: 
 -                 Wxname = playerinfo['heybox_info']['username'] 
 -                 Wxsex = playerinfo['heybox_info']['sex'] 
 -                 Wxavatar = playerinfo['heybox_info']['avartar'] 
 -         friends_s = ','.join(friends)  
 -  
 -         sql = "INSERT INTO player (nickname,avatar,steamID,friends,Wxname,Wxsex,Wxavatar)  
 -               VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}')".format(res_js['result']['user_rank']['nickname'],res_js['result']['user_rank']['avatar'], res_js['result']['user_rank']['steam_id'],friends_s,Wxname,Wxsex,Wxavatar) 
 -         return friends,sql       
 -     else: 
 -         print("获取{0}的好友人数失败, 返回{1}".format(res_js['result']['user_rank']['nickname'],res_js['msg'])) 
 -         return 1  
 -  
 - def record_rds(sql): 
 -     #db操作 
 -  
 - def main(): 
 -    ... 
 
  
                                                (编辑:我爱故事小小网_铜陵站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |