本节内容是对MD5加密的逆向案例,主要内容是对POST表单数据的加密分析。
目标网站链接:在线翻译_有道
在输入框输入「你好」会自动翻译成我们的目标内容「hello」,通过开发者工具查看该网站链接发送的请求头内容,发现POST表单数据如图1所示:
参数i是我们手动输入的内容;salt,sign,lts,bv是我们需要获取的。
直接全局搜索关键词sign,可以发现只有一个, 点击进入查看,再次搜索关键词sign,发现第六个可能就是我们需要的。进行断点,结果如图2所示:
可以看出来n.md5就是我们要解密的方法了,点击进入该方法查看详细内容,结果如图3所示:
解密算法分析完成,接下来就可以编写Python代码了。
import execjs
with open('test.js','r') as f:
ctx = execjs.compile(f.read())
result = ctx.call('get','你好')
print(result)
将我们找到的js代码保存在'test.js'文件中,替换变量t的值,可以把n.md5更改为md5。
function get(e) { var t = 'db3e6fc05e1796cb0030cda74ecb0567' , r = "" + (new Date).getTime() , i = r + parseInt(10 * Math.random(), 10); return { ts: r, bv: t, salt: i, sign: md5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5") } };
在程序运行过程中,发现代码会报错显示参数未定义,例如:execjs._exceptions.ProgramError: ReferenceError: md5 is not defined,所以接下来核心方法就是「缺啥补啥」。其中md5方法我们已获取,直接补充到js文件中,然后根据代码报错的提示不断填补参数代码,直到程序正常运行。
p = function(e) { var t, n = "", r &