WIFI万能钥匙协议分析
WIFI万能钥匙协议分析
需求:
上android 市场下载任意一款,wifi万能钥匙 软件,对其进行 协议分析和逆向,达成如下结果:通过对软件的分析,完成自动化爬虫,爬wifi万能钥匙的wifi库,或 自动查询 (比如输入经纬度,得到当地共享密码的wifi列表数据)时限为两周,不论做到什么程度都可以出说明文档,交由我方评定。
分析结果:
1. wifi万能钥匙使用的HTTP协议的Get请求方式获取附近的wifi列表
2. 数据包以JSON数据包格式进行传输
3. 获取附近的wifi列表协议数据包如下

4.字段sign的值是使用其他值做MD5算法求出的
分析过程:
分析对象:WIFIwnys.apk 2.9.20
小提示:选择分析对象,优先选择较早的版本,在百度找到最早的版本是2012年版本wifilocating.apk 1.5.2, 但是这个版本的由于查询wifi附近列表功能已经不再有效。所以另选这个版本。这个版本功能有效,但是量很大。
分析工具:
1. Android Killer1.3 DEX分析工具
2. JEB2.0 反汇编工具
3. Charles 4.0 抓包工具
4. Chrome插件Postman Htttp 协议测试工具
分析过程: 大胆假设,小心验证
1.抓包
安装WIFIwnys.apk程序,使用查询wifi附近列表功能,用chares 4.0 抓网络数据包。在数据包中使用wifi关键字过滤一些非我们关注的包,在这些包找我们发现一个pid=qryapnearby 数据包。查看这个数据包内容(为了方便解释,内容已整理,如下)。 接下来就是根据抓的包和代码进行分析,
URL : http://wifiapi02.51y5.net/wifiapi/fa.cmd;
lo=114.382686&
d=2&
capbssid=80%3A89%3A17%3Afc%3A6e%3A5d&
ii=866048020492064&
appid=0001&
pid=qryapnearby& ;pid=qryapnearby
mac=18%3A59%3A36%3Af4%3A3a%3Af1&
lang=cn&
sign=C8937F7842952034F2307FF2E6802101&
capssid=cr21&
v=383&
mapSP=b&
la=30.500757&
uhid=a0000000000000000000000000000001&
st=m&
chanid=baidu&
dhid=33986deebca441a180714f6cc57cbb84
2.字段lo 和la 的分析
根据协议包的作用,我们肯定这个协议包一定有坐标信息,如果坐标信息没有加密的话,坐标信息一定是个浮点型,所以猜测:lo=114.382686 和la=30.500757 可能是经纬度。
现在登录http://www.gpsspg.com/maps.htm 网站,查询我当前位置经纬度。如下图所示

我们数据和百度数据位置最为相似,这是因为wifi万能钥匙,定位就是使用百度服务的API。多次验证,我们判断是正确。
lo 字段: 当前位置的纬度, la:当前位置的经度。
2.字段d
使用Android Killer1.3分析WIFIwnys.apk 程序,由于笔者发现qryapnearby这个请求包,于是笔者在Android Killer1.3分析WIFIwnys.apk的工程中搜索”qryapnearby” 这个关键字。

于是使用JEB2.0 分析 WIFIwnys.apk, 打开类com.snda.wifilocating.u, 反编译查看源码。源码经过命名混淆, 笔者已重名了。

回溯发现在 MapNearAPActivity 的 queryNearAP 函数中,调用,发现传参 ”2” 验证查询qrynearap 包中d=2

3.字段mapSP
分析mapSP字段,mapSP字段是桐谷歌MapManger 管理器拿到的

笔者已经分析出这个mapSP 这个字段是地图服务商(Baidu地图,Google地图)的简称,我们看看它值由哪些,已经是如何实现的吧。
MapManager.getMapManager(),这是单模式获取MapManager地图服务管理器, getMapShortName 的实现如下

其中mMapEnum 的类型是MapEnum

其中笔者抓取的qryapnearby 包中mapSP=b, 可知我们使用时百度服务商,笔者打开手机,发现手机Wifi确实使用的百度地图服务。

4.字段capssid, 和capbssid
现在我们继续分析字段capssid,capbssid, 由于笔者之前有开发路由器经验,看见这两个关键字,很自然想到了路由器的SSID, 和BSSID, 于是进入路由器查看,笔
者家用的有路由器SSID:cr21 和 BSSID= 80-89-17-FC-6E-5D, 然后查看capbssid=80%3A89%3A17%3Afc%3A6e%3A5d,其中%3A是分割符 和capssid=cr21.

5.字段mac
笔者看见这个mac, 大胆假设他手机网卡的MAC地址,于是于是笔者查看自己手机的MAC地址:18:59:36:f4:3a:f1, 然后查看qryapnearby 数据包
mac=18%3A59%3A36%3Af4%3A3a%3Af1 ,其中%3A是分割符

另外进入CreateCoreJSON 函数中 看到函数,看到MAC 对应值就是从WifiManage人中获取的macaddress


6.字段ii
另外进入CreateCoreJSON 函数中 看到函数,

另外进入GlobalApplication类 的getIMEI函数中 看到函数的实现,可知只是获取手机的IMEI, 其中IMEI(International Mobile Equipment Identity)是
国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台移动电话机一一对应,而且该码是全世界唯一的。每
一只移动电话机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录

笔者查看自己的手机IMEI 和qryapnearby 数据包的ii字段(ii=866048020492064)进行比较,

7.字段dhid && uhid
进入CreateCoreJSON 函数中 看到函数,看到dhid,uhid 数据是从配置文件SharesPrefernces中读取出来的

进入,发现这个值是通过 关键字 ”dhid” 获取的 ”uhid”


在SharesPrefernces同样找到设置”dhid” 获取的 ”uhid”函数


分析字段dhid, 在JEB工具中查看调用setDhid 的函数,发现只有一处在,然后最终追查到第一次调用setUserrutils ,strUnhid 给的空置,所以对我们这款WIFI钥匙的dhid是恒定为
a0000000000000000000000000000001 的, 查看uhid=a0000000000000000000000000000001

分析字段 dhid=33986deebca441a180714f6cc57cbb84
8.app相关的字段v, appid,chanid, st, lang
进入CreateCoreJSON 函数中 看到函数,有获取wifi万能钥匙app的相关信息

进入JSONFactory.getAppinfo函数,发现有v, appid,chanid, st, lang 等五个字段

先看v字段,进入 类GlobalApplication 的函数GetVersionCode 函数,为获取app 的版本号

验证v字段;查看程序清单中VersionCode 的值383 和抓取的qryapnearby中 v=383比较,是一致的。

再看字段appid和st 的值是两个固定值appid=0001 st=m , 验证查看qryapnearby包中 appid=0001 , st=m, 一致。笔者对appid字段能app的编号,
St的意义笔者没有过分分析,由于这个值是固定值,分析意义不大,笔者就不分析了。
再看chanid, 进入GlobalApplication 类的GetAppChannel()函数中,发现chnnid的值从程序的自定义数据中拿到的

查看程序清单的meta数据中的APPLICATION_CHANNEL 的value: baidu ,查看qryapnearby包中 chanid=baidu 一致。笔者对appid字段能app的编号

笔者搜索一下关于meta数据的作用:接入第三方服务。笔者觉得有道理, 就信了。
字段lang, 这个字段笔者大胆猜测是语言的意思,于是验证了一下,确实如此, 如下图, 查看qryapnearby包中lang=cn

9.字段sign
另外进入CreateCoreJSON 函数中 看到函数, 其中 ConstString.mStrSignPriKey = "LQ9$ne@gH*Jq%KOL";

进入public static String makeSign(Map signParam, String strSignPriKey)函数内有:

进入关键的MD5加密函数 public static final String EncryptByMD5(String strSrc)

WIFI万能钥匙协议分析的更多相关文章
- WIFI 万能钥匙万玉权:团队之中要有跨三界之外的“闲人” [转]
在团队规模较小时,很多事情都可以变得特别简单.比如架构的选择,大部分情况下,最初的架构越简单越好,随着业务的演进,架构才不断完善. 连尚网络经历了从几人到上百人的管理过程,其自主创新研发的产品 W ...
- wifi万能钥匙自媒体平台开放注册(付注册流程)
12月13日,有网友爆料,wifi万能钥匙自媒体开放注册,看来自媒体还没有达到饱和阶段,也印证了自媒体时代才刚刚到来.现在这个自媒体的时代,几乎大多互联网企业都开通了自己的自媒体,比较知名的像今日头条 ...
- Wi-Fi万能钥匙:说是破解,其实有危险(转)
Wi-Fi 万能钥匙如此危险,怎样做才能让这种可能严重侵害公众利益的 app 在中国消失? 这个“钥匙”为什么能够破解 Wi-Fi?它真的是“破解” Wi-Fi 吗?两年前我就有这个疑问了,原谅我对一 ...
- WiFi万能钥匙4.1.32接口
做Key4WiFi时提取的接口 部分代码来自于 http://zke1ev3n.me/2016/04/06/WiFi%E4%B8%87%E8%83%BD%E9%92%A5%E5%8C%99%E6%8E ...
- WiFi万能钥匙 for Macv1.1.0中文版
wifi万能钥匙 for Mac是一款运行在Mac平台上的免费WiFi热点软件,Mac分享无线流量.管理WiFi连接的必备神器.WiFi万能钥匙Mac版内置千万Wi-Fi热点数据,随时随地轻松接入无线 ...
- PHP破解wifi密码(wifi万能钥匙的接口)
新建wifi.php,复制粘贴 <?php $bssid = $_POST["bssid"] ; $ssid = $_POST["ssid"] ; if ...
- 手机WiFi万能钥匙查看破解的password和手机查询命令收集
手机须要网络利用WiFi万能钥匙破解了WIFI的password.手机就能够上网了,但假设想在电脑上使用手机破解的Wifi热点上网就须要password,此时须要知道手机破解的password,WiF ...
- 第一步:卸载手机上的“WIFI万能钥匙”! 会分享自己家的wifi
http://www.znds.com/tv-164866-1-1.html 楼主今日家中WIFI卡的不行,心想,20M的电信光纤没理由这么卡!于是就在网上查找了许多资料,接下来统一收集整理给大家!第 ...
- 家中WIFI被人用WiFi万能钥匙共享后,我们应该怎么做?
据之前WiFi万能钥匙官方称,其用户总数已经超过了8亿,且日活用户达到2亿,在海量APP中仅次于微信和QQ.可以想象有着数量如此庞大的用户,家里的WiFi是如何的"不保险". 而据 ...
随机推荐
- UVA 1613 K-Graph Oddity K度图着色 (构造)
题意:在一个n个点的无向连通图中,n是奇数,k是使得所有点的度数不超过k的最小奇数,询问一种染色方案,使得相邻点的颜色不同. 题解:一个点和周围的点的颜色数加起来最大为它的度数+1:如果最大度数是偶数 ...
- Nginx正向代理代理http和https服务
Nginx正向代理代理http和https服务 1. 背景需求 通过Nginx正向代理,去访问外网.可实现局域网不能访问外网的能力,以及防止在上网行为上,留下访问痕迹. 2. 安装配置 2.1安装 w ...
- cocos2dx lua 热更新方案的实现
(Upgrade.h) #include <stdio.h> #include "cocos2d.h" #include "framework/utils/U ...
- module.exports exports 和export export default
首先可以知道的是这是两组不同模块规范. module.exports 是CommonJS模块规范,通过require 导入 a.js: var x = 'hello' module.exports.x ...
- Truncate a string-freecodecamp算法题目
Truncate a string(截断字符串) 要求 如果字符串的长度比指定的参数num长,则把多余的部分用...来表示. 插入到字符串尾部的三个点号也会计入字符串的长度. 如果指定的参数num小于 ...
- k8s基于canel的网络策略
Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的.但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制.亲测:在kube ...
- Eclipse上进行java web项目的打包
以下是一个基于maven搭建的Spring Boot项目的目录结构 版权声明:本文为博主原创文章,未经博主允许不得转载. 原文地址: https://www.cnblogs.com/poterliu/ ...
- vsftpd服务安装与虚拟用户配置
vsftpd的全名是“Very secure FTP Daemon” 一.安装vsftpd安装db4-util用于生成认证文件 yum -y install db4-utils 安装vsftpd yu ...
- GoF23种设计模式之行为型模式之观察者模式
一.概述 定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.二.适用性1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面的时 ...
- Python头脑风暴4
IT是全国平均薪资最高的行业,2017年全国最高,人均13点4万每年. 但技术固然好,创业拼的还是世界观下的创意. 蘑菇街,并夕夕,TikTok,头条,哪个不是创意用IT技术的现实化?? 未来,大平台 ...