一、逆向目标

  • 目标:海南航空hnsign逆向
  • 链接:https://m.hnair.com/#/login?_k=oepcby
  • 简介:签名算法:通常签名有一个对象组合的操作,字符串拼接的操作,然后再对这个对象属性或字符串进行一个排序,组合的代码,看不懂,最方便的方式调试,拿到它组合后的结果。

image.png

二、逆向参数

跟进这个加密函数中,可以发现依旧是webpack:

image.png

a.default._makeSign(null, c, p, null, n)

找到定义对象 “a” 的地方,向上翻,找到如下代码:

a = E(n(38195))

image.png

1、扣取启动器

正常方法,在函数 n 处,下断点,定位到启动器位置:

image.png

改写后,启动器如下:(和前面password的一样)

var _b

!function(n) {
var c = {};
function b(e) {
var s = c[e];
if (void 0 !== s)
return s.exports;
var i = c[e] = {
id: e,
loaded: !1,
exports: {}
};
return n[e].call(i.exports, i, i.exports, b),
i.loaded = !0,
i.exports
}
_b = b
}({
//模块

})

2、扣取加密模块

这块第一个扣取的模块为 “38195

然后依次根据提示,缺少什么模块就扣取什么

如果扣取过程中有出现报报错,那就解决报错。

加载模块比较多,扣取代码都要好久~~~

image.png

3、自定义加密函数

var Spring = _b(38195)

var c = '{}',
p = '{"sname":"Win32","sver":"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36","schannel":"HTML5","caller":"HTML5","slang":"zh-CN","did":"97f572851c0ce1eb","stime":1696338450273,"szone":-480,"aname":"com.hnair.spa.web.standard","aver":"9.0.0","akey":"9E4BBDDEC6C8416EA380E418161A7CD3","abuild":"45469","atarget":"standard","slat":"slat","slng":"slng","gtcid":"defualt_web_gtcid","riskToken":"651abaafiQI4S3rKQfX7DXPlLlrGKPBuW2iBlSJ1","captchaToken":"","number":"15888888888","pin":"JwWZ9E/1ZByN8jrtlHnMhJpNaELFx0rZ3iQgeqCMIaYS2sfOgDvofgDSvowAO5yUM9i8shhYV/KlViMgwrtMdAfSZgpTvUzETQrrPgf2nCdA+7sh+sWGSEQKTlCwzom67NNkEqqzO1QPUbJJa5XlNjKTa8obqdvZ9dbs/kF/tWE=","toSave":true}',
n = null


function makeSign(c,p,n){
c = JSON.parse(c)
p = JSON.parse(p)
return Spring._makeSign(null, c, p, null, n)
}

4、测试

image.png

三、完整代码

略略略
~~~