破解加速乐-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 等框架.请原谅在下的大胆行为与不自量力,本人不是为了重造轮子 ...
随机推荐
- 创建react项目并集成eslint/prettier/commit-lint
创建 react 项目 npx create-react-app jira-new --template typescript 如果不想使用 TS,而要用 JS 的话,则删除 -template ty ...
- 使⽤Swagger2构建强⼤的RESTful API⽂档
使⽤Swagger2构建强⼤的RESTful API⽂档 导语: 由于Spring Boot能够快速开发.便捷部署等特性,相信有很⼤⼀部分Spring Boot的⽤户会⽤来构建RESTful API. ...
- 详解Redis主从复制原理
文章首发于公众号 "蘑菇睡不着" 前言 Redis 的主从复制和 MySQL 差不多,主要起着 数据备份,读写分离等作用.所以说主从复制对 Redis 来说非常重要,而无论是面试还 ...
- Unity StateMachineBehaviour
在unity animator中单个Animator Clip中点击Add Behaviour增加当执行该动画时的一些状态代码,请看如下 创建完之后基本代码结构如下:(如果想修改默认代码结构,请看示例 ...
- 单片机项目中使用新IC芯片的调试方法
前两天,一位小伙伴咨询我一款新IC芯片怎么使用,借此机会我顺便把我日常工作中经常用到的一种调试方法介绍给小伙伴们,希望对对大家有所帮助.准备仓促,文中难免有技术性错误,欢迎大家给予指正,并给出好的建议 ...
- 27、异常处理(except)
27.1.什么是异常: 1.异常介绍: 异常就是程序运行时发生错误的信号,在程序出错的时候,则会产生一个异常,若程序没有处理它,则会抛出该异常, 程序的运行也会随之终止,在python中,错误触发的异 ...
- Center OS 7 通过Docker部署yapi
Center OS 7 通过Docker部署yapi 版本要求 Linux Center OS 7 安装Docker #Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前 ...
- sqlite用法总结
p.p1 { margin: 0; font: 16px "Helvetica Neue"; color: rgba(0, 0, 255, 1) } p.p2 { margin: ...
- scrapy-redis的搭建 分布式爬虫 去重
master:一.spider文件1.需要更改继承的类from scrapy_redis.spiders import RedisSpider 2.注释掉start_urls 3.在爬虫目录下新创建一 ...
- 深入理解Java容器——HashMap
目录 存储结构 初始化 put resize 树化 get 为什么equals和hashCode要同时重写? 为何HashMap的数组长度一定是2的次幂? 线程安全 参考 存储结构 JDK1.8前是数 ...