简单js加密反爬的处理思路 part2

简单js加密反爬的处理思路 part2

简单的介绍

还是以上篇说的网站(更新了)为例,仅仅说js加密部分
文章编辑时间为2020-04-09

调试

步骤

  1. 打开网站,右键 检查 发现页面有debugger
    第一个dubugger
    先格式化,然后打上条件断点,never pause here 第二个debugger同理
    加上条件断点
    2.点击网页上的排序功能,让浏览器再次发送ajax请求,查看ajax的参数和调用的js
    参数
    调用js
    3.在调用的js里找到getData函数的位置,点击js 格式化,在getData函数打上断点,再次点击网页的排序功能发送ajax请求,进入断点
    进入debug
    4.我们发现发送的data就是postData,它的形式是这样的:

{
“pageId”: “c3d10a81c7ce3b712b12f2dcc48a391e”,
“s8”: “04”,
“sortFields”: “s52:desc”,
“ciphertext”: “1110111 1100100 1001100 1110110 1000110 1000010 1010100 1101100 110111 1010010 1101100 1010111 1000010 1111000 1001100 1010000 1110100 1101101 110001 1010000 1010000 1101110 1000100 1110110 110010 110000 110001 111001 110001 110000 110010 110000 1101010 110000 1000100 1010101 110101 1001100 1011010 1010000 1100001 1011001 1110111 1100100 1000110 110001 1101000 1011010 1000010 1101110 1010011 1001110 1110001 1010001 111101 111101”,
“pageNum”: 1,
“pageSize”: “5”,
“queryCondition”: “[{“key”:“s8”,“value”:“04”}]”,
“cfg”: “com.lawyee.judge.dc.parse.dto.SearchDataDsoDTO@queryDoc”,
“__RequestVerificationToken”: “UcIaiihLvajw54IsN8BxDYwC”
}

5.从堆栈信息找postData各个参数的源头,最终发现它组装各个数据的源头在index.js的第3159行左右
postData的最开始的地方

分析各个参数

1.ciphertext
可以很清楚的看到,ciphertext来自于cipher这个函数
代码如下

function cipher() {
	var date = new Date();
	var timestamp = date.getTime().toString();
	var salt = $.WebSite.random(24);
	var year = date.getFullYear().toString();
	var month = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date
			.getMonth()+1).toString();
	var day = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate())
			.toString();
	var iv = year + month + day;
	var enc = DES3.encrypt(timestamp, salt, iv).toString();
	var str = salt + iv + enc;
	var ciphertext = strTobinary(str);
	return ciphertext;
}

和时间有关的DES3加密,不过我试过用python和java来实现这个函数,失败了,用nodejs来调用他自己的函数就可以。

2.sortFields
这个参数从字面意思来讲,是来判断根据什么排序的,所以我们找到页面排序的按钮(标签)
标签截图

3.pageId
pageId
这个参数是在首页进入下一级页面的时候随机生成的

4.cfg
在页面搜索cfg,发现是几个写死的定值,应该是用来反射对应的类的

5.__RequestVerificationToken

if ($('[name=__RequestVerificationToken]').length > 0) {
	postData["__RequestVerificationToken"] = $('[name=__RequestVerificationToken]').val();
}

是页面元素的值

最后说一下80T

应该是最简单的瑞数了,只判断了80T,我只说一下我的做法,请求连接,返回一个页面,和 _ $ 80S,根据页面的script标签获取一段固定的js,然后通过第二个script标签结合刚刚的固定js生成的_$ts参数,和页面上meta的标签的值,和_$80S,再hook,xmlhttprequest的open和send可以拿到_$80T,不过我的做法肯定是最low的,通过node构造的dom环境,能成功获取结果,具体代码就不展示了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值