热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

公寓上网新认证方式破解研究

【分析客户端文件】客户端有三个文件,一个.exe,一个.pid,一个Skin.7z。最后一个文件里都是皮肤。前两个文件的名字,以及第二个文件的内容都是一串相同的字符串,还不知道有什么意义。
【分析客户端文件】
客户端有三个文件,一个.exe,一个.pid,一个Skin.7z。最后一个文件里都是皮肤。前两个文件的名字,以及第二个文件的内容都是一串相同的字符串,还不知道有什么意义。

【分析日志】
客户端提供了查看日志功能,这给破解带来了很大方便,软件运行的大致流程日志中一目了然,一些有用的信息也在此暴露:
模块“本机网络配置信息”,检查了本机网卡和活动链接信息,其中注意到一句:“是否支持802.1x:Yes”。说明这套系统很可能会支持802.1x认证协议。这应该不是好消息。
模块“多路路由管理”,检查了本机路由链路信息。
模块“代理软件检测”,检查了本机环境。
模块“PPPoE、L2TP、PPTP拨号认证协议”,取得了一些本机信息。
最后,创建PPPoE拨号连接。之后一条日志:“W117S733B20140928A-RASDial.pppoe”,这行信息在客户端“版本信息”中也能看到。这似乎说明:认证方式是pppoe、调用了系统自带的RASDial工具。这种方式应该是最简单的,只要今后不更换认证方式,破解就一定是有可能的。
还有一条日志:“RASDial Phone Book:C:\Users\YLD\AppData\Local\Temp\Rasphone.pbk” 。百度了一下Rasphone.pbk,没有很详细的信息,但知道它和RASDial有关,保存了一些拨号配置信息。这个文件应该有用。

【分析Rasphone.pbk】
复制出来以纯文本方式打开,里面有很多参数,注意到这个连接的名字叫做[SRun3K专用宽带拨号连接]。
果断百度一下,发现SRun3K是一种叫“深澜”的认证系统。SRun3K在日志中也出现了,不够敏感没有注意到。
进一步百度深澜,发现还有一些高校等地方用这种认证,客户端界面跟我的差不多。看来深澜这家伙每次把Skin.7z里的皮肤图片换一换就大价钱卖给不同的高校了,真是暴利。
之前以为这个系统是学校单独做的,知道了SRun3K,是好消息也是坏消息:好消息是我不是一个人,可以到网上获取有关信息;坏消息是这个系统既然比较通用,那肯定相对成熟,破解不会很容易。
继续看Rasphone.pbk,发现里面有“PhOneNumber=”键,但没有值。现在学校网络还没换好,等换好了肯定要登陆了再来看这个值。不知道是不是这样就能得到真实的账户名,如果是的话就太好了。密码估计不会在这明文保存,不奢求。

【百度与思考】
如果只是想突破Windows下的Wifi共享限制的话,网上找到可用的解决方案应该是不难的。最通用的方法就是把客户端运行在360沙箱里,这个方法据说是好使的。
可是我觉得这样没什么意义,为了上个网,你的电脑要运行360或者其它什么破解用的工具,还要运行分享Wifi用的工具或者操作命令行,还要运行官方客户端,其他所有人的流量都要由你的电脑转发。这么搞很麻烦,而且肯定会影响速度。有这功夫不如去买CMCC,淘宝不贵。
我的目标是像正常一样让一切工作在路由器自动完成。这个目标是有实现可能的:路由器可以运行Linux系统;认证方式是pppoe。
根据破解锐捷,以及百度得到的经验,破解的难点和思路有两处,一是获得pppoe拨号的真实用户名和密码(然后就可以在Linux下不用官方客户端拨号登录) ;二是通过网络抓包了解心跳认证的机制(然后就可以在Linux下模拟发送心跳包保持在线)。
对于前者:我找到的Rasphone.pbk可能有用;网上还有查看Windows事件查看器的方法可以尝试。而且貌似密码是没有经过深度加密的,如果是的话就很难办。
对于后者:之前接触过一些网络嗅探的方法可以用得上;网上可以找到Windows下的SRun3K心跳包发送器,不知道支不支持我的版本,如果直接嗅探客户端没有结论的话,可以试着嗅探这个工具。
好了,一切只等假期网络升级完毕 。

【抓取心跳包】
从网上下载了一个Windows下深澜心跳包发送器。 用Wireshark抓取到了心跳包。
Udp心跳包,每50s,由本机(路由器WAN口)IP的58***端口(53238,58151等),发送到服务器IP(客户端中有写)的3338端口。
分析Udp包内容,共56字节十六进制数据:
前32字节,是原始账号的十六进制ASCII码,不足32字节的后面补十六进制00。
接着17字节,是本机(路由器WAN口)MAC地址(冒号分隔)的十六进制ASCII码。
最后7字节,是十六进制00。

pppoe的真实密码即是原始密码;真实账号的加密方式是,原始账号按ASCII码推移几位,再加上前缀{SRUN}。

如果我们的客户端认证方式和这个一样,那么完美破解就是必然的。
“如何在openwrt下每50s发送特定Udp包”是要研究的问题,网上资料不多。

【拿到路由器实测】

按原来的方法,极路由刷mentohust:
固件下载地址:

 
http://downloads.openwrt.org.cn/PandoraBox/RY-1/PandoraBox-ralink-pry1-r208-20140123.bin

Winscp上传aaa.bin文件到/tmp目录。

Rutty连接。

指令:
root@Hiwifi:~# cd /tmp
root@Hiwifi:/tmp# ls
root@Hiwifi:/tmp# mtd write aaa.bin firmware
完成后:
root@Hiwifi:/tmp# reboot

在设置向导中pppoe拨号(家里的)。
在软件包管理中安装netcat。
(管理-状态-路由表-活跃ARP是连接的电脑)

Rutty:
# echo 1234567890|nc -u -p7777 192.168.1.238 8888

在192.168.1.238电脑上,用wireshark抓包,能抓到来自192.168.1.1:7777去往192.168.1.238:8888,内容为1234567890的UDP包,后面跟着7字节00。
研究了echo的输出转义。

【openwrt下用netcat发送心跳包】

# echo -e -n '1234567890\0000\0000\0000\0000\0000\0000\00
00\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000AC:
22:0B:00:77:9A\0000\0000\0000\0000\0000\0000\00
00'|nc -u -p49867 192.168.1.238 3338


用wireshark抓包,这个包和心跳包发送器发的包,长度和Data部分完全相同,只有头部不同。UDP协议头部具体我不清楚,不过我觉得这应该不是问题。
怎样发包的问题朝思暮想各处发帖求问了一天,最后拿到路由器尝试着就解决了,非常开心,不需要用到socket编程,也是让石头落了地。

之前主要的难题就是怎样构建包中的00字节。从各种角度思考,最后还是靠man echo解决了。这里也算是第一次真正体会到linux的强大之处,管道“|”,和选项参数的使用可谓巧妙。

接下来就是怎样在linux下每50s执行这段命令的问题。

【实现每50s发送】
先是尝试了crontab计划任务,这段任务可以实现:
*/1 * * * * echo -e -n '1234567890\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\000\0000\0000\0000\0000AC:22:0B:00:77:9A\0000\0000\0000\0000\0000\0000\0000'|nc -c -u -p49867 192.168.1.238 3338

一开始研究crontab的时候,用wireshark抓包,只能抓到nc发送的第一个包。后来查看openwrt系统日志发现,执行过一次nc后再执行,就会有“Process already running” 错误。研究了很久,最后发现了nc的一个参数"-c",在EOF后关闭。这样问题就解决了!

单纯利用crontab不太好实现精确到1min以内的调用。就想到Linux Shell脚本。研究shell脚本的时候发现openwrt提供了直接写启动脚本的地方,这真是太方便了!于是用shell脚本死循环自启动解决了这个问题:

echo My shell start!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
while true
do
echo -e -n '1234567890\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\000\0000\0000\0000\0000AC:22:0B:00:77:9A\0000\0000\0000\0000\0000\0000\0000'|nc -c -u -p49867 192.168.1.238 3338
sleep 5
echo KeepAlive Udp sent!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
done
至此,经过三天不懈努力,破解新认证已经理论上完成了!开心!
【总结】
1.获取真实PPPOE账号。
电脑用官方客户端登陆一次。查看Rasphone.pbk,得到真实账号(如果得不到,用此方法:右键我的电脑-管理-事件查看器-windows日志-系统,右侧搜索“来源”为"RasMan"的信息)。
用此账号和密码,尝试用电脑建立新PPPOE连接。如果连接成功,则破解成功一半。

对比真实和原始账号,结合心跳包工具,确定加密方式备用。


2.判断心跳包机制。
不用官方客户端的情况下:
观察是否断网和断网间隔。
打开心跳包工具,观察是否断网和断网间隔,同时用wireshark观察记录心跳包工具发送的包备用。
如果心跳包工具能使不断网,则破解一定成功。


3.结合观察心跳包工具发送的包,编写适用于netcat的心跳包。


4.连接路由器。

5.路由器设置向导中pppoe拨号。

6.(趁没有断网时)在软件包管理中安装netcat。


7.写入自启动脚本。

【实测】

实际账户名里竟然包含回车符。加密可以用技术,但这简直是玩阴的,不开心。

有点气馁,还是没逃过要修改和编译源代码。

【继续】
走上一条不归路,开搞openwrt源代码。

 
 

【编译openwrt】

目标路由器:极路由1S型号HC5661(CPU MT7620A)。


编译环境操作系统:Fedora 20。
安装可能需要的软件包:
sudo yum install gcc
sudo yum install gcc-g++
sudo yum install ncurses-devel
sudo yum install zlib-devel
sudo yum install bison
sudo yum install flex
sudo yum install autoconf
sudo yum install gawk
sudo yum install gettext
sudo yum install patch
sudo yum install subversion
sudo yum install sqlite
sudo yum install git


下载openwrt trunk源码:
svn co svn://svn.openwrt.org/openwrt/trunk


进入目录:
cd trunk


更新软件包:
./scripts/feeds update –a
./scripts/feeds install –a


配置工具:
make defconfig
make menuconfig


配置工具界面选项:
Target System:Ralink RT288x/RT3xxx
Subtarget:MT7620a based boards
集成ncat等软件包。
Ntpclient编译时无法下载,应移除。


{其它修改}


编译:
make V=s


固件保存在/home/trunk/bin/主控芯片系列/目录下,有3个对应不同刷机模式的bin文件。取*factory.bin。

 
http://wenku.baidu.com/link?url=PdY0igzRdFSHtZLL6m49STRRh3XvxscjB3BTD234u2dqkwvVCmrHS2Fmoni2CN2_7FcV3sSwOih3PbD__6ZnDc9Dgiyj7Tuc-XHkSA0kC7u

编译似乎没有成功,没有生成预想的bin。

【修改配置文件和firefox-firebug方法】
失败。
用winscp,和16进制编辑器修改了/etc/config/network,包含回车后openwrt内部错误。
Firebug的方法,回车及其后内容并没有生效。

 
http://www.right.com.cn/forum/thread-149330-1-8.html

【唯一的思路】
之前openwrt的编译算是成功了,可以刷。但是不知道为什么都是sysupdate而没有factory。而且肯定也要按那篇文章所说对极路由添加特别支持。这个先不管。
现在知道了负责pppoe拨号的是ppp 2.4,从github上下的版本和openwrt里看到的一样。搞吧。开源万岁。

trunk/dl里有ppp-2.4.7.tar.gz。对这个文件做手脚。慢慢分析源代码吧,只有这样了。


【Take it easy..】

本来研究破解这事完全是凭借兴趣的,并且打算如果成功了会公开方法。结果前几天在学校贴吧发个帖子,说如果我200块钱卖的话有没有人想买,到现在得有50个人左右要买了。我默默的算了一下,如果破解成功了,我至少能赚一万块钱。。。导致我现在拼命研究破解,分不清是为了兴趣还是为了钱了。。这个假期除了吃饭睡觉就在研究这事,心情比较压抑,刚才还感觉眼睛很累不舒服,是时候慢下来了。破解不会放弃还会继续,但是调整心态慢慢来。Android和linux的学习也要继续。
 

【终结--其他人的成功方法】
 贴吧上有人分享了成功方法,看了他提供的方法。
 和我的思路是一样的,和我不同的一处是心跳包发送的实现。他自己写了个client。虽然我也实现了发送心跳包,但自己写一个出来显然更直接,灵活性更强。这一点我差在不会linux网络编程上。
我最后没有完成破解,就差在拨号这一步。我已经知道,为了实现这个拨号,需要修改相关的源代码,但是不知道具体应该去哪里修改,怎么修改。他的方法,修改了ppp.sh这个脚本,只需一句话username=`echo -e "$username"`。
echo的-e参数使得文本支持转义。真是得来全不费工夫。又该赞叹Linux的强大巧妙了。 
我没有想到这个方法的原因,还是对于Linux知识有限吧, 对于路由器ppp拨号的流程不了解,导致找不到下手的地方;对于echo这个命令和Linux的标准输入输出不了解,导致想不到这一句巧妙的代码。


推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
author-avatar
手机用户2702934045
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有