一、进入企名片创业项目

我们需要爬取如下数据

Java逆向工程的优势 js逆向工程_数据


首先,对该网页进行抓包,发现这些数据是通过post请求获得的。

Java逆向工程的优势 js逆向工程_json_02


这是网站给我们返回的数据,为什么和网页上显示的不一样呢?分析后得出,这是经过js加密后的数据,为了防止爬虫,网页对数据进行了加密,因此我们需要破解这个js加密获取真实的数据。

二、获取加密的js文件

我们在开发者工具内搜索encrypt_data这个参数,很容易就找到了我们需要的js文件。

Java逆向工程的优势 js逆向工程_数据_03


下面就是进入该js文件进行断点调试。

Java逆向工程的优势 js逆向工程_python_04


找到了可疑的代码行,我们在这边下断点进行调试。下面进入函数内部。

Java逆向工程的优势 js逆向工程_python_05


有没有发现这个t值有点眼熟?

没错,这就是网站给我们返回的数据,因此我们只要只要这个s函数,就能获取到真实的数据了,因此需要进入s函数内部。

Java逆向工程的优势 js逆向工程_Java逆向工程的优势_06


这六个参数,正好是上面已经存在的六个参数,接下来只要拼凑js,就能获取到我们需要的内容了。

Java逆向工程的优势 js逆向工程_python_07

三、编写代码

def get_encrypt_data():
    url = 'https://vipapi.qimingpian.com/DataList/productListVip'
    form_data = {
        'page': '1',
        'num': '20'
    }
    response = requests.post(url,headers=headers,data=form_data)
    res = response.json()['encrypt_data']
    return res

get_encrypt_data这个函数用来获取网站给我们返回的加密数据,下面通过execjs执行我们抠出来的js文件,获取到解密后的数据。

with open('企名片.js', encoding='utf-8-sig') as f:
    js_code = f.read()

ctx = execjs.compile(js_code)
sp = json.loads(ctx.call("get_data",get_encrypt_data()))
print(sp)

效果图如下:

Java逆向工程的优势 js逆向工程_Java逆向工程的优势_08


大功告成!

Java逆向工程的优势 js逆向工程_python_09

四、结语

本文是一个比较容易的js解密教程,需要拼写的js代码并不多,并且加密的js文件也很容易找到,有疑问的可以在评论区留下你们的观点,博主必定有问必答。

Java逆向工程的优势 js逆向工程_python_10