自从作者修复了能免费运行的BUG后,身为白嫖党的我就开始动手做破解,原本是想直接从内部拿下的,但自己很菜是不争的事实,只能退而求次山寨了。
祭出Fiddler,我tm抓爆。
点击“验证”按钮抓到如下。
https://gitee.com/jianghanxia/AutoRPublic/raw/master/config.json //可能是用于与本地版本对照做到检测更新
http://get.baibaoyun.com/api/cd694e62ba74089c8df7aefb324c7910?flag=login&RegCode=这里是验证码&ProjectName=AutoR
返回了
操作失败:注册码不正确.
哎呀,我没有注册码呀!本帖完~
v1.0
但是群里有很多把自己注册码发出来的睿智呀~
我们借助免费送的注册码来看看返回了什么。
登录成功|5693029|276565591
我们来分析一下,第一个“登录成功”是让你知道已经登录成功了(简直废话),中间的那串数字代表了这个验证码还有多少时间能用,单位是“分”(你干脆计算到秒好了),最后面应该是从某个时刻从1开始++,每0.0001秒加1,至于为什么这么干,当然是为了下面的验证。
初期的时候只有这个验证,只要建个html文件把返回的数据写上去就好,至于怎么劫持域名,就自己发挥吧!
此时心跳验证的网址是
http://get.baibaoyun.com/api/cd694e62ba74089c8df7aefb324c7910?flag=getregcodetime&RegCode=这里是睿智群员友情提供的验证码&ProjectName=AutoR&AccessToken=276565591
返回的数据为
登录成功|5693029|276565591
当然这是后来验证有了新操作进行山寨的时候才知道的
v2.0
白嫖了很久之后.........
那是一个天气晴朗,游戏版本更新的日子,我熟练的打开AutoR,开始服务后过了一会就key错误,emmmm.......看来是加了验证码的长度检测,可是有什么用处呢?退出,夏姬八打了个长度为32的字符串,进去,哦吼,没事了。
15分钟后.......
脚本验证错误。
吼吼?
祭出睿智群员的验证码,扔浏览器返回的数据还是老样子,我第一反映是:难道是验证了剩余时间?
试着写了个php脚本,让中间那串数字动起来,完美解决
v3.0
白嫖了几天之后.........
那是一个天气晴朗,脚本更新之后,又GG了
抓了一下包,发现15分钟后的心跳验证
http://get.baibaoyun.com/api/cd694e62ba74089c8df7aefb324c7910?flag=getregcodetime&RegCode=这里是睿智群员友情提供的验证码&ProjectName=AutoR&AccessToken=23254006
返回了
操作失败:注册码没有登陆或者已经下线
为什么会返回这样的东西呢?他自己已经说的很清除了,脚本的首页有个验证,提交的参数里面有“flag=login”,我们先登录一下,此时注意心跳验证链接的最后的“AccessToken=23254006”,那么这个“AccessToken”的参数的那里来的呢,其实就是登录时返回的最后一串数字,然后我们去看看返回了什么
56934213
就这样???就是把剩余时间单独的拿了出来???
依旧简单,给php脚本加点料的事情。
第二天作者又给加了个不明觉厉的,独立出来的,访问地址变来变去,返回内容也变来变去的验证
对上一行的追加:这里应该是存在一个算法,使用过程中发现Token的值会被算法调用进行验算
完整代码如下
<?php if(is_array($_GET)&&count($_GET)>0){//先判断是否通过get传值了 $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = 'root'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ){ die('连接失败: ' . mysqli_error($conn));} mysqli_query($conn , "set names 'utf8'");// 设置编码 mysqli_select_db( $conn,'autortime' );//设置数据库 $sql= 'SELECT * FROM `time`'; $retval = mysqli_query( $conn, $sql );//查询 $row=mysqli_fetch_array($retval); mysqli_close($conn); if(isset($_GET["login2"])){//根据参数的名字返回不同内容 $login2=$_GET['login2']; $url = 'http://get.baibaoyun.com/api/cd694e62ba74089c8df7aefb324c7910?login2='.$login2; $result = file_get_contents($url); //验证码回源,此处验证计算方法与一层验证返回值有关 //$result = fopen($url, 'r'); //$result=fread($result, 1000); header("Content-type: text/html; charset=UTF-8"); //设置编码,虽然好像是多余的 header("Content-Length: 8");//强行设置返回值长度,不然抓包时返回的数据很奇怪 echo $result;}//解决第二层验证 elseif(isset($_GET["flag"])){ $flag = $_GET['flag']; if($flag=='login'){ $url = 'http://get.baibaoyun.com/api/cd694e62ba74089c8df7aefb324c7910?flag=login&RegCode=2A799750D3E2421E57AD899566487CD5&ProjectName=AutoR'; $string = file_get_contents($url); $start = strpos($string, '|'); $text = substr($string, $start+1); $start_text = strpos($text, '|'); $utime = substr($text, $start_text+1);//第三数值回源 header("Content-type: text/html; charset=UTF-8"); header("Content-Length: ".strlen("登录成功|".$row["autotime"]."|".$utime));//如果长度错误会导致验证错误 echo '登录成功|'.$row['autotime'].'|'.$utime;}//解决第二层验证 elseif($flag=='getregcodetime'){ echo $row['autotime'];}}}//解决第三层验证 ?>
注:Mysql只是用于读取剩余时间,只要能让剩余时间每分钟减去1,用变量都行
最后,附送【Aut0R】源码大礼包,点击下方下载即可提取
COMMENTS | NOTHING