网站调戏
http://uugoc.com/login
账号 739639550
密码 123456 开始调戏
谷歌浏览器 F12 j进入调戏模式
输入账号密码 点击登录
多出一个 叫做
http://uugoc.com/tools/ssc_ajax.ashx?A=Login&S=uugc&U=739639550
看里面的 Form Data
username 739639550 账号没问题 哎 密码怎么变了
ec6d0fc6a7d3e6ee6f5ce25adad36f2c ε=(´ο`*)))唉 莫非这就是传说的 md5 兴致冲冲的 进行了一个 123456 的md5运算
123456 =e10adc3949ba59abbe56e057f20f883e
现实告诉我太年轻- - 简直进入死局 不晓得如何加密如何撬开人家的门牙??? 经过几轮大神的咨询 发现 谷歌是支持调试模式的
进入源码模式
通过之前的分析 搜索 ssc_ajax.ashx 结果漂亮 不亏是我挑选的弱鸡 网站 一条 - - 点进去分析
点击之后 上面的代码乱的 跟鬼一样 点击 {} 能看到他的美 - -
点击边上变色 进入断点模式
点击登录 发现 断点 的确 是在这里
而且密码已经加密完成
往上看 找找在哪开始没有加密
找到开始的位置进行 断点
并没有进行加密 说明 整个加密的方式 就在这个 函数里面
var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}
, a = (new Date).getTime()
, s = "Register" !== t.Action && state.UserName || t.UserName;
if (void 0 !== e.wait)
var c = layer.msgWait(e.wait);
if (t = o(t),
t[1] && console.log(t[1]),
t = t[0],
t.Password || t.SafePassword) {
var u = t.Password && "Password" || t.SafePassword && "SafePassword"
, d = n("IVK");
if (!d)
return (c || "0" == c) && layer.close(c),
RootApp.getServerTime(),
{
then: function(t) {
t({
Code: -1,
StrCode: "请重试"
})
}
};
var h = ["SetPassForget", "VerifySafePwdForget"];
s = h.indexOf(t.Action) > -1 && sessionStorage.getItem("UserName") || s;
var v = (s + "").toLocaleLowerCase();
if (t[u] = G(["SetPwd", "SetSafePass", "Register", "SetPassForget"].indexOf(t.Action) === -1 ? G(v + G(t[u])) + d : v + G(t[u])),
t.Type = "Hash",
32 !== t[u].length)
return (c || "0" == c) && layer.close(c),
{
then: function(t) {
t({
Code: -1,
StrCode: "请重试"
})
}
}
}
var p = l(t.Action);
if (p)
return {
then: function(t) {
t({
Code: -1,
StrCode: "操作失败"
}),
layer.close(c)
}
};
t.SourceName = "PC";
var _ = _ajaxDatajoint(t);
if ("GetInitData" !== t.Action) {
for (var y = 0; y < j.length; y++) {
if (j[y][0] + 300 < a) {
j.length = y;
break
}
if (j[y][1] === _)
return (c || "0" == c) && layer.close(c),
{
then: function() {
console.log("重复发送")
}
}
}
j.unshift([a, _])
}
return new m.default(function(n, l) {
var u = state.turning && setTimeout(function() {
var e = "网络请求超时,请重试";
i({
msg: e
}),
_catch({
msg: "timeout",
A: t.Action,
U: s
}),
l()
}, 1e4)
抠出 当前函数代码 进行分析t
通过分析发现 账号进行了一个 大写转换小写的动作 保存v
然后分析代码真正的 进行计算
if (t[u] = G(["SetPwd", "SetSafePass", "Register", "SetPassForget"].indexOf(t.Action) === -1 ? G(v + G(t[u])) + d : v + G(t[u])),
t.Type = "Hash",
32 !== t[u].length)
t[u] 是Password 进行密码的赋值 如果长度不等于 32 返回错误
G()就是md5的计算
v 账号
第一次md5
第二次md5 很明显是 账号加 123456md5在做一次 md5
v + G(t[u])) 账号 +md5(password) 739639550 +md5函数(123456)
然后在进行 md5
+
上次的md5 +77921299(这是 d的一个值 加盐)
运算结束 太挑出来
那么套路是 账号大写转 小写 进入 md5( md5( 账号+md5密码))+盐) 然后模拟测试 一下 上代码
python3 的代码
ok 密码的加密方式搞出来了 但是 这个盐是 动态的 那么分析方式是一样的 做一个 盐的动态生成 即可完成 自动化加密密码的方式 下次更新 盐的动态加密 未待续。。。