一个银行较小的系统,数据包传输的值加密处理。故扣加解密代码编写脚本,以便测试方便 。
抓包发现数据加密,意料之中,常规思路寻常分析加密函数。
看代码就能大致推测开发的水平好坏,看着前端代码,越看越乐。。。。
在console执行函数,出正解结果。接下来扣代码,写脚本:
报错,debug追踪一下。
发现引用的第三方包,弄了一个自执行函数,闭包了。。。查资料,发现自执行函数在函数内部定义的变量和函数就只能在函数内部访问,在外部无法访问,在该上下文环境中,调用函数时就提供了一个创建私有成员的方式,所以我执行脚本报错。
接下来做了N次尝试,这个问题困扰好久没解决,(没办法,js太差)
1.尝试解包。我错了,我高估了自己。
2.直接抽取关键代码。
3.看到是base64js,相直接扣出原版的base64试试,发现base64js是经过二次开发的,加密函数调用的他的方法原版没有。
4.在nodejs上执行不成功,用python调用js执行看下。结果一样。
时间成本太高了,,,换方案吧,估计不在我能力范围内。
这就是没办法的办法,直接在snippets工具中执行测试脚本。
var sm4Test = function(text) {
var a = "11HDESaAhiHHugDz";
function encrypt(text) {
console.log("-----------------------------------")
encryptText = new sm4utils(a).encryptData_ECB(text);
console.info("明文是:" + text)
console.info("加密结果是:" + encryptText);
console.log("-----------------------------------")
}
function decrypt(text) {
plainText = new sm4utils(a).decryptData_ECB(text);
console.info("明文是:" + text)
console.log("解密结果是:" + plainText)
console.log("-----------------------------------")
}
return {
encrypt: encrypt,
decrypt: decrypt
}
}
var text = "exAcymtIEQj2Y0ul8aIOag==";
var obj = new sm4Test();
obj.encrypt(text);
obj.decrypt(text);
结果如下:
可看到结果正常返回,虽然没有使用nodejs看起来顺眼,但比在console中进行批量操作要省事的多,为折中办法。
1.基本格式:
(function () { /* code */ } (args));
2.作用:
可发现上图中的l参数就是该数据包请求时的密文 。
1.编辑如下脚本。
(function() {
'use strict';
// Your code here...
var rstringify = JSON.stringify;
JSON.stringify = function(a) {
console.log("Detect Json.stringify", a);
return rstringify(a);
}
})();
2.登录,可在console上直接看到。
3.在该处下断点。
4.在堆栈处逐个往下看,在再第个参数 ‘s’处,发现是加密函数。