2020-01-16

国家企业信用信息公示网站分析

分析了一阵子工商,终于弄出来了,分享一下收获,过程大致如图所示

2020-01-16_第1张图片
总流程

一、加速乐

        请求网站http://www.gsxt.gov.cn/index.html,可以获取两个cookie,一个是加速乐生成的cookie(__jsl_clearance),一个是请求网站response头部返回的cookie(JSESSIONID),当下一次请求网站时携带这两个cookie获取请求网站数据所需剩下cookie(SECTOKEN,tlb_cookie,JSESSIONID)。

    加速乐cookie涉及到一个简单的js,流程如图1-1,只有X,Y两个值变换,因此可将剩余代码固定(改写为python或则js代码),使用时直接将两个值传入即可,改写时要注意,while语句中的try-catch语句,既然这么写,说明在运行js代码时会出错,要对网站返回的js做一次调试,看是什么原因导致这种错误(网上一些方法是直接将eval该为return,这种成功率只有一半),经调试每次代码运行出错时运行的代码都是以非var开头,如果日后加速乐js更改,可以根据类似特征判断,得到第二个js代码,如图1-2,你会看到熟悉的名字__jsl_clearance,所以只需要获取document.cookie这段代码即可,如果你以为运行js就ok了,那就错了,目前为止,发现第二次js具有两个特征,一个具有调用window对象特征,另外一个带有document.createElement特征(图1-3是第二个特征),用来创建标签,所以要区分两个特征来改写方法。在获取到cookie后再次请求同一个网址获取剩余cookie。

2020-01-16_第2张图片
1-1 加速乐js 流程


2020-01-16_第3张图片
1-2 网站返回js


2020-01-16_第4张图片
1-3 第二次js

二、请求gt,chanllenge参数

        通过以上携带cookie请求http://www.gsxt.gov.cn/SearchItemCaptcha?t=v网址获取gt,challenge参数,其中v是一个变量,是当前时间的时间戳(如图)。


2-1

三、获取token

        token参数的获取分两步,首先请求http://www.gsxt.gov.cn/corp-query-custom-geetest-image.gif网站同时携带参数v,这个v参数为当前时间的分+秒之和(如图3-1),得到一个列表数字数组,每个数字为ASCII码,可通过解码得到一段js代码,token在这段代码里,以这个token为请求参数,请求http://www.gsxt.gov.cn/corp-query-geetest-validate-input.html?token=token(上一次得到的token),请求之后得到同样的ASCII码的列表数组(如图),到这一步还没完事,你会发现最后请求的token是5开头,最后的请求token是第二次token与536870911异或的结果(代码隐藏在图3-4中,尤其注意eval语句),


3-1


3-2


2020-01-16_第5张图片
3-3


2020-01-16_第6张图片
3-4

四、获取geetest版本信息

            通过以上获取请求,已经获取了cookie,gt、challenge、token。利用gt,callback两个参数请求http://api.geetest.com/gettype.php获取一些版本信息(留作稍后使用)。

五、获取c,s参数

            利用gt、challenge、lang、pt、w、callback这几个参数请求网http://api.geetest.com/get.php获取c,s两个值,这两个值用与自动确认的w参数加密,geetest加密方式到目前还一直是rsa+aes+bs64(geetest改写),顶多来个MD5。自动确认所涉及js在fullpage.js文件(滑块js在slide.js)。

    分析分析w参数,看到w参数,首先该想到的是rsa+aes+bs64加密如图5-1,e变量是一串简单的以“!!”分割value组合一起的字符串,value为如图5-2中的对象的值,通过图5-3中键的找出图5-2中对应的值,以“!!“分割得到e,图5-1中n为rsa加密结果,其模数、指数为固定值,对secret_key(16个字符)进行加密,如图5-4。i的参数有两个如图5-5,一个是标题四中的版本信息和gt,chalenge组合成对象字符串,一个是secret_key,加密结果为数组(图5-6),在有bs64对结果处理结果(可调用https://github.com/pikaqiu-ru/captcha/blob/master/js/base64_info.js链接中的return fina(t)函数传入数组),w参数结果为o+n。

2020-01-16_第7张图片
5-1


2020-01-16_第8张图片
52


2020-01-16_第9张图片
5-3


5-4


5-5


2020-01-16_第10张图片
5-6


未完待续


2020-01-16_第11张图片

你可能感兴趣的:(2020-01-16)