【分析客戶端文件】
客戶端有三個文件,一個.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:
固件下載地址:
客戶端有三個文件,一個.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:
固件下載地址:
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。
編譯似乎沒有成功,沒有生成預想的bin。
【修改配置文件和firefox-firebug方法】
失敗。
用winscp,和16進制編輯器修改了/etc/config/network,包含回車后openwrt內部錯誤。
Firebug的方法,回車及其后內容並沒有生效。
【唯一的思路】
之前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的標准輸入輸出不了解,導致想不到這一句巧妙的代碼。