目前应用商店可谓五花八门,比较简单的是直接把官方商店的应用信息都抓过来,赚个展现的广告费,如gao7.com; 略复杂的是内容全部开发者自提,相当于重新做了个应用商店,可以和官方抗衡,如91.com; 再复杂些的就是结合前面两点的内容,既有开发者的提交,也有自动从官方的抓取,如同步推和25pp. 杜工将以25pp为例,从技术层面介绍刷应用排名的详细的方法。
知识储备:
1. tcp通讯的基本方式
2.抓包工具的使用 ,杜工喜欢的是fiddler.(http://fiddler2.com/)
3.家用路由器基本配置
4.php基础
原理:
利用路由器重拨功能变换ip,然后用php工具模拟手机助手向服务器发送下载数据,以达到目的。
Step 1:
打开手机应用PP助手,找到要刷的应用,开始抓包,然后点下载,停止抓包。在抓包工具中找到下载过程中进行的网络通讯,将post的内容予以保存. 此时注意,post的内容是一堆乱码,不要复制保存,而要使用16进制模式的”save to selected”功能, 我们将其保存为hex文件. 并记录header头信息:
图1 找到下载的tcp连接
图2 保存post的boday信息到文件
记录header头信息:
POST <a href="http://mobileup.25pp.com/index.php:80">http://mobileup.25pp.com/index.php:80</a> HTTP/1.1 Host: mobileup.25pp.com Connection: keep-alive Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Cookie: pgv_pvi=4947xxxxx; Hm_lvt_80c7667d40c35eec40368ef5cd6547d4=1372384421; __utma=113739972.1739925924.1372384420.1372384420.1372384420.1; __utmz=113739972.1372384420.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic|utmctr=%E7%BE%8E%E8%85%BF%E9%89%B4%E8%B5%8F Accept-Language: zh-cn Accept: */* Content-Length: 63 Connection: keep-alive User-Agent: 25pp/0.990 CFNetwork/609.1.4 Darwin/13.0.0 |
Step 2:
用电脑登陆到路由器管理后台,查看断开连接和开始连接的页面,并记录header头信息。我家的比较简单,直接post不同变量到同一个链接地址,就可以实现路由器重拨,以达到换ip功能。该过程具体不在详述,一会儿在php文件中体现。
Step 3:
开始编码:
<?php //开始模拟下载过程 $host = "mobileup.25pp.com"; $path = "index.php:80"; $port = 80; $content = file_get_contents("hex"); $data = "POST /" . $path . " HTTP/1.1\r\n"; $data .= "Connection: keep-alive\r\n" . "Accept-Encoding: gzip, deflate\r\n" . "Content-Type: application/x-www-form-urlencoded\r\n" . "Cookie: pgv_pvi=4947xxxxx; Hm_lvt_80c7667d40c35eec40368ef5cd6547d4=1372384421; __utma=113739972.1739925924.1372384420.1372384420.1372384420.1; __utmz=113739972.1372384420.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic|utmctr=%E7%BE%8E%E8%85%BF%E9%89%B4%E8%B5%8F\r\nAccept-Language: zh-cn\r\n" . "Accept: */*\r\n" . "Content-Length: 63\r\n" . "Connection: keep-alive\r\n" . "User-Agent: 25pp/0.990 CFNetwork/609.1.4 Darwin/13.0.0\r\n"; $data .= "\r\n"; $data .= $content . "\r\n\r\n"; //刷1000次不过分吧? while ($j < 1000) { $j++; for($i = 0;$i < 21;$i++) { $ock = fsockopen($host, $port); if (!$ock) { echo 'No response from ' . $host . "\n";; // die; } fwrite($ock, $data); while (!feof($ock)) { echo fgets($ock, 1024); } sleep(1); echo $j . "\t" . $i . "\n"; } reconnect(); //路由器更换ip需要一定的时间,视情况而定。 sleep(15 * 60); } function curl($url, $ifpost = 0, $datafields = '', $cookiefile = '') { //这个地方要注意了,是路由器的认证登陆信息,抓包的时候应该会有所体现。 $header = array("Authorization: Basic XXXXXXXXXX="); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $ifpost && curl_setopt($ch, CURLOPT_POST, $ifpost); $ifpost && curl_setopt($ch, CURLOPT_POSTFIELDS, $datafields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); $cookiefile && curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); $cookiefile && curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); $r = curl_exec($ch); curl_close($ch); return $r; } function reconnect() { // 断开 $t1 = curl("http://192.168.1.1/RST_conn_status.htm"); preg_match("/timestamp=([0-9]+)/", preg_replace("/[\n]/", "", $t1), $m); curl("http://192.168.1.1/apply.cgi?/RST_conn_status.htm%20timestamp=" . $m[1], 1, "submit_flag=connect_status&endis_connect=0"); sleep(10); // 连接 $t1 = curl("http://192.168.1.1/RST_conn_status.htm"); preg_match("/timestamp=([0-9]+)/", preg_replace("/[\n]/", "", $t1), $m); curl("http://192.168.1.1/apply.cgi?/RST_conn_status.htm%20timestamp=" . $m[1], 1, "submit_flag=connect_status&endis_connect=3"); sleep(20); } |
好了,编码完成。到 cmd中运行下看看效果吧。