Python--简单 Js 破解。

本篇是针对 国家会展中心的访问量,以及百度企业信用网站的简单小破解,博客仅作为学习,不支持商用。谢谢配合。

1. 开胃菜 会展中心访问量

目标网址:http://www.eshow365.com/zhanhui/html/127989_0.html
需要解决问题:
在这里插入图片描述
实际我们在请求的时候,这个访问量并不在源码中,可看源码如下图:
在这里插入图片描述
可以看到其中<span id="txtClicks" style="color:red;"> 这个 id 其实还是挺重要的,可以通过 id="txtClicks" 来查找是否为 id绑定了一些事件,那么在源码中搜索一下吧。
在这里插入图片描述
写到这边 便结束这个吧,实际代码 自行写吧。如果实在还有问题,请留言。

2. 正题 百度企业信用 基本信息的获取。

目标网址:
https://xin.baidu.com/s
需解决问题:获取查询企业的 基本信息股东主要成员 的基本信息。
在这里插入图片描述
破解思路如下:
第一步:首先查看最终信息 提交时候所需要的参数有哪些。
第二步:根据这些参数来查找。判断是否有加密的参数,如果有找加密的Js文件。

整理好了思路,那么便开始第一步 查找最终提交时候需要的参数。
在这里插入图片描述
通过fiddler发现最终需要的参数有:pidtot,还有一个时间参数,那么紧接着便寻找这些参数吧。
1,寻找pid的过程。通过搜索 xlTM-TogKuTw2V8djuHrnHsuj3z2kpHMDgmd 发现此参数如下图:
在这里插入图片描述
这个参数便找到了。
2,寻找tot参数的过程,也是全局搜索xlTM-TogKuTwiToWPyXkJPOYarCqnSMZVAmd 实际中是搜不出来的,便考虑加密的问题吧,那么怎么找加密呢?第一步可以直接搜寻tot这个过程是很困难的,毕竟fiddler全局搜索出来的很多包含tot的参数,但是作者这里没有找到好的方法,也是直接搜索的,慢慢的查看了一些Js文件,结果还真发现,如下图:
在这里插入图片描述
通过fiddler还真的找到了,那么便把这个Js文件给格式化一下吧,格式网址如下:http://tool.chinaz.com/Tools/jsformat.aspx
在这里插入图片描述
继续寻找tk。方法同上寻找到如下图:
在这里插入图片描述
把这个函数给 单独拿出来进行分析:

<script>
function mix(tk, bid) {
    var tkLen = tk.length;
    tk = tk.split('');
    var bdLen = bid.length;
    bid = bid.split('');
    for (var i = 0; i < bdLen; i++) {
      bid[i] = parseInt(bid[i]) + parseInt(tkLen - bdLen);
    }
    var one = tk[bid[bdLen - 1]];
    for (var i = bdLen - 1; i >= 0; i -= 1) {
      tk[bid[i]] = tk[bid[i - 1]];
      if ((i - 2) < 0) {
        tk[bid[i - 1]] = one;
        break;
      }
    }
    return tk.join("");
  } 
 (function() {
    var tk = document.getElementById('tz51BT').getAttribute('avmzF3IB');
    var baiducode = document.getElementById('baiducode').innerText;
    window.tk = mix(tk, baiducode);
  });
</script>

如上图便可很清晰了,但是mix(tk, bid)需要tkbid,而

    var tk = document.getElementById('tz51BT').getAttribute('avmzF3IB'); 参数 tk
    var baiducode = document.getElementById('baiducode').innerText;  # 参数 bid
    window.tk = mix(tk, baiducode);

这就很简单了吧,找到HTMLCSS样式中id=tz51BT不出意外建议在这个url中寻找,如下图。
在这里插入图片描述
注意:每次刷新界面的 id值是不一样的,所以 访问到这个界面首先通过正则来匹配如下的var tkid值:

    var tk = document.getElementById('tz51BT').getAttribute('avmzF3IB'); 参数 tk
    var baiducode = document.getElementById('baiducode').innerText;  # 参数 bid

那么继续寻找 baiducode 还是在这个界面,如下图:
在这里插入图片描述
这显然是百度信用代码。那么最终tk=xlTM-TogKuTwiToWPyXkJPOYAqCnrVMZaSmd,bid=834195801595
那么便来构造函数 去控制台来一次看时候能够 打印出tot的值,如下图:
在这里插入图片描述
注意:每一个公司的 tot加密函数都不一样,这里作者已经试过了,所以这部分JS函数希望你通过正则来匹配出来更好,当然直接写这个函数,作者试了貌似也对,但是为了确定建议匹配出来。
对比最终需要的参数如下图:
在这里插入图片描述
可知tot便找对了。
这个破解流程就是这样,不知道具体代码你们还要不?这里分享一下吧,注意仅供 学习 切勿商用、转载希望标上出处,如有疑问和错误欢迎指出,一起讨论,如果你有更高深的方法和办法,欢迎指导。【不试试,请勿发言】。谢谢!
代码分享如下【有一个小的知识点分享,先做个初代代码1.0】:
代码1.0如下:

"""
这篇代码是有关使用百度企业信用来查看公司的基本信息,主要是有关js的一些破解,
本文章仅供学习,请勿商用对网站造成影响。
"""
"""
这篇代码是有关使用百度企业信用来查看公司的基本信息,主要是有关js的一些破解,
本文章仅供学习,请勿商用对网站造成影响。
"""
import re
import time
import execjs
import requests
from chardet import *
from scrapy import Selector


class BaiDuQiYeXinYong:
    def __init__(self):
        self.key_world = input('请输入想要查询的公司名:')

    def index(self):
        """
        首页信息获取。
        :return: 详情界面的 url
        """
        index_url = 'https://xin.baidu.com/s'
        index_headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Referer': 'https://xin.baidu.com/',
        }
        params = {
            'q': self.key_world,
            't': '0'
        }
        response = requests.get(url=index_url, headers=index_headers, params=params).content
        type_code = detect(response).get('encoding')  # 获取编码格式。
        response = response.decode(type_code)  # 转化为字符串。
        selector_response = Selector(text=response)
        details_href = selector_response.xpath('//a[@class="zx-list-item-url"]/@href').extract_first()
        pid = re.findall(r'pid=(.*)', details_href)[0]  # 获取pid的值。
        details_href = 'https://xin.baidu.com' + details_href
        return pid, details_href

    def details(self, pid, details_href):
        """
        获取查找公司的 基本信息。
        :param pid: 参数 pid 的值 
        :param details_href: 详情界面的 url
        :return: 
        """
        details_headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        }
        details_response = requests.get(url=details_href, headers=details_headers)
        selector_details_response = Selector(text=details_response.text)
        bid = selector_details_response.xpath('//span[@id="baiducode"]//text()').extract_first()
        by_id, attribute = \
            re.findall(r"tk = document.getElementById\('(.*?)'\)\.getAttribute\('(.*?)'\)", details_response.text)[0]
        tk = re.findall(attribute + r'="(.*?)"\>', details_response.text)[0]  # 通过属性来查找tk值
        mix_func = re.findall(r'(function mix.*)\(function', details_response.text)[0]
        mix_func = """
        %s
        """ % mix_func
        js_function = execjs.compile(mix_func)
        tot = js_function.call('mix', tk, bid)  # 得到tot
        search_time = int(time.time() * 1000)
        info_url = "https://xin.baidu.com/detail/basicAjax?"
        params = {
            'pid': pid,
            'tot': tot,
            '_': search_time,
        }
        response = requests.get(info_url, headers=details_headers, params=params)
        return response.content

    def run(self):
        """
        开始运行,返回最终的信息
        :return: 
        """
        pid, details_href = self.index()
        content_info = self.details(pid, details_href)
        print(content_info)


if __name__ == '__main__':
    bai_xin_yong = BaiDuQiYeXinYong()
    bai_xin_yong.run()

结果如下:

在这里插入图片描述
看到上面是什么编码了吗?如果你平时没遇到百度一下就行了,这里直接分享给你吧,因为作者之前做过。这是一种 unicode-escape编码集,他是将unicode内存编码值直接存储:
参考大佬网址如下:http://www.eshow365.com/zhanhui/html/127989_0.html【作者:开飞机的贝塔】
看过之后那么便直接写吧。
代码 2.0如下:

"""
这篇代码是有关使用百度企业信用来查看公司的基本信息,主要是有关js的一些破解,
本文章仅供学习,请勿商用对网站造成影响。
"""
import re
import time
import execjs
import requests
from chardet import *
from scrapy import Selector


class BaiDuQiYeXinYong:
    def __init__(self):
        self.key_world = input('请输入想要查询的公司名:')

    def index(self):
        """
        首页信息获取。
        :return: 详情界面的 url
        """
        index_url = 'https://xin.baidu.com/s'
        index_headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Referer': 'https://xin.baidu.com/',
        }
        params = {
            'q': self.key_world,
            't': '0'
        }
        response = requests.get(url=index_url, headers=index_headers, params=params).content
        type_code = detect(response).get('encoding')  # 获取编码格式。
        response = response.decode(type_code)  # 转化为字符串。
        selector_response = Selector(text=response)
        details_href = selector_response.xpath('//a[@class="zx-list-item-url"]/@href').extract_first()
        pid = re.findall(r'pid=(.*)', details_href)[0]  # 获取pid的值。
        details_href = 'https://xin.baidu.com' + details_href
        return pid, details_href

    def details(self, pid, details_href):
        """
        获取查找公司的 基本信息。
        :param pid: 参数 pid 的值
        :param details_href: 详情界面的 url
        :return:
        """
        details_headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        }
        details_response = requests.get(url=details_href, headers=details_headers)
        selector_details_response = Selector(text=details_response.text)
        bid = selector_details_response.xpath('//span[@id="baiducode"]//text()').extract_first()
        by_id, attribute = \
            re.findall(r"tk = document.getElementById\('(.*?)'\)\.getAttribute\('(.*?)'\)", details_response.text)[0]
        tk = re.findall(attribute + r'="(.*?)"\>', details_response.text)[0]  # 通过属性来查找tk值
        mix_func = re.findall(r'(function mix.*)\(function', details_response.text)[0]
        mix_func = """
        %s
        """ % mix_func
        js_function = execjs.compile(mix_func)
        tot = js_function.call('mix', tk, bid)  # 得到tot
        search_time = int(time.time() * 1000)
        info_url = "https://xin.baidu.com/detail/basicAjax?"
        params = {
            'pid': pid,
            'tot': tot,
            '_': search_time,
        }
        response = requests.get(info_url, headers=details_headers, params=params)
        return response.content

    def run(self):
        """
        开始运行,返回最终的信息
        :return:
        """
        pid, details_href = self.index()
        content_info = self.details(pid, details_href)
        print(content_info.decode('unicode_escape')) # 在这里添加了一行解码方式而已。


if __name__ == '__main__':
    bai_xin_yong = BaiDuQiYeXinYong()
    bai_xin_yong.run()

分享一下结果吧:

在这里插入图片描述
请自行对比 网页中的信息看是否有错误。
在这里插入图片描述
显然是没有错误的,这只是基本信息的获取,当然 变更记录知识产权 等应该也很好获取,这里便不看了。分享便结束了。过年回家了,大家新年快乐哈。

猜你喜欢

转载自blog.csdn.net/weixin_42812527/article/details/86682167
今日推荐