记录一哈自己遇到的简单站点的破解

Talk is cheap,show you the code!

import com.google.gson.Gson;
import com.google.gson.internal.LinkedTreeMap;
import org.jsoup.Connection;
import org.jsoup.Jsoup; import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 获取加速乐cookie
*
* @author natpacket
* @version 1.0
* @date 2021-08-04 16:25
*/
public class JSLCookie {
private static final Gson gson = new Gson();
//请求时User-Agent必须保持一致
private static final String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"; public static String getUserAgent() { return userAgent;
} /**
* 暂时检测到支持三种加密,后续可自行添加
*
* @return
*/
private static Map<String, String> getAlgorithm() {
Map<String, String> algorithm = new HashMap();
algorithm.put("sha1", "SHA-1");
algorithm.put("sha256", "SHA-256");
algorithm.put("md5", "MD5");
return algorithm;
} /**
* 通过加密cookie字符串与网站后台传入的字符串进行对比,获取真实的cookie
*
* @param json
* @return
*/
private static String getRealCookie(LinkedTreeMap<String, Object> json) throws Exception {
String chars = json.get("chars").toString();
List<String> bts = (List<String>) json.get("bts");
String ct = json.get("ct").toString();
String algorName = json.get("ha").toString();
// String cookie_key = json.get("tn").toString();
String cookie = "";
for (int i = 0; i < chars.length(); i++) {
for (int j = 0; j < chars.length(); j++) {
cookie = bts.get(0) + chars.charAt(i) + chars.charAt(j) + bts.get(1);
String cipher = "";
if (getAlgorithm().containsKey(algorName)) {
cipher = getCipherString(cookie, getAlgorithm().get(algorName));
} else {
throw new Exception("暂不支持该加密方法!");
}
if (ct.equals(cipher)) {
// return cookie_key+"="+cookie;
return cookie;
}
}
}
return "";
} /**
* 获取cookie,这里的cookie与User-Agent有关必须,保持一致
*
* @param url
* @return
* @throws IOException
* @throws ScriptException
*/
public static String getCookie(String url) throws Exception {
//初始化js执行引擎
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine engine = scriptEngineManager.getEngineByName("javascript");
//获取第一次js内容
Map<String, Object> ret_map = getContent(url, null);
//服务器返回的cookie
String response_cookie = joinMap((Map<String, String>) ret_map.get("cookies"));
//通过返回的js执行获取cookie
String cookie_script = getStrByReg("<script>(.*;).*</script>", ret_map.get("body").toString());
if("".equals(cookie_script)){
return "";
}
engine.eval(cookie_script.replaceAll("document.", "var "));
//第一次js生成的cookie
String cookie_1 = engine.get("cookie").toString().split(";")[0];
//
String cookie = cookie_1 + "; " + response_cookie;
//利用第一次请求获取的cookies 请求第二次的js
//获取生成第二次cookie的参数
//第二次js生成cookie可能为空,这里添加重试机制
int retry = 5;
for (int i = 1; i <= retry; i++) {
//返回的js
ret_map = getContent(url, cookie);
//必要参数
String jsonStr = getStrByReg("go\\((\\{.*\\})\\)", ret_map.get("body").toString());
// System.out.println(jsonStr);
LinkedTreeMap<String, Object> ltm = gson.fromJson(jsonStr, LinkedTreeMap.class);
//第二次js生成的cookie
String cookie_2 = getRealCookie(ltm);
// System.out.println(cookie_2);
if (!cookie_2.equals("")) {
cookie = response_cookie + ltm.get("tn") + "=" + cookie_2;
return cookie;
}
}
return "";
} /**
* 获取http请求内容
*
* @param url
* @param reqCookie
* @return
* @throws IOException
*/
private static Map<String, Object> getContent(String url, String reqCookie) throws IOException {
Map ret = new HashMap<String, String>();
Connection conn = Jsoup.connect(url);
if (reqCookie != null) {
conn.header("Cookie", reqCookie);
}
conn.header("User-Agent", userAgent);
conn.method(Connection.Method.GET).timeout(10000).ignoreHttpErrors(true).ignoreContentType(true);
Connection.Response response = conn.execute().charset("utf-8");
String body = response.body();
Map<String, String> cookies = response.cookies();
ret.put("body", body);
ret.put("cookies", cookies);
return ret;
} /**
* 正则提取字符串
*
* @param reg
* @param source
* @return
*/
public static String getStrByReg(String reg, String source) {
String ret = ""; Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
ret = matcher.group(1);
}
return ret;
} /**
* map转字符串
*
* @param cookies
* @return
*/
public static String joinMap(Map<String, String> cookies) {
String ret = "";
for (String key : cookies.keySet()) {
ret += key + "=" + cookies.get(key) + "; ";
}
return ret;
} /**
* 可选择加密方法加密: 如SHA-1、SHA-256、MD5等
*
* @param str
* @param algorithm
* @return
*/
public static String getCipherString(String str, String algorithm) {
try {
// 生成一个加密计算摘要
MessageDigest md = MessageDigest.getInstance(algorithm);
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回hash值
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
//一个byte是八位二进制,也就是2位十六进制字符
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} public static void main(String[] args) throws Exception {
String url = "http://www.tl.gov.cn/openness/xxgkContent/?branch_id=5c17685b6032b8388bbd5cf7&column_code=540401&page=1";
// getContent(url);
System.out.println(getCookie(url));
System.out.println(getCookie("http://www.luan.gov.cn/site/label/8888?IsAjax=1&dataType=html&_=0.6373043868807342&labelName=publicInfoList&siteId=6789941&pageSize=15&pageIndex=2&action=list&isDate=true&dateFormat=yyyy-MM-dd&length=50&organId=6608181&type=4&catId=7026181&cId=&result=%E6%9A%82%E6%97%A0%E7%9B%B8%E5%85%B3%E4%BF%A1%E6%81%AF&file=%2Fc1%2Fluan%2FpublicInfoList_newest"));
System.out.println(getCookie("http://drc.hefei.gov.cn/public/column/19121?catId=6720691&nav=3&action=list&type=4&pageIndex=2"));
System.out.println(getCookie("http://www.luan.gov.cn/public/6608181/9591601.html"));
// String reg = "\\S(\\d{2,})\\S";
// String source = "afeafgeg23fsdge";
// System.out.println(getStrByReg(reg, source));
// System.out.println(getCipherString("123456", "SHA-256"));
}
}

破解加速乐-java的更多相关文章

  1. 才知道百度也提供了智能DNS服务 - 加速乐

    http://jiasule.baidu.com/ 智能DNS 依托百度多年积累的高精度DNS识别库,平均只需5秒全球DNS服务器全部生效,百度蜘蛛1秒生效.抗攻击.无限解析记录,免费支持电信.联通. ...

  2. 加速乐逆向 cookies 参数

    简介 加速乐用于解决网站访问速度过慢及网站反黑客问题. 爬取使用该技术网站时需要携带特定的cookies参数(有的是__jsl_clearance_s,有的__jsl_clearance),本项目以一 ...

  3. Java %c0%ae 安全模式绕过漏洞

    漏洞类型:安全模式绕过漏洞 漏洞描述:在Java端"%c0%ae"解析为"\uC0AE",最后转义为ASCCII低字符-".".通过这个方法 ...

  4. Smart Framework:轻量级 Java Web 框架

    Smart Framework:轻量级 Java Web 框架 收藏 黄勇   工作闲暇之余,我开发了一款轻量级 Java Web 框架 —— Smart Framework. 开发该框架是为了: 加 ...

  5. 2020最精细的Java学习路线图

    在吾爱破解发布的Java学习路线图自我感觉良好,之后看到动力节点Java学院的这份学习路线图感觉专业的东西还得专业的人来做,这份专业的学路线图把我上次的Java学习路线图秒成渣,虽然内容差不多,上份是 ...

  6. myeclipse 破解

    Myeclipse 2014 破解补丁,首先需要先下载 Myeclipse 2014 官方安装文件,下载地址 http://www.jb51.net/softs/150886.html,然后下载此补丁 ...

  7. myeclipse2014破解过程

    之前装的是10,后来没事试试装了2014,然后再破解2014后发现2010的证书就失效了,之前在网上也没找到方法,这段时间也没管,今天又自己想办法试了试,发现成功了!下边是我在网上找的破解方法的破解步 ...

  8. HDOJ-ACM1061(JAVA) Rightmost Digit

    题意:求n的n次方的个位数(1<=N<=1,000,000,000) 第一个最愚蠢的办法就是暴力破解,没什么意义,当然,还是实现来玩玩. 以下是JAVA暴力破解: import java. ...

  9. [转]轻量级 Java Web 框架架构设计

    工作闲暇之余,我想设计并开发一款轻量级 Java Web 框架,看看能否取代目前最为流行的而又越来越重的 Spring.Hibernate 等框架.请原谅在下的大胆行为与不自量力,本人不是为了重造轮子 ...

随机推荐

  1. 让你发布的nuget包支持源代码调试

    前情概要 在不久的从前(也还是要以年为单位哈), 我们如果需要调试第三方代码, 或者框架代码很麻烦. 需要配置symbols, 匹配原始代码路径等. 为此, MS推出了 Source Link 功能, ...

  2. SpringCloud 微服务最佳开发实践

    Maven规范 所有项目必须要有一个统一的parent模块 所有微服务工程都依赖这个parent,parent用于管理依赖版本,maven仓库,jar版本的统一升级维护 在parent下层可以有 co ...

  3. csu-acm 1503: 点到圆弧的距离

    1503: 点到圆弧的距离 分析: 先判断点和圆心的连线是否在圆弧范围内,如果在,最短距离即到圆心的距离减去半径的绝对值:反之,为到端点的最短距离. 具体看注释 #include <bits/s ...

  4. 13.9示例:有理数Rational类

    要点提示:java提供了表示整数和浮点数的数据类型,但是没有提供表示有理数的数据类型. public Rational extends Number implements Comparable {}

  5. 如何筛选CRM客户系统无效数据

    企业将各个渠道获得的大量数据导入CRM系统之后,要如何筛选CRM客户系统无效数据?销售人员应该将更多的时间用于发掘潜在客户,而不是浪费时间来检索CRM数据.Zoho CRM能够呈现最有价值的客户,让销 ...

  6. Centos 8 上定时备份Gitlab ,脚本实现定时备份,备份恢复

    定时备份 要求 为了能够备份和恢复,请确保你的系统上安装了Rsync yum install rsync -y 配置备份目标机器免密认证 执行ssh-keygen -t rsa 生成私钥和公钥 ssh ...

  7. acwing 890. 能被整除的数

    #include<bits/stdc++.h> #define ll long long using namespace std; int m; int n,p[20]; int sum, ...

  8. hive学习笔记之十一:UDTF

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. Java:Apache Commons 工具类介绍及简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...

  10. 17 shell break与continue

    使用 while.until.for.select 循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用 break 或者 continue 关键字. 在C语言.Python.Ja ...