a_bogus-1.1.17版本插桩分析及还原
抖音 a_bogus 分析
分析
url 加密
插装点 var R = T.apply(E, j);
日志断点 "apply::: ","R:",R,"E:",E,"T:",T,"j:",j
接下来分别给 运算符插装 如 + - / >> << & * | ^
日志断点例如 "v:",v,"p:",p,"v[p]:",v[p],"r:",r,"v[p] = v[p] / r :::",v[p] / r
然后我们发包 再打上 xhr 断点 接着利用正则搜索我们的参数 [^']device_platform=
查看日志发现 在拼接参数然后再末尾拼接 dhzx 进行 sm3 加密 然后在基础上再进行一次 sm3 加密。比如 `sm3.sum(sm3.sum(url_search_params + suffix))
至于怎么知道是 sm3 的。我们可以手动点击日志中的 reset 函数 开发者工具会自动跳动函数 发现内部是个 sum 函数 我们可以全部扣出来 你也可以拿着部分代码放入百度 也能搜索到关于 sm3 加密的相关的细节
同样的dhzx
也是做了如上的两次 sm3 加密。
ua 加密
魔改的 rc4 算法 key 是String.fromCharCode.apply(null, [0.00390625, 1, 0)
在日志中是 '\x00\x01\x00'
加密文本则为 ua 请求头。
正常的 rc4 算法为
第一出魔改点是倒取的 256 空数组 在日志呈现为
第二处是 rc4 的密钥生成部分魔改
应该是在把源码上的j + s[i]
变为了 j * s[i]
加密部分还是 RC4 的原生 xor,实际上各种加密算法的魔改基本都是在密钥轮进行的,很少有魔改加密轮的。
还原后的代码应该是
搜索部分发现和网页上是一样的人,如果不放心 后续 ua 还会进行 base64,sm3 加密可以进行结果对比。
继续观察日志
发现了一个=号。一般=号的出现在 base64 中比较常见 所以我们可以猜测他是对我们上一步的 rc4 做了 base64 加密
直接加密的结果是不对的 但我第二框圈出来了 很像一个 base64 的码表变化 我们在替换这个码表进行加密发现结果就对的上了。
继续查看日志 我们看到了上文 sm3 的加密函数和结果 这次加密的内容是 base64 加密的结果 同样运行一下发现结果一样。
版本号处理
直接 split 后数字化
短数组生成
可以先用工具固定时间戳 方便对比最终的结果。
然后根据 e 的索引进行 分析
其中 e+1 是因为他代码中是递减的处理到这个代码时候索引应该+1 才是对应的。
对着日志继续分析,逻辑很清晰。
随机数生成算法
代码抄至 github 的开源项目
两个位置用到,分别是:
和
短数组转长数组
这个是最重要的一部分 也是 ab 生成的关键数组了
先是 xor 生成校验位,然后拼接生成短数组 n[88]。
接着各种运算符操作把 99 位数组变成了 134 位数组。
这里我给七神要了一份还原好后的代码。太多了 自己看的会很头疼
生成 ab
版本号数组拼接上面的 134 数组后 RC4,然后 8 位数组 String.fromCharCode 生成的字符串再拼接,最后同样的魔改 B64,得到的结果就是最终 ab。
最终结果
游客身份的二级评论 。
评论下的继续展开
尾章
绝大部分文笔都是抄了这篇文章 字节系 a_bogus 最新版本插桩分析及还原因为这篇比较新,而且写的文采也比我好就直接拿来复制粘贴了。
文章参考了:
字节系 a_bogus 最新版本插桩分析及还原 ,
某音 a_bogus 纯算分析 https://www.52pojie.cn/thread-1928860-1-1.html ,
a_bogus 逆向纯算
视频参考了:
最新抖音 JS 逆向 a_bogus【纯算版】 讲得不错就是没后续了。
以及老大哥七神的帮助。