python 逆向

1、目标网址:https://www.qimingpian.com/finosda/project/pinvestment

2、抓包查看响应体:

python 逆向_第1张图片

 

3、数据加密

python 逆向_第2张图片

4、打上断电进行调试

python 逆向_第3张图片 

5、抠出代码进行运行

python 逆向_第4张图片 

 6、总结

function o(t)就是我们需要的解密函数,可以看到它先调用s函数,传入了四个参数,除了a.a.decode(t)外其他三个都是写死的,最后用JSON.parse转为json对象。

然而,找到解密函数后,我们要做的不是去分析它函数内部做了什么,虽然可以研究它的解密算法然后用Python重写,但这样太复杂且没必要。因为我们可以用PyExecJS这个库,直接用Python调用并执行js代码。

这时候,WebStorm就派上用场了。新建一个js文件,把function o里涉及的代码全部抠下来。然后执行console.log把执行结果打印出来。篇幅问题就只贴部分代码:

//解密函数
function my_decrypt(t) {
    return JSON.parse(s("5e5062e82f15fe4ca9d24bc5", my_decode(t), 0, 0, "012345677890123", 1))
}

//解密函数依赖项
function my_decode(t) {
    c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    f = /[\t\n\f\r ]/g
    var e = (t = String(t).replace(f, "")).length;
    e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
    (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
    for (var n, r, i = 0, o = "", a = -1; ++a < e; )
        r = c.indexOf(t.charAt(a)),
            n = i % 4 ? 64 * n + r : r,
        i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
    return o
}

//测试代码,加密参数太长就不贴上来了
encrypt_data = "xxx"
decrypt_data = my_decrypt(encrypt_data)
console.log(decrypt_data)
确实是我们需要的数据没错,最后用Python去调用解密函数就行了。调用时还有个需要注意的地方,因为直接返回object给Python会报错,所以这里将JSON.parse移除了,返回parse前的json字符串,

//解密函数
function my_decrypt(t) {
    return s("5e5062e82f15fe4ca9d24bc5", my_decode(t), 0, 0, "012345677890123", 1)
}
然后在Python中用base64库的b64decode方法来解码即可。

本文所有代码已上传至Github,旨在学习和技术分享,请勿用于商业用途。

总结

你可能感兴趣的:(python,javascript,前端,开发语言,python)