IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    如何刷应用商店排名

    杜工发表于 2013-07-01 13:42:48
    love 0

    目前应用商店可谓五花八门,比较简单的是直接把官方商店的应用信息都抓过来,赚个展现的广告费,如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

    图1 找到下载的tcp连接

    2

    图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中运行下看看效果吧。



沪ICP备19023445号-2号
友情链接