36漫画刷邀请Java版

逛b站看漫画看迷了
准备来论坛找个成品拿去看漫画

看见了36漫画有个刷邀请的分析帖和一个Python复现的帖子
不过环境都没搭,就用Java写了个
刷了几百个邀请顺手给大伙分享出来

-1

Java版:

  1. package org.example;
  2. import com.alibaba.fastjson.JSONObject;
  3. import okhttp3.*;
  4. import javax.crypto.Cipher;
  5. import javax.crypto.SecretKey;
  6. import javax.crypto.SecretKeyFactory;
  7. import javax.crypto.spec.DESedeKeySpec;
  8. import javax.crypto.spec.IvParameterSpec;
  9. import java.nio.charset.StandardCharsets;
  10. import java.security.SecureRandom;
  11. import java.security.spec.AlgorithmParameterSpec;
  12. import java.time.LocalDate;
  13. import java.time.format.DateTimeFormatter;
  14. public class ComicsInvita {
  15.     private static final String ALGORITHM = “DESede/CBC/PKCS5Padding”;//加解密类型
  16.     private static final String SECRET_KEY = “OW84U8Eerdb99rtsTXWSILDO”;//秘钥
  17.     private static final byte[] IV_BYTES = “SK8bncVu”.getBytes(StandardCharsets.UTF_8);//iv偏移
  18.     /**
  19.      * DES数据加密
  20.      *
  21.      * @param plaintext 需要加密的字符串
  22.      * @return 加密结果
  23.      */
  24.     private static String encrypt(String plaintext) throws Exception {
  25.         DESedeKeySpec desKeySpec = new DESedeKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8));
  26.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(“DESede”);
  27.         SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
  28.         Cipher cipher = Cipher.getInstance(ALGORITHM);
  29.         AlgorithmParameterSpec ivSpec = new IvParameterSpec(IV_BYTES);
  30.         cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
  31.         byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
  32.         return new String(java.util.Base64.getEncoder().encode(encryptedBytes), StandardCharsets.UTF_8);
  33.     }
  34.     /**
  35.      * Returns 获取今天的年月日
  36.      *
  37.      * @return 年月日
  38.      */
  39.     public static String getTodayDate() {
  40.         LocalDate now = LocalDate.now();
  41.         DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
  42.         return now.format(formatter);
  43.     }
  44.     /**/
  45.     /**
  46.      * 获取封装的数据
  47.      *
  48.      * @param code 邀请码
  49.      * @return 加密后的数据
  50.      */
  51.     public static String getData(String code) throws Exception {
  52.         //封装数据
  53.         JSONObject json = new JSONObject();
  54.         json.put(“sourceType”, “novel”);
  55.         json.put(“platform”, “android”);
  56.         json.put(“packageName”, “sanliumanhua.apps.com”);
  57.         json.put(“version”, “9tg.06.07.207”);
  58.         json.put(“channel”, “gw”);
  59.         json.put(“deviceno”, getRandomId(16));
  60.         json.put(“ts”, getTodayDate());
  61.         json.put(“code”, code);
  62.         return encrypt(json.toString());
  63.     }
  64.     /**
  65.      * 生成指定长度的随机字符串
  66.      *
  67.      * @param len 生成的随机字符串长度
  68.      * @return 生成的字符串
  69.      */
  70.     public static String getRandomId(int len) {
  71.         String characters = “0123456789abcdefghijklmnopqrstuvwxyz”;
  72.         SecureRandom random = new SecureRandom();
  73.         StringBuilder builder = new StringBuilder(len);
  74.         for (int i = 0; i < len; i++) {
  75.             int randomIndex = random .nextInt(characters .length());
  76.             char randomChar = characters .charAt(randomIndex);
  77.             builder.append(randomChar);
  78.         }
  79.         return builder.toString();
  80.     }
  81.     /**
  82.      * 刷36漫画邀请数
  83.      */
  84.     public static void main(String[] args) throws Exception {
  85.         OkHttpClient client = new OkHttpClient();
  86.         int success = 0, fail = 0;//成功与失败次数
  87.         String inviteCode = “35209893”;//邀请码
  88.         int number = 10;//需要刷的次数
  89.         for (int i = 0; i < number; i++) {
  90.             RequestBody formBody = new FormBody.Builder()
  91.                     .add(“data”, getData(inviteCode))
  92.                     .add(“action”, “verifycode”)
  93.                     .build();
  94.             Request request = new Request.Builder()
  95.                     .url(“https://lb.pigqq.com/UserShareAction.aspx”)
  96.                     .post(formBody)
  97.                     .build();
  98.             Response response = client.newCall(request).execute();
  99.             String responseBody = response.body().string();
  100.             if (responseBody.contains(“验证通过”)) {
  101.                 ++success;
  102.                 System.out.println(“当前请求第” + (i + 1) + “次 结果成功”);
  103.             } else {
  104.                 ++fail;
  105.                 System.out.println(“当前请求第” + (i + 1) + “次 结果失败”);
  106.             }
  107.         }
  108.         System.out.println(“成功=” + success + “\n失败=” + fail);
  109.     }
  110. }

复制代码

蓝奏云 密码:hk6m

标签

发表评论