[实战]API防护破解之签名验签
内容提要
传统接口容易被抓包篡改,可通过参数签名验证防止中间人攻击。逆向找到sign参数的加密点,确定与发包的sign参数相关。sign参数由appSignKey、keyword、noncestr、serverTimestamp、source、timestamp拼接生成。最后拼接参数传入s函数进行md5加密。
延伸解读
签名机制的安全价值与局限
文章指出,参数签名验证能有效防止抓包篡改和中间人攻击,因为签名不匹配的请求会被拒绝。这提高了攻击成本,但并非绝对安全。白帽子常因逆向难度而放弃此类接口,然而厂商可能因依赖签名而疏忽其他漏洞,如逻辑缺陷。因此,签名机制是防护手段,但不应视为唯一安全屏障。
逆向分析sign参数的关键步骤
逆向sign参数有两种方法:直接搜索sign值或跟踪发包过程。文章采用后者,通过发包跟栈和断点调试,定位到sign生成函数。关键点在于识别sign由appSignKey、keyword、noncestr、serverTimestamp、source、timestamp拼接后经md5加密。其中appSignKey由代码动态生成,需扣取代码获取,其余参数为明文。
appSignKey的生成与提取
appSignKey并非固定值,而是由代码中的三元表达式基于arguments生成。文章通过分析f函数,发现appSignKey由变量n赋值,n又由c和arguments决定。c是一段长字符串,arguments包含请求参数。在浏览器控制台复制arguments并执行代码即可得到appSignKey。这提示逆向时需关注动态密钥的生成逻辑。
Q&A
什么是sign参数,它是如何生成的?
sign参数由appSignKey、keyword、noncestr、serverTimestamp、source和timestamp拼接生成。
如何通过参数签名验证防止中间人攻击?
通过对请求参数进行签名验证,确保参数与签名值匹配,从而防止黑客篡改请求。
逆向分析sign参数的加密点有哪些方法?
可以通过搜索sign值或跟踪发包过程找到加密位置,或者在发包时打断点确认sign参数的生成。
appSignKey的来源是什么?
appSignKey是由代码生成的,其余参数为明文。
在发包过程中如何确认sign参数的生成?
可以通过在发包时打断点,查看sign参数的生成函数及其返回值来确认。
md5加密在sign参数生成中起什么作用?
md5加密用于对拼接后的参数进行加密,确保数据的完整性和安全性。