本帖最后由 zhouvip666 于 2020-7-20 19:49 编辑
背景介绍
某英语网站有经验排行榜,每周更新一次。前十位可以进阶。但是有的时候没时间学习,所以经验值不够。在机缘巧合下,发现某该插件可以刷经验,但是该插件是收费,仅试用一天,于是本人开始逆向之旅。
0x1 安装插件
注册该插件需要用到英语网站的用户ID。通过抓包发现,插件运行时会向某URL发送请求,参数正是用户ID,以获取可以执行的JS文件,如果该ID绑定的账号没有充值,在该请求返回一个无效的JS文件,也就无法进行刷经验。如下图提示账号到期:
续费提醒
下面是网站返回的续费提醒JS:
续费提醒代码
可以看到,如果账号没有续费,则返回一个alert 提醒JS代码。如果是续费的账号,会返回一个几KB大小的JS文件,该文件可以刷经验值。
0x2 获取有效的JS文件
既然自己的账号到期无法获取到有效的JS文件,那么有没有其他方法获取到有效的JS文件呢?
答案是可以。原因是该插件是通过一个类似于YY的频道激活账号的,每天都会有一些用户在频道内发送自己的账户ID进行自助激活。我可以利用这些新用户的ID进行获取到有效的JS文件,如下图所示:
返回的有效JS
返回一个600多KB的JS文件
JS文件截图
JS文件内容截图,可以看到是被混淆过
0x3 修改插件的请求地址
从步骤2可以知道,该插件是获取网站的用户ID向服务器发送请求。所以能在插件内找到请求的代码,将请求的链接改为我们已经下载好的js文件。当然需要自己在本机上假设一个HTTP服务,并放上下载好的JS文件,这样才能获取到服务器返回的JS文件。
请求服务器JS流程图
请求服务器JS流程图
但是你以为这样就成功了吗?当然不是。JS文件会读取token,从token解析出用户ID,然后根据用户ID判断当前是否有续费。由于token会一直被英语网站刷新并写入,所以我们不能修改token,否则会造成网站账号退出登陆。
完整文件付费提醒
完整的JS付费提醒
0x4 破解付费弹窗提醒
那怎么办?
当然是继续逆向JS文件。
由于JS文件都已经被混淆,所以不能通过搜索字符串来定位到这个弹窗。
仔细观察发现,这个是一个alert提醒。既然是alert,那么久好办了。
通过Chrome的debug命令,在console里下断点:debug(alert) ,刷新网页,页面会自动断点到该弹窗处,如下图:
alert断点
复制里面的代码,通过编辑器打开该JS文件,搜索,找到IF判断,将IF的判断条件改为:if(true) ,这样不管什么时候都会判断成功,也就跳出弹窗。
iftrue
至此完活,收工。
0x5 总结
- 获取到原始的JS文件
方法是借用别人的用户ID
- 加载原始的JS文件
自己搭建HTTP服务器,修改CRX插件的请求链接到自己的HTTP服务器的JS文件
- 定位关键代码
通过debug命令断点alert,定位到关键代码
- 移除判断条件
将if判断的条件改为true,即跳过了判断
本次逆向有很多地方没有介绍。
例如如何给crx插件进行抓包。
如何分析插件的JS代码。
但是本文只是自己摸索逆向的过程中一个记录,并不是多高深的技术,更多的是思路和工具的灵活配合,还希望大家互相交流学习。
|