目前应用商店可谓五花八门,比较简单的是直接把官方商店的应用信息都抓过来,赚个展现的广告费,如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 http://mobileup.25pp.com/index.php:80 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:
开始编码:
//开始模拟下载过程
$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中运行下看看效果吧。