JS逆向之JJ混淆初体验

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

今天在网络者反反爬虫了练习平台的第二题第一次遇到了JJEncode加密,在此记录一下破解过程。


提示:以下是本篇文章正文内容,下面案例可供参考

一、JJ混淆是什么?

jj混淆,特点是特别多的$混淆

二、分析步骤

1.找到加密函数位置

通过分析可知get_sign就是加密函数位置,进入函数发现混淆代码

2.分析混淆代码还原

JJ混淆的一般套路就是Function自执行函数,我们只需去掉混淆代码最后的()在控制台输出即可跳入虚拟机显示明文代码。


 通过分析解混淆后的代码可知主要的加密函数为hex_sha1,传入的参数是一串时间戳。复制函数到本地运行成功解密。

3.完整代码

# coding:utf-8
import execjs
import requests
from lxpy import copy_headers_dict
headers=copy_headers_dict('''
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Content-Length: 59
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: session=1067f511-2425-4466-b913-b408aa33a932.83jie0DdZhE380VBa7o4mRDRSCw
Host: spider.wangluozhe.com
Origin: http://spider.wangluozhe.com
Pragma: no-cache
Proxy-Connection: keep-alive
Referer: http://spider.wangluozhe.com/challenge/1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
X-Requested-With: XMLHttpRequest
''')

def get_signature():
    with open('jj混淆.js','r',encoding='utf-8')as f:
        js=f.read()
    _signature=execjs.compile(js).call('cason')
    return _signature

def main():
    num=0
    for i in range(1,101):
        _signature=get_signature()
        url='http://spider.wangluozhe.com/challenge/api/2'
        data={
            'page': i,
            'count': 10,
            '_signature': _signature
        }
        r=requests.post(url,data=data,headers=headers)
        for j in eval(r.text).get('data'):
            num += j.get('value')

    print('答案:',num)

if __name__ == '__main__':
    main()

总结

以上就是今天要讲的内容,本文仅仅简单介绍了JJ混淆的简单例子,想要熟练掌握还要多加练习。

最后,如果这篇文章对您有帮助,请给博主点点关注哦~

猜你喜欢

转载自blog.csdn.net/weixin_61736939/article/details/127623233
JJ