破解加速乐-java
记录一哈自己遇到的简单站点的破解
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的更多相关文章
- 才知道百度也提供了智能DNS服务 - 加速乐
http://jiasule.baidu.com/ 智能DNS 依托百度多年积累的高精度DNS识别库,平均只需5秒全球DNS服务器全部生效,百度蜘蛛1秒生效.抗攻击.无限解析记录,免费支持电信.联通. ...
- 加速乐逆向 cookies 参数
简介 加速乐用于解决网站访问速度过慢及网站反黑客问题. 爬取使用该技术网站时需要携带特定的cookies参数(有的是__jsl_clearance_s,有的__jsl_clearance),本项目以一 ...
- Java %c0%ae 安全模式绕过漏洞
漏洞类型:安全模式绕过漏洞 漏洞描述:在Java端"%c0%ae"解析为"\uC0AE",最后转义为ASCCII低字符-".".通过这个方法 ...
- Smart Framework:轻量级 Java Web 框架
Smart Framework:轻量级 Java Web 框架 收藏 黄勇 工作闲暇之余,我开发了一款轻量级 Java Web 框架 —— Smart Framework. 开发该框架是为了: 加 ...
- 2020最精细的Java学习路线图
在吾爱破解发布的Java学习路线图自我感觉良好,之后看到动力节点Java学院的这份学习路线图感觉专业的东西还得专业的人来做,这份专业的学路线图把我上次的Java学习路线图秒成渣,虽然内容差不多,上份是 ...
- myeclipse 破解
Myeclipse 2014 破解补丁,首先需要先下载 Myeclipse 2014 官方安装文件,下载地址 http://www.jb51.net/softs/150886.html,然后下载此补丁 ...
- myeclipse2014破解过程
之前装的是10,后来没事试试装了2014,然后再破解2014后发现2010的证书就失效了,之前在网上也没找到方法,这段时间也没管,今天又自己想办法试了试,发现成功了!下边是我在网上找的破解方法的破解步 ...
- HDOJ-ACM1061(JAVA) Rightmost Digit
题意:求n的n次方的个位数(1<=N<=1,000,000,000) 第一个最愚蠢的办法就是暴力破解,没什么意义,当然,还是实现来玩玩. 以下是JAVA暴力破解: import java. ...
- [转]轻量级 Java Web 框架架构设计
工作闲暇之余,我想设计并开发一款轻量级 Java Web 框架,看看能否取代目前最为流行的而又越来越重的 Spring.Hibernate 等框架.请原谅在下的大胆行为与不自量力,本人不是为了重造轮子 ...
随机推荐
- 让你发布的nuget包支持源代码调试
前情概要 在不久的从前(也还是要以年为单位哈), 我们如果需要调试第三方代码, 或者框架代码很麻烦. 需要配置symbols, 匹配原始代码路径等. 为此, MS推出了 Source Link 功能, ...
- SpringCloud 微服务最佳开发实践
Maven规范 所有项目必须要有一个统一的parent模块 所有微服务工程都依赖这个parent,parent用于管理依赖版本,maven仓库,jar版本的统一升级维护 在parent下层可以有 co ...
- csu-acm 1503: 点到圆弧的距离
1503: 点到圆弧的距离 分析: 先判断点和圆心的连线是否在圆弧范围内,如果在,最短距离即到圆心的距离减去半径的绝对值:反之,为到端点的最短距离. 具体看注释 #include <bits/s ...
- 13.9示例:有理数Rational类
要点提示:java提供了表示整数和浮点数的数据类型,但是没有提供表示有理数的数据类型. public Rational extends Number implements Comparable {}
- 如何筛选CRM客户系统无效数据
企业将各个渠道获得的大量数据导入CRM系统之后,要如何筛选CRM客户系统无效数据?销售人员应该将更多的时间用于发掘潜在客户,而不是浪费时间来检索CRM数据.Zoho CRM能够呈现最有价值的客户,让销 ...
- Centos 8 上定时备份Gitlab ,脚本实现定时备份,备份恢复
定时备份 要求 为了能够备份和恢复,请确保你的系统上安装了Rsync yum install rsync -y 配置备份目标机器免密认证 执行ssh-keygen -t rsa 生成私钥和公钥 ssh ...
- acwing 890. 能被整除的数
#include<bits/stdc++.h> #define ll long long using namespace std; int m; int n,p[20]; int sum, ...
- hive学习笔记之十一:UDTF
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Java:Apache Commons 工具类介绍及简单使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...
- 17 shell break与continue
使用 while.until.for.select 循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用 break 或者 continue 关键字. 在C语言.Python.Ja ...