URL解密-某公共资源平台

爱必应

文章目录

目标网站:

http://www.bjmtg.gov.cn/ggzy/jyxxzc/index.jhtml

在这里插入图片描述

分析加密点:

我们想要详情页的数据,但是详情页的url链接并不是为们想的简单通过数字方式相加就可以,或者是再主页面拿到的详情页url链接也是不对的。一般来讲我们会再主页面拿到详情页url,然后进行数据抓取。但是这个网站并不是这样,为们可以看一下:
在这里插入图片描述
如上图:==1==代表是为们通过爬虫拿到的详情页的url,但是我们再看看,这个真正的详情页的链接,点击==2==。
在这里插入图片描述
这才是我们真正的链接。
现在我们思考:我们可以通过手动点击进入这个详情页,那么肯定是在们点击的时候对上面的==步骤1==当中的url进行了一下加密,这样我们就能跟容易的通过跟踪鼠标点击事件,找到他的加密点。

解密:

    1、跟踪鼠标点击事件:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里,我们看到他对a标签做了一个点击事件的监听,我们看看a标签到底是什么(将鼠标点击右边的框),很显然这个a标签就是我的a链接,我们点进去看。
在这里插入图片描述
到这里我们就知道了,他采用的是aes加密,现在加密点分析出来了,后面的操作就简单了。
我们也可打上断点,进行试验一下,看看是不是这里进行了加密:
在这里插入图片描述
打上断点之后,我们再点击一下详情页,即可。然后我们往下分析,看见了他的整个加密过程,最后就是重写js代码的问题了。

    2、解密实现:

直接从写他的js代码即可:

var Cryoptojs = require('crypto-js');function decrypt(href) {    var s = "qnbyzzwmdgghmcnm";    var hh = href;    var aa = hh.split("/");    var aaa = aa.length;    var bbb = aa[aaa - 1].split('.');    var ccc = bbb[0];    var cccc = bbb[1];    var r = /^\+?[1-9][0-9]*$/;    if (r.test(ccc) && cccc.indexOf('jhtml') != -1) {        var srcs = Cryoptojs.enc.Utf8.parse(ccc);        var k = Cryoptojs.enc.Utf8.parse(s);        var en = Cryoptojs.AES.encrypt(srcs, k, {            mode: Cryoptojs.mode.ECB,            padding: Cryoptojs.pad.Pkcs7        });        var ddd = en.toString();        ddd = ddd.replace(/\//g, "^");        ddd = ddd.substring(0, ddd.length - 2);        var bbbb = ddd + '.' + bbb[1];        aa[aaa - 1] = bbbb;        var uuu = '';        for (i = 0; i < aaa; i++) {            uuu += aa[i] + '/'        }        uuu = uuu.substring(0, uuu.length - 1);        // window.open(uuu)        return uuu    } }console.log(decrypt('http://www.bjmtg.gov.cn:80/ggzy/jyxxzbhxrgs/2518.jhtml'));

我这里直接用crypto-js这个模块的,里面自带了相关的函数。

    3、运行截图:

在这里插入图片描述
这里还有一个问题,如果你想再python中调用这个javascript代码,他会报错,因为python中是没有这个crypto-js的,当然你也可以选择给它从加密点抠出来,放在javascript代码,这里我们不用这种方法,我们直接用node.js开放一个本地API接口,然后再python中直接请求这个接口,调用函数。

var Cryoptojs = require('crypto-js');const express = require('express');const bodyParser = require('body-parser');const app = express();app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: true }));app.post('/post',function (req,res) {    data= req.body;    console.log(        "传过来的数值为: %s",data    );    function decrypt(href) {        var s = "qnbyzzwmdgghmcnm";        var hh = href;        var aa = hh.split("/");        var aaa = aa.length;        var bbb = aa[aaa - 1].split('.');        var ccc = bbb[0];        var cccc = bbb[1];        var r = /^\+?[1-9][0-9]*$/;        if (r.test(ccc) && cccc.indexOf('jhtml') != -1) {            var srcs = Cryoptojs.enc.Utf8.parse(ccc);            var k = Cryoptojs.enc.Utf8.parse(s);            var en = Cryoptojs.AES.encrypt(srcs, k, {                mode: Cryoptojs.mode.ECB,                padding: Cryoptojs.pad.Pkcs7            });            var ddd = en.toString();            ddd = ddd.replace(/\//g, "^");            ddd = ddd.substring(0, ddd.length - 2);            var bbbb = ddd + '.' + bbb[1];            aa[aaa - 1] = bbbb;            var uuu = '';            for (i = 0; i < aaa; i++) {                uuu += aa[i] + '/'            }            uuu = uuu.substring(0, uuu.length - 1);            // window.open(uuu)            return uuu        }     }    let datas = decrypt(data['href']);    console.log(        '返回的参数为:%s',datas    );    res.json(datas)});const server = app.listen(8000, function () {    let port = server.address().port;    console.log(        "node服务启动,监听地址为: http://%s:%s", '127.0.0.1', port    )});

在这里插入图片描述
看到如下信息,证明你成功开发了,接口。然后只需要再python中去访问它,并且把你从主页面中拿到的详情页的url链接传入进去即可:

import requestsfrom urllib import parseurl = 'http://www.bjmtg.gov.cn:80/ggzy/jyxxzccg/2445.jhtml'real_url = requests.post('http://localhost:8000/post', data={'href': url}).json()print(real_url)quotedURL = parse.quote(real_url)# 防止有 ^  导致其访问不正常 

结束:

到此为止,所有分析完毕。
整个加密并不困难,有一定js逆向基础的朋友都能很快的解决,并且解决的肯定比我好。
如果大家感兴趣,可以自行试试。

声明:本站所有资源均由网友分享,如有侵权内容,请在文章下方留言,本站会立即处理。

原文链接:,转发请注明来源!

发表评论