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

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. 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历

    摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...

  2. 26、samba搭建

    26.1.samba介绍: samba是一个网络服务器,基于linux操作系统,用于linux和windows之间数据的共享: Samba是一个能让Linux系统应用Microsoft网络通讯协议的软 ...

  3. hdu 6092 Rikka with Subset 01背包 思维

    dp[i][j]表示前i个元素,子集和为j的个数.d[i][j] = d[i][j] + d[i-1][j-k] (第i个元素的值为k).这里可以优化成一维数组 比如序列为 1 2 3,每一步的dp值 ...

  4. MySQL忘记密码怎么办-MySQL修改密码(亲测可用)

    前言: 最近要用到本地的MySQL,结果把密码忘记了. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pas ...

  5. NSDate小结

    dateFormat用法: y - 年 2013年,yyyy=2013,yy=13 M - 月 3月,M=3,MM=03,MMM=Mar,MMMM=March D - 一年中的第几天 d - 一月中的 ...

  6. 测试基础(三) Jmeter安装

    前言 JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试. 进入Jmeter官网:https://jmeter.apache.org/,进行Jmeter压缩包的下载. ...

  7. Pytest学习笔记12-配置文件pytest.ini

    前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. 常用的配置项 marks 作用:测试用例中添加了自定义标记( ...

  8. kong的管理UI选择-konga

    目录 npm方式安装 1. 准备依赖环境 2. 安装konga 3. 配置 4. 环境变量(more) 5. 数据库 配置 初始化/迁移 6. 运行 Docker方式安装 关于Kong-Dashboa ...

  9. viewport深入理解和使用

    什么是viewport ? viewport是用户网页的可视区域,也可叫做视区.手机浏览器是把页面放在一个虚拟的窗口(viewport)中,通常这个虚拟的窗口比屏幕宽,这样就不用把网页挤到很小的窗口中 ...

  10. Java学习之注解篇

    Java学习之注解篇 0x00 前言 续上篇文章,这篇文章就来写一下注解的相关内容. 0x01 注解概述 Java注解(Annotation)又称Java标注,是JDK5.0约会的一种注释机制. 和J ...