- Ligue 1: 2025-4-14 AJ Auxerre vs Lyon Full Time Footage - Scout Soccer Scores
- 62
|
发表于 2022-9-20 16:25
Scout Sports Scores
|
显示全部楼层
|阅读模式
朋友给了台刷坏U-Boot的R33,拿编程器重写后了解有个网站可以计算出cloud_token,无奈每次复制太麻烦,于是动了自己写算法的念头。因为R33的lua通过luac混淆了,通过一番折腾,学会了“1、在极路由上编译出了luader”,反编译后得到大致过程:local_token=b64encode(Mac+",ssh,"+(时间值 *1)+","+lua_hmac_sha1_with_uid(前面的字符串)),而cloud_token=b64encode(lua_hmac_sha1_with_uid(Mac+",ssh,"+(时间值 +1))。看到这里结合第三方网站需要的参数,很容易就猜出lua_hmac_sha1_with_uid函数应该就是 拿"mac..."当消息,uuid当key,于是拿Java写了段验证的代码(噩梦也是从这里开始),遗憾的是计算出来的结果并不是理想的结果。通过抽丝剥茧之后发现核心的hmac_sha1_with_uid函数是在libauth.so里,拿IDA打开后发现在hmac_sha1前面似乎调用了一次sha1,于是了如图1时的代码。无奈当时没留意计算值(其实也记不住),只是看“计算失败”,以为算法上还是有问题,加上之前费了近一星期的时间倒腾,本着不服气的精神,决定来点高难度的,就是跟踪进hmac_sha1_with_uid函数,看看消息和key的值到底是什么。于是第一版采用lua_debug调用lua_hmac_sha1_with_uid的方法(学会了2、lua本地和远程调试),很快就GG了。于是决定再升级难度,自己写个程序动态调用hmac_sha1_with_uid,用gdb去跟踪,使用openwrt14.7的交叉编译链也算是没难度就编译出二进制程序,可能因为我把程序下载到win系统,再传到R33的缘故,程序无法执行,于是又学会了“3、使用交叉编译链打包出ipk安装包”。然而本地gdb时又GG了,大概是没有so的源代码,跟不进去hmac_sha1_with_uid函数。由于半个月的高强度倒腾,决定休息几天,同时也找到了“4、远程gdb+IDA的调试”方案。因为不会IDA又花了好几天的时间得出的结果hmac_sha1_with_uid其实就是和我最初的猜测一致,"mac..."当消息,sha1(uuid)当key。因为花了半个多月的倒腾,也记住了计算值,看到自己的计算值时就泪奔了,TMD花了一个多星期的捣鼓,就是为了去验证最初的猜测。。。最后把Java改成了图2,终于看到了“计算成功”4个字。。。 |
|