本帖最后由 baopushouzhuo 于 2024-11-23 21:07 编辑
逆向目标 抓包分析 直接在搜索框中搜索某个歌手,会发送一个请求,其中查询参数sign 就是我们要逆向的参数。 逆向分析 首先要找到参数生成的位置,我一般的做法是,能搜索就搜索,能hook就hook,实在不行再跟栈。 那就直接全局搜索sign ,在某个文件中有三个可疑的地方,把断点都打上,重新发请求(一定要确保请求发出去,不然你会以为不是在这几个断点中生成的),成功断住。 我们要知道的就是i 的生成逻辑,调用o 函数,传入了请求体。 直接开搞,跟进去,一进去就是一个大的for循环,经常搞VMP的朋友知道,这大概率就是一个VMP了。 搞VMP的一般做法: - 将代码拿下来,补足里面缺失的环境,生成关键参数
- 直接插桩,通过插桩日志分析参数生成的过程
- 反汇编(很显然,我还没到那个层次)
因为我不会补环境,所以直接插桩分析,我的经验是,假如密文不变的话,那明文能固定就固定(如果存在随机情况如Math.random,时间戳等,可以都hook住),这样分析同一套日志会比较清晰。 既然如此,那我们可以尝试把脚本拿出来单独执行,回到上一层堆栈,发现o 的值是n(350).default) ,经常玩webpack的朋友都知道,n 就是加载器,至于webpack怎么逆向,可以自行学习,或者以后有机会再写相关文章。 我们先把请求参数复制下来,便于验证拿下来的代码是不是正确的,记住,密文是这样的。 遇见webpack,关键是要把加载器找到,补齐缺失的模块,然后导出里面相关的函数,这个案例中,可以在控制台输出n ,直接进去函数就是加载器了。 本文的重点是VMP,webpack相关的知识就不过多阐述了。 直接在浏览器自定义一个脚本,将相关代码放在里面,导出加密函数,传入之前的明文,生成密文,经过比对,密文是一样的,说明代码没有问题。 那就可以开始插桩了,小板凳准备好,出发! 这种情况下,我会先把明文固定为'1'(个人习惯,毕竟日志多了,不利于分析,有不合理的地方请大佬指出),明文是这样的,zzc84225b7be2qvanbirdlydjus20y7b1urg553b7d79 。 然后我们就可以下日志断点了,因为脚本是自定义的,直接console.log就好,插桩的话,先从函数调用开始。 麻烦点就是v 的变化,这个自己编写一下测试代码就知道怎么回事了。 将所有函数调用逻辑都写好之后,直接输出一次日志,从生成结果开始往上分析。 在分析过程会发现有一个熟悉的密文,这不就是标准的sha1算法吗,这就是我为啥传明文'1'的原因,记住一些标准hash算法的密文就可以不用花时间比对了。 最终结果其实是由四个部分拼接而成的。 zzc : 固定前缀
84225b7 : 一个固定索引数组,在sha1密文字符串中取对应的索引进行拼接
be2qvanbirdlydjus20y7b1urg : 通过sha1密文字符串进行一些列运算生成,分析的关键部分
553b7d79 : 一个固定索引数组,在sha1密文字符串中取对应的索引进行拼接
关键是第三部分,具体的分析过程就不贴了,读者可以自行解决(我的想法是,自己不搞一遍,技术就不会有提升,过程中需要耐心耐心再耐心)。 提示:在一些位运算中进行插桩,注意某些值可能是固定的,注意大小写。
生成逻辑确定之后,可以直接通过python模拟参数的生成。 模拟请求结果:
注:若转载请注明大神论坛来源(本贴地址)与作者信息。
|