找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: bbaa

[数值计算] 【Warning:此贴已经过气】【挑战】用任何语言在猜数游戏作弊

[复制链接]
 楼主| 发表于 2017-7-2 13:04:29 | 显示全部楼层
回复 15# happy886rr


    排查完毕
 楼主| 发表于 2017-7-2 13:39:10 | 显示全部楼层
本帖最后由 bbaa 于 2017-7-2 14:07 编辑

回复 14# 老刘1号


    之前崩的原因是有个空用户名的家伙........
  1. unset($json["Username"][""]);
复制代码
发表于 2017-7-2 14:06:22 | 显示全部楼层
回复 17# bbaa


    举手,我干过。
发表于 2017-7-2 14:25:17 | 显示全部楼层
本帖最后由 老刘1号 于 2017-7-2 18:02 编辑

回复 1# bbaa
回复 18# codegay
回复 15# happy886rr
取平均数递归法,最多计算6次就可得出结果
欢迎测试~(存Bat)
  1. '&cls&@echo off&cscript -nologo -e:vbscript "%~0"&pause&exit
  2. With CreateObject("MSXML2.XMLHTTP")
  3.         .Open "POST", "http://bbaass.tk/math/", False
  4.         .setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"
  5.         .Send "send=reg&username=老刘"
  6. End With

  7. Do
  8.         Bisection -1,101,0
  9. Loop

  10. Sub Bisection(low,high,s)
  11.         Mid_=(High+Low)\2
  12.         if s<=7 then
  13.                 Select Case Cstr(Math(Mid_))
  14.                         Case "="
  15.                                 wscript.echo "Win!The number is "&Mid_
  16.                         Case ">"
  17.                                 WScript.Echo ">,so try "&Low&","&Mid_
  18.                                 Bisection Low,Mid_,s+1
  19.                         Case "<"
  20.                                 WScript.Echo "<,so try "&Mid_&","&High
  21.                                 Bisection Mid_,High,s+1
  22.                 End Select
  23.         end if
  24. End Sub

  25. Function Math(num)
  26.         With CreateObject("MSXML2.XMLHTTP")
  27.                 .Open "POST","http://bbaass.tk/math/", False
  28.                 .setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"
  29.                 .send "send=Answer&math=" & num & "&username=老刘"
  30.                 Math = Split(Split(.responseText,",")(2),"""")(3)
  31.         End With
  32. End Function
复制代码

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 厉害

查看全部评分

发表于 2017-7-2 15:12:53 | 显示全部楼层
回复 19# 老刘1号
不过偶尔还会出现下标越界。而且有几次计算了20多次才猜中正确的数,你的算法还不是标准二分,比较费内存。如果是猜测1到10000之内的数,你的程序就非常缓慢。 把那个递归取消了,有递归的都不是标准二分。
发表于 2017-7-2 17:44:23 | 显示全部楼层
本帖最后由 老刘1号 于 2017-7-2 17:55 编辑

回复 20# happy886rr


    嗯,猜20多次是因为服务端数字变更了(正常最多7次)
下标越界是服务器没返回JSON,导致无法分割得到符号
尴尬的是,0和100不在范围里面(失误,已修正)……
总之就是递归然后除2取整
当时一脑抽就用的递归而不是循环╮(╯_╰)╭
算是自己研发的变种了吧
感谢大佬鼓励<v<
 楼主| 发表于 2017-7-2 18:11:11 | 显示全部楼层
回复 19# 老刘1号


    添加tokens具体看 1#
发表于 2017-7-2 18:15:43 | 显示全部楼层
回复 22# bbaa


    晕,早说啊
算了,就酱紫吧~
懒得动手了~
发表于 2017-7-2 18:47:28 | 显示全部楼层
本帖最后由 reKonquer 于 2017-7-2 18:49 编辑

回复 1# bbaa


    来个高级的 用到了okhttp,gson
  1. package com.rekonquer.math;

  2. import com.google.gson.Gson;
  3. import okhttp3.*;

  4. import java.io.IOException;

  5. /**
  6. * Author: MagicDroidX
  7. */
  8. public class Main {

  9.     public static OkHttpClient HTTP_CLIENT;
  10.    
  11.     public static String token = null;

  12.     public static int min = 1;
  13.     public static int num = 50;
  14.     public static int max = 100;

  15.     public static void main(String[] args) throws IOException {
  16.         HTTP_CLIENT = new OkHttpClient.Builder()
  17.                 .build();

  18.         while (true) {
  19.             AnswerRequest request = new AnswerRequest();
  20.             request.math = num;
  21.             Response response = HTTP_CLIENT.newCall(
  22.                     new Request.Builder()
  23.                             .url("http://bbaass.tk/math/index.php")
  24.                             .post(new FormBody.Builder()
  25.                                     .add("send", "Answer")
  26.                                     .add("username", "reKonquer")
  27.                                     .add("math", String.valueOf(num))
  28.                                     .build()
  29.                             )
  30.                             .build()
  31.             ).execute();


  32.             if (!response.isSuccessful()) {
  33.                 continue;
  34.             }

  35.             AnswerResponse answer;
  36.             try {
  37.                answer = new Gson().fromJson(response.body().string(), AnswerResponse.class);
  38.             } catch (Exception e) {
  39.                 continue;
  40.             }

  41.             if (answer == null) {
  42.                 continue;
  43.             }

  44.             if (token == null || token.equals(answer.tokens)) {
  45.                 token = answer.tokens;
  46.                 switch (answer.re) {
  47.                     case ">": {
  48.                         System.out.println(num + " 小了");
  49.                         max = num;
  50.                         break;
  51.                     }
  52.                     case "<": {
  53.                         System.out.println(num + " 大了");
  54.                         min = num;
  55.                         break;
  56.                     }
  57.                     case "=":
  58.                     default: {
  59.                         System.out.println("正确答案:" + num);
  60.                         token = null;
  61.                         continue;
  62.                     }
  63.                 }

  64.                 num = (int) ((min + max) / 2d);
  65.             } else {

  66.                 if (answer.re.equals("=")) {
  67.                     System.out.println("正确答案:" + num);
  68.                 }

  69.                 System.out.println("新的一局:" + token + " => " + answer.tokens);
  70.                 min = 1;
  71.                 max = 100;
  72.                 num = 50;
  73.                 token = answer.tokens;
  74.                 continue;
  75.             }
  76.         }
  77.     }

  78. }

  79. package com.rekonquer.math;

  80. /**
  81. * Author: MagicDroidX
  82. */
  83. public class AnswerResponse {
  84.     public int code;
  85.     public String re;
  86.     public String tokens;
  87. }
复制代码
网站崩了,本来能超过第一的

评分

参与人数 2技术 +2 收起 理由
codegay + 1 少年筋骨精奇,写得一手漂亮程序。
老刘1号 + 1 不明嚼栗

查看全部评分

发表于 2017-7-2 19:03:41 | 显示全部楼层
回复 24# reKonquer


    同志,你再不开我就超了你哈~
发表于 2017-7-7 21:36:30 | 显示全部楼层
以下是模仿了happy和ro的程序写的。经过几次修改,应该是能比较长时间持续运行了。
这个网站一言不合就返回500错误或者无规律清空数据,在刚开始很困扰,很懵B。

后来长时间运行发现,也有可能极小概率请求后返回404或者跳转到首页。所以也必须要在关键代码上处理错误。
→_→代码丑。但是管用。
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on 2017-07-02 13:57:56
  4. @author: codegay
  5. python3 & 编辑器 == spyder
  6. """

  7. import requests
  8. import time

  9. apiurl = "http://bbaass.tk/math/"

  10. s = 0

  11. username = "codegay"
  12. data = {
  13.         'send': 'Answer',
  14.         'username': username,
  15.         'math': 0,
  16.         }


  17. def reg(username="codegay"):
  18.     data = {"send": "reg", "username": username}
  19.     try:
  20.         requests.post(apiurl, data=data)
  21.     except:
  22.         global s
  23.         s += 1
  24.         print("reg程序江化,错误+1s")
  25.         time.sleep(2)


  26. def answer(min=0, max=100):
  27.     answering = True
  28.     answercounter = 0
  29.     token = ''
  30.     global s

  31.     while answering:
  32.         math = data['math'] = round((min+max)/2)
  33.         try:
  34.             time.sleep(0.3)
  35.             post = requests.post(apiurl, data=data, timeout=6)
  36.             print(post.text)
  37.         except Exception as err:
  38.             s += 1
  39.             print(err)
  40.             print("程序江化,错误+1s", "    错误总次数:", s)
  41.             time.sleep(1)
  42.         else:
  43.             answercounter += 1
  44.             print("数字:", math, "    counter:", answercounter)
  45.             re = ''
  46.             if post.status_code == 500:
  47.                 reg()
  48.                 time.sleep(1)
  49.             elif post.status_code == 200:

  50.                 try:
  51.                     result = post.json()
  52.                 except:
  53.                     answering = False
  54.                     continue

  55.                 re = result['re']

  56.                 if token and token != result['tokens']:
  57.                     answering = False
  58.                     continue
  59.                 token = result['tokens']

  60.                 if re == '=':
  61.                     answering = False
  62.                 if re == ">":
  63.                     max = data['math']
  64.                 if re == "<":
  65.                     min = data['math']
  66.             else:
  67.                 s += 1
  68.                 print("远程目标服务器程序江化,错误+1s")
  69.                 time.sleep(1)

  70. reg()

  71. while True:
  72.     answer()
复制代码

评分

参与人数 2技术 +2 收起 理由
老刘1号 + 1 不明嚼栗
happy886rr + 1 非常严谨。

查看全部评分

发表于 2017-7-8 11:17:56 | 显示全部楼层
回复 26# codegay

把细节都考虑进去了,如果把user-agent修改为火狐浏览器,就好了。这个php服务器对py的请求会拒绝,只能伪造user-agent来实现高速和稳定的请求。
发表于 2017-7-8 16:12:46 | 显示全部楼层
本帖最后由 523066680 于 2017-7-8 17:01 编辑

清零了?

写了一段代码查看赛跑情况
  1. use JSON;
  2. use Encode;
  3. use Try::Tiny;
  4. use Data::Dumper;
  5. use HTTP::Headers;
  6. use Time::HiRes qw/time sleep/;
  7. use IO::Handle;
  8. STDOUT->autoflush(1);

  9. use LWP::Simple;
  10. use LWP::UserAgent;

  11. our $user    = "vic3";
  12. our $website = 'http://bbaass.tk/math/';
  13. our ($user, $website, $headers);

  14. my ( $min, $max ) = (0, 100);
  15. my $test = int(($max + $min) / 2);
  16. my $data;

  17. our $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0', timeout => 5 );
  18. our $res;

  19. my %ever;
  20. my %current;
  21. getData( \%ever );

  22. my $count = 0;
  23. while (1)
  24. {
  25.     getData(\%current);

  26.     $count = 0;
  27.     for my $k (reverse sort { $ever{$a} <=> $ever{$b} } keys %ever)
  28.     {
  29.         printf "%-10s %d + %d\n", $k, $ever{$k}, $current{$k} - $ever{$k};
  30.         last if ($count++ > 3);
  31.     }
  32.     print "\n";

  33.     sleep 10.0;
  34. }

  35. sub getData
  36. {
  37.     our $res;
  38.     my $href = shift;
  39.     my $data;

  40.     while (1)
  41.     {
  42.         $res = $ua->post( $website, [ username => $user, send => 'reg' ] );
  43.         $res = $ua->post( $website, [ username => $user, send => 'user' ] );
  44.         try { $data = decode_json( $res->content ); last; }
  45.         catch { sleep 2.0; printf "repeat\n" }
  46.     }

  47.     for my $e ( @{$data->{'user'}} )
  48.     {
  49.         ( $times, $name, $state ) = @$e;
  50.         $href->{$name} = $times;
  51.     }
  52. }
复制代码

  1. vic3       0 + 0
  2. bbaa       0 + 0
  3. vic        0 + 0
  4. vic2       55 + 10
  5. codegay    75 + 11

  6. vic3       0 + 0
  7. bbaa       0 + 0
  8. vic        0 + 0
  9. vic2       55 + 11
  10. codegay    75 + 11

  11. vic3       0 + 0
  12. bbaa       0 + 0
  13. vic        0 + 0
  14. vic2       55 + 12
  15. codegay    75 + 12
复制代码

评分

参与人数 1技术 +1 收起 理由
老刘1号 + 1 6

查看全部评分

 楼主| 发表于 2017-7-8 16:28:01 | 显示全部楼层
回复 26# codegay


    无规律清空是因为我偷懒没用数据库 导致多人请求时同时写文件挂掉
Happy应该知道
发表于 2017-7-8 16:31:28 | 显示全部楼层
本帖最后由 523066680 于 2017-7-8 16:37 编辑

我在想能不能在别的网络上运行脚本,假冒 codegay 输入错误的数值来阻击他的刷新频率
(实测然并卵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:12 , Processed in 0.023057 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表