事先说明:发布文章内容,只为自己自学逆向分析做一个记录,方便以后加以巩固学习逆向分析。
本人为逆向学习小白,所以发布的内容都是简单的逆向分析。大佬请高抬贵手!
1、分析的登陆网站
http://www.188wan.com/
2、使用工具
chrome浏览器
鬼鬼Js调试工具
3、Post登陆分析
测试账号:Steven2020 测试密码:a123456
在点击登陆最后,不光光只出现了一个post的登陆请求包
还有一个 get的 token 包
{"errno":0,"data":{"placeid":"XsIhMTYxMTkyNDgxMA==","once":"Uu6HS_9rbbkR7XwnRdK4a2VkRfH0F0Di","key":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvEpk7iB6BF8ZLXG0vSMr7Qedl\nB9Q4c9qrqiNziUt3RokRkr7pHxWlelQPC3JIMs+UvMkabTkDNE4pvx\/DkFWEMzzu\nHuDeenKNo1Ywymf8A6EtQIEL7MQpUaszPx6\/u5YqLVvjN7fyvF5LSVgtzjYhTTHK\nhTJF2R5dTkO3VswLVwIDAQAB\n-----END PUBLIC KEY-----\n"},"errmsg":""}
里面有几个response的返回参数
其中key 是一个公钥。那么就极有可能是一个RSA的加密算法
post FromData 表单数据
username: Steven2020
password: Mqvu/4rnZ+yvvFdmvYUCe0TiXbC1eXJrAGmbRo2C8X0rOxPwE9TlL6DKYw4r0rqNKfpKdmTB8mkE5y1H+1DPvNiL3Er4Sbh5RR5m4/2j30D++Krp/pOkyfdmllKqtXaW7sfrPH0zxwiQQFfvSs7lBEUBbsTelylXxSE2LPP8vaI=
verifyCode:
remember: 1
一看就知道 只有一个 password加密了
4、password解密
直接从堆栈信息中,可以看到 有login登陆的入口,那么就直接点击进入瞅一眼;
直接就定位到登陆的 get 请求 和 post请求,也非常的清除可以看到 通过get 请求token 获取了 三个个重要的参数 一个是 t.data.placeid 和 t.data.once ; 一个是 t.data.key 就是之前说的公钥。
然后把这个公钥 创建的加密对象中。最后 通过 传入的密码 + t.data.once 的字符串 进行加密,得出最终的password 就是 变量 e ,那么这个就是差不多的静态分析,然后我们断点调试一下
t.data.key 我们猜的没有错,就是get 请求的token中 请求返回的key 就是 公钥
那么最终的password 就是 加密函数 (‘a123456’+"hk3VioOntjssq_OuL3TqK3F8_LScsE-X")
那么这个时候,我们需要找到 创建一个新的 enCrypt加密函数的地方
不在这里,就应该在代码上面,可能是全局定义的。
最终在 Passport 函数中发现了,点击进入 查看一下
然后发现了 jsencrypt 的版本号 2.3.1 那么就自己使用网上的2.3.1版本的开源的加密库就行了,放入鬼鬼调试工具后,
需要重新的把这个RSA的算法进行重写。
function test(password){
var key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvEpk7iB6BF8ZLXG0vSMr7Qedl\nB9Q4c9qrqiNziUt3RokRkr7pHxWlelQPC3JIMs+UvMkabTkDNE4pvx\/DkFWEMzzu\nHuDeenKNo1Ywymf8A6EtQIEL7MQpUaszPx6\/u5YqLVvjN7fyvF5LSVgtzjYhTTHK\nhTJF2R5dTkO3VswLVwIDAQAB\n-----END PUBLIC KEY-----\n";
var once = "Uh5JKhGOVVoRNRsgnEy9Qn-65u8TTmkO";
var encrypt = new JSEncrypt();
encrypt.setPublicKey(key);
return encrypt.encrypt(password+ once)
}
最终生成成功,由于RSA算法中,会有随机数,所以每次生成的都是不一样的。
还需要注意,每次 get token 后,其中的值也是随机的,不一样的。
然后就可以 直接的通过易语言 或者python 等熟悉的语言进行改写,调用就简单了!
文章评论