自执行函数,也是没有名字的函数。js中一般函数定义可为 function pwd( ){renturn 1+1};
或者是pwd = function(){return 1+1};现在大部分网址都是webpak打包方式,用一个大的自执行函数来运行整个js内容。 自执行函数 一般是这几种,内容为空是返回false或者true,与js的原型链相关。
这一次要被毒害的网站base64:aHR0cHM6Ly9iZWlqaW5nLnR1aXR1aTk5LmNvbS9kZW5nbHUuaHRtbA==
打开抓包工具进入网站,然后随便输入账号密码(推荐错的,防止跳转),然后在ALL里面成功抓到用到的账号跟加密后的密码。
然后进入到search里面搜索password,经过逐一排查比对,发现加密过程是在login.js?v4这个模块里面产生的。
把鼠标放在encrypt.encrypt或者右上角小箭头进入到这个方法内部,
然后点击JSEncrypt.prototype.encrypt这个方法,没有跳转到别动包,说明整个加密过程是在这个模块中产生的。然后拉到最上面发现他第一行定义了一个空的对象JSEncryptExports,第二行定义了一个自执行方法。然后拉到最下面第二行发现他把这个自执行函数命名为JSEncryptExports,这是直接调用这个自执行函数的方法。
然后将全文复制到js调试工具里面,然后格式化,再加载代码发现navigator未定义,缺什么就补什么。
补完后再次运行发现window未定义,再次定义window后发现没有什么语法错误,这就包就ok了,接下来就该引用这个包了。
function passdord(pwd){
var encrypted = encrypt.encrypt(password)} 定义一个函数passdord,然后回到断点哪里,将调用的方法填入到函数里面,发现 他他是用encrypt.encrypt调用的,encrypt还没定义。
在这个包里面搜索这个方法,然后发现它定义并且调用了var encrypt = new JSEncrypt(),复制下来加入到函数里面。
28行处encrypt.setPublicKey调用了(login.pubkey),在左下角输入后发现这个一个字符串,定义进去。然后return返回encrypted
function passdord(pwd) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey("-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAbfx4VggVVpcfCjzQ+nEiJ2DLnRg3e2QdDf/m/qMvtqXi4xhwvbpHfaX46CzQznU8l9NJtF28pTSZSKnE/791MJfVnucVcJcxRAEcpPprb8X3hfdxKEEYjOPAuVseewmO5cM+x7zi9FWbZ89uOp5sxjMnlVjDaIczKTRx+7vn2wIDAQAB-----END PUBLIC KEY-----");
var encrypted = encrypt.encrypt(pwd);
return encrypted;