zhouvip666 发表于 2020-7-20 01:16

【JS逆向】逆向某学英语网站老外开发的刷经验插件

本帖最后由 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文件,如下图所示:

返回一个600多KB的JS文件


JS文件内容截图,可以看到是被混淆过

# 0x3 修改插件的请求地址
从步骤2可以知道,该插件是获取网站的用户ID向服务器发送请求。所以能在插件内找到请求的代码,将请求的链接改为我们已经下载好的js文件。当然需要自己在本机上假设一个HTTP服务,并放上下载好的JS文件,这样才能获取到服务器返回的JS文件。


请求服务器JS流程图


但是你以为这样就成功了吗?当然不是。JS文件会读取token,从token解析出用户ID,然后根据用户ID判断当前是否有续费。由于token会一直被英语网站刷新并写入,所以我们不能修改token,否则会造成网站账号退出登陆。

完整的JS付费提醒

# 0x4 破解付费弹窗提醒

那怎么办?
当然是继续逆向JS文件。
由于JS文件都已经被混淆,所以不能通过搜索字符串来定位到这个弹窗。

仔细观察发现,这个是一个alert提醒。既然是alert,那么久好办了。

通过Chrome的debug命令,在console里下断点:`debug(alert)`,刷新网页,页面会自动断点到该弹窗处,如下图:


复制里面的代码,通过编辑器打开该JS文件,搜索,找到IF判断,将IF的判断条件改为:`if(true)`,这样不管什么时候都会判断成功,也就跳出弹窗。


至此完活,收工。

# 0x5 总结

1. 获取到原始的JS文件
方法是借用别人的用户ID
2. 加载原始的JS文件
自己搭建HTTP服务器,修改CRX插件的请求链接到自己的HTTP服务器的JS文件
3. 定位关键代码
通过debug命令断点alert,定位到关键代码
4. 移除判断条件
将if判断的条件改为true,即跳过了判断



本次逆向有很多地方没有介绍。
例如如何给crx插件进行抓包。
如何分析插件的JS代码。

但是本文只是自己摸索逆向的过程中一个记录,并不是多高深的技术,更多的是思路和工具的灵活配合,还希望大家互相交流学习。



爱飞的猫 发表于 2020-7-20 04:48

好歹把 JS 解密一下呀…

另外可以在左侧右键条件断点,条件可以填 `_0x17db90 = _0x352464 = true, false`,就可以自动在那一行修改这两个值然后继续了

fushanpupil 发表于 2020-7-20 19:16

zhouvip666 发表于 2020-7-20 19:11
是如何知道它是用sojson混淆的呢?

看混淆风格。。。主要是以前sojson为了版权第一行会写sojson还不让删,你发的把sojson隐去了,同时感觉改过混淆方式,可能版本不一样

zhouvip666 发表于 2020-7-24 22:03

jixun66 发表于 2020-7-22 00:28
右键行号,条件断点

false 是为了不断下来,就等于直接执行了代码而不断点。

问题一开始都不知道是判断哪个变量,怎么能按条件断点呢?

mymy69 发表于 2020-7-24 12:49

感谢分享

vip11699 发表于 2020-7-23 18:54

我对JS一窍不通 不知道 应该从哪里开始

领域 发表于 2020-7-22 13:25

zhouvip666 发表于 2020-7-20 16:43
有什么技巧?

通用加密,好解!!!!!!:lol

hbdljt 发表于 2020-7-22 08:46

感谢分享,学习一下。

白云15053 发表于 2020-7-22 08:40

爱飞的猫 发表于 2020-7-22 00:28

zhouvip666 发表于 2020-7-20 15:57
一开始也不知道是判断'_0x17db90 和 _0x352464' 的值。所以怎么添加这个条件断点呢?另外你这个条件断点 ...

右键行号,条件断点

false 是为了不断下来,就等于直接执行了代码而不断点。

bigkingman 发表于 2020-7-21 23:18

感谢分享!

zhouvip666 发表于 2020-7-21 21:49

xmhwws 发表于 2020-7-21 08:32
你的开发者工具是中文版?官方不是英文版吗?有汉化?

chromium内核的edge

zhouvip666 发表于 2020-7-21 21:48

wg521125 发表于 2020-7-21 06:58
没服务器可以用fidder拦截自动返回修改后的js

这个也试过,但是还是服务器方便些。http服务器软件apache安装简单,拖入js文件即可。我服务器软件基本不管。
页: [1] 2 3 4 5
查看完整版本: 【JS逆向】逆向某学英语网站老外开发的刷经验插件