逆向参数分析:
思路:
 如果参数出现的次数比较少,完全可以使用全局搜索
 如果参数出现比较多,建议使用跟栈
网站: 下面运行结果
import base64
# 解密 
result = base64.b64decode('aHR0cHM6Ly93ZWIuZXd0MzYwLmNvbS9yZWdpc3Rlci8jL2xvZ2lu'.encode('utf-8'))
print(result)

但是password 出现的太多了,我们又不能逐个打断点进行分析,这次采用跟栈

讲一下跟栈,我们的数据是经过很多次js调用得到的,栈是先进后出,所有最上面的是最后调用的 ,跟栈就是倒推,找到js加密的函数位置

后面表示是js文件的哪一行

注意在233行需要再打一个端点让程序走到这里。(如果不打断点是没有数据信息的 ,打程序终止再这个地方)


后面的数字就是我们应该打断点的位置。
注意断点尽量打在我们想得到数据所在的行,使其还没有执行
进入passwordEncrypt函数内部:

哎熟悉啊,之前有些过模板套进去即可 ,但是后面获得的数据需要进行相应的转化

先 .ciphertext 然后在转化为 字符串 然后再大写
代码:
下面 给出代码:
var CryptoJS = require('crypto-js')
function AesEncrypt(text) {
    var key = CryptoJS.enc.Utf8.parse("20171109124536982017110912453698"),
        iv = CryptoJS.enc.Utf8.parse('2017110912453698'),
        srcs = CryptoJS.enc.Utf8.parse(text),
        // CBC 加密方式,Pkcs7 填充方式
        encrypted = CryptoJS.AES.encrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    return encrypted.ciphertext.toString().toUpperCase();
}
function AesDecrypt(Key,Iv,text) {
    var key = CryptoJS.enc.Utf8.parse(Key),
        iv = CryptoJS.enc.Utf8.parse(Iv),
        srcs = text,
        // CBC 加密方式,Pkcs7 填充方式
        decrypted = CryptoJS.AES.decrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    return decrypted.toString(CryptoJS.enc.Utf8);
}
console.log("加密", AesEncrypt("123444"))
对比一下:

over!!!
总结:
这个案例讲解了如何跟栈,总的来说 我们从结果出发,一步步向前寻找,找到加密或者解密的位置然后再相应的函数打上断点,(这个端点会先被卡住,因为是栈),大家一步步多尝试一下,逆向的学习在于模仿和总结。



















