开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 461|回复: 18
收起左侧

[技术专题] 急眼4 JS逆向图文教程 附带demo

[复制链接]
结帖率:100% (2/2)
发表于 7 天前 | 显示全部楼层 |阅读模式   广西壮族自治区贵港市
本帖最后由 ykq123654789 于 2024-9-13 01:04 编辑

1

1

1. 查看/load接口,发现了有个参数名为 "challenge"

2

2

3

3

4

4

2.根据栈跟踪 逐个尝试,看看有没有符合的地方(打算没有符合的地方,再搜索参数名的,既然发现了出处,那就足够了)
3. 发现是xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx 随机的 -4固定,/load接口的参数 算是解决了.(captcha_id risk_type lang这种参数 我就不叙述了 是验证码ID/验证码类型/语言标识,既然多次刷新不变,直接写死)

5

5

4.接着看/verify 这个接口 看见了 lot_number , payload , process_token , payload_protocol , pt , w . 这6个参数

6

6

5.其中 lot_number , payload , process_token , payload_protocol , pt .这5个参数 均由load接口返回. 核心那就是w

7

7

6.开始也是栈跟踪 慢慢查看,发现是混淆的,看不出有用价值,尝试直接搜索 POST表单参数试下,为了缩小搜索范围,根据栈跟踪显示,最大可能性是gcaptcha4.js这里,在这个js里面进行搜索

8

8

7.搜索 "payload_protocol",发现了2处地方,直接断下这2个,进行刷新,让他重新GET /verify接口

9

9

8.刷新后,断下来了,发现"i"的值格式很像/verify接口的"w"值,加上"'w': i",可以确定了 w=i,这里就是w的出处了.另外的断点可以删掉了.

10

10

9. 控制台取值
(0, m[$_BIBCQ(20)]) = function i(e, t) ,是一个函数
f[$_BIBDJ(20)][$_BIBCQ(544)](e) = '{"device_id":"","lot_number":"168dceae67e9481bb2561ea03ed6344e","pow_msg":"1|0|md5|2024-09-12T20:19:22.142688+08:00|24f56dc13c40dc4a02fd0318567caef5|168dceae67e9481bb2561ea03ed6344e||1181b3087d56bf15","pow_sign":"5e08e04743e9092b0de1572ffe2b7f44","geetest":"captcha","lang":"zh","ep":"123","biht":"1426265548","jvGu":"dDE5","em":{"ph":0,"cp":0,"ek":"f1","wd":1,"nt":0,"si":0,"sc":0}}'
n = 一个对象

那么  function i(e, t) 大概率就是执行加密的地方了. 老样子重新刷新 在var = i 处下断 跟入进去看看.

11

11

10. 进入到 function i(e, t) , 输出 "e ,t" 发现对上了,接着往下有点乱 ,但是看得出来是 循环 加上 条件语句,全部条件成立后第一句断点,看看是什么流程.

12

12

11. 发现了执行流程(如上图), 看见"_" 很可疑,也是十六进制文本.这个时候就细细的来了.

13

13

12. 控制台取值
(0, d[$_DAFCn(111)]) ()  = 生成一串十六进制文本 并且每次都不一样
$_DAFCn(917)  = "encrypt"
l[($_DAFDv(20))]  = function T()

14

14

13.控制台取值
e = '{"device_id":"","lot_number":"688cd123c1bc492ca67317fa43846f3f","pow_msg":"1|0|md5|2024-09-12T20:25:39.132851+08:00|24f56dc13c40dc4a02fd0318567caef5|688cd123c1bc492ca67317fa43846f3f||2b5da8f7c25e07bf","pow_sign":"acb6c2612bb42feab8f571090a03b3b3","geetest":"captcha","lang":"zh","ep":"123","biht":"1426265548","jvGu":"dDE5","em":{"ph":0,"cp":0,"ek":"f1","wd":1,"nt":0,"si":0,"sc":0}}'
n = "73ae4d5e019e5db1"
$_DAFDv(917)  = "encrypt"
r[a][$_DAFCn(905)]  = 一个对象

最终返回了 (0, d[$_DAFDv(158)]) (u) + _  
也就是"w"的值
捋一捋代码:
1. 生成一个随机十六进制 "n"
2.执行函数 传入"n"  得到"_"   >>    _ = r[a][$_DAFCn(956)][ "encrypt" ](n);
3.执行函数 传入"e,n"  得到"u"   >>    var u = r[a][$_DAFCn(905)][$_DAFDv(917)](e, n)
>>>>>
n=随机生成的
e是一个字符串

15

15

16

16

14.控制台取值
游客,如果您要查看本帖隐藏内容请回复
$_DAFCn(422) = "options"
t = 对象
s = 对象
$_DAFDv(687)  ='pt'
a='1'

捋一捋 就得到了:
s = t.options
a= s.pt  >> t.options.pt

>>>>>
那么
function i(e, t)
需要的就是 e  t.options.pt

17

17

15. 添加记录 输出到控制台
function i(e, t) 下来第一行 添加记录  >>  '加密内容',e,t.options.ptreturn (0, d[$_DAFDv(158)]) (u) + _;   的位置添加记录  >>  '加密结果', (0, d[$_DAFDv(158)]) (u) + _
刷新网页看看 控制台的输出

18

18

16.发现了 加密结果的值 (0, d[$_DAFDv(158)]) (u) + _w值一致,接下来分析e的值 pow_***,栈跟踪既然没有明显的地方,那么还是尝试用搜索

19

19

17.发现有3个,直接断下这3个,其他断点先停止,进行刷新,让他重新GET /verify接口

20

20

18.发现断下了
                        'pow_msg': c + h,
                        'pow_sign': p

控制台取值然后 JS继续执行

21

21

22

22

19.这也断下来了,看e的格式 参数 'device_id' , 'lot_number' , 'pow_msg' , 'pow_sign'  都有了,那就控制台输出,记录一下
发现了
s[$_BIBDJ(422)][$_BIBDJ(570)]  = c + h  一致   >> s.options.powMsg
s[$_BIBDJ(422)][$_BIBCQ(526)]  = p  一致  >> s.options.powsign

继续运行,这次主要是校验 加密内容是不是和他一致

23

23

20.发现了 加密内容中的e ,对上了, t.options.pt 一直是='1' 那可能pt 也是固定的

24

24

21. 直接在函数头部断点,刷新网页,让他重新GET /verify接口,看看传入了什么参数

25

25

22.控制台取值 发现 function n(e, t, s, n, i, r, o) 传入了
e = "60103157f15f4ec2816c0ef4245fc720"
t = "24f56dc13c40dc4a02fd0318567caef5"
s = "md5"
n = "1"
i = 0
r = "2024-09-12T21:23:13.243665+08:00"
o = ""

直接步出,返回上一条,看看这些参数的来源

26

26

23.控制台取值
r = 对象 包含了完整的 { pow_msg: "1|0|md5|2024-09-12T21:23:13.243665+08:00|24f56dc13c40dc4a02fd0318567caef5|60103157f15f4ec2816c0ef4245fc720||394ec7915e21d596", pow_sign: "eea4762bbc40c18798c0d7bb7a204558" }
(0, d[$_BGCIy(20)])  = function n(e, t, s, n, i, r, o)  
n = "60103157f15f4ec2816c0ef4245fc720"
i = "24f56dc13c40dc4a02fd0318567caef5"
s[$_BGCHW(540)] = "md5"
s[$_BGCIy(529)]  = "1"
s[$_BGCIy(588)]  = 0
s[$_BGCHW(586)] = "2024-09-12T21:23:13.243665+08:00"
$_BGCHW(53)  = ""

捋一捋代码:
function n(e, t, s, n, i, r, o)
e = n  >>   "60103157f15f4ec2816c0ef4245fc720"
t = i  >>  "24f56dc13c40dc4a02fd0318567caef5"
s = s[$_BGCHW(540)]  >>  "md5"
n =  s[$_BGCHW(529)]  >>  "1"
i =  s[$_BGCHW(588)]  >>  0
r = s[$_BGCHW(586)]  >>  "2024-09-12T21:23:13.243665+08:00"
o =  $_BGCHW(53)  >> ""

参数的来源 主要就是s了 ,输出s 看见了s的对象不多 刚好都对应上

27

27

28

28

24.往上看,找到了 n,i,s 的来源对应:
                  s = t[$_BGCIy(502)],
                  n = t[$_BGCHW(469)],
                  i = t[$_BGCHW(507)]

控制台输出取值
t = 对象
s = t.powDetail
n = t.lotNumber
i = t.captchaId


查看对象"t" 发现是一个大类 包含东西太多,但是参考下发现不少来源于/load的接口的返回
i = 验证码ID是可以确定了 这个参数就解决了
其他的我们去/load接口返回去看看 能不能对上

29

29

25.根据/load的返回(下面称返回值为类: load)
load.data.lot_number == n == 参数e
pow_detail.hashfunc == s[$_BGCHW(540)]  == 参数s
pow_detail.version == s[$_BGCHW(529)]  == 参数n
pow_detail.bits == s[$_BGCHW(588)]  == 参数i
pow_detail.datetime == s[$_BGCHW(586)]   == 参数r


30

30

31

31

26.function n(e, t, s, n, i, r, o)的参数 除了o都有了o = $_BGCHW(53) 这个参数我就不逆推了,时间不允许
接着,先添加记录 输出验证
'function n(e, t, s, n, i, r, o)参数', n , i , s[$_BGCHW(540)], s[$_BGCIy(529)], s[$_BGCIy(588)],  s[$_BGCHW(586)],  $_BGCHW(53)
对比/load接口的返回 ,发现参数都对上了,那么 pow_msg的参数都解决了,接着我们看加密内容emsg_sign
已知 'pow_sign': p ,来源于p,把函数p = 的全部下断,js继续运行

32

32

27. 控制台取值
m[($_CAGIT(20))] = 对象
$_CAGHx(781) = "MD5"
$_CAGIT(698) = "hex"
l = "1|0|md5|2024-09-12T21:52:53.844870+08:00|24f56dc13c40dc4a02fd0318567caef5|9ed3c6eba81e4ce9abf90d349acbfd7c||761ef6d134ecd2e9"  

l = c + h
'pow_msg': c + h

那么大概率 l = pow_msg

33

33

34

34

28. 输出p值
去掉3个p = 的断点 添加记录
'pow_msg',c+h
'pow_sign',p,l

恢复运行
发现加密内容参数'e' 里面的 pow_msg pow_sign 都对上了 t.options.pt 还是='1'

29.
function n(e, t, s, n, i, r, o) 传入
/load的返回(下面称返回值为类: load)
load.data.lot_number  == 参数e
验证码ID == 参数t
pow_detail.hashfunc == 参数s
pow_detail.version  == 参数n
pow_detail.bits == 参数i
pow_detail.datetime == 参数r
o = ""

返回 pow对象
传入 function i(e, t) {
参数e ==
{"device_id":"","lot_number": lot_number":"9ed3c6eba81e4ce9abf90d349acbfd7c""pow_msg":"1|0|md5|2024-09-12T21:52:53.844870+08:00|24f56dc13c40dc4a02fd0318567caef5|9ed3c6eba81e4ce9abf90d349acbfd7c||761ef6d134ecd2e9","pow_sign":"ecbf121f99ceaf7fd230351ad6d57e7f","geetest":"captcha","lang":"zh","ep":"123","biht":"1426265548","jvGu":"dDE5","em":{"ph":0,"cp":0,"ek":"f1","wd":1,"nt":0,"si":0,"sc":0}}
>>>>>
{"device_id":"","lot_number": lot_number":"' + load.data.lot_number + '""pow_msg":"' + pow.pow_msg + '","pow_sign":"' + pow.pow_sign + '","geetest":"captcha","lang":"zh","ep":"123","biht":"1426265548","jvGu":"dDE5","em":{"ph":0,"cp":0,"ek":"f1","wd":1,"nt":0,"si":0,"sc":0}}


参数t == {"options":{"pt":1}}

30.  保存gcaptcha4.js到本地
在t[$_CAGIT(20)] = n; 下面添加一行 window.getPow=n;
在t[$_DAFCn(20)] = i;  下面添加一行 window.getW=i;


             下面的是html和e源码演示截图

37

37

38

38



                          教程结束了,由于上帝视角
                           不排除有忽略的地方
              RSCProject支持库自行搜索下载
急眼4.rar (393.94 KB, 下载次数: 27, 售价: 3 枚 精币)

结帖率:50% (1/2)

签到天数: 4 天

发表于 4 天前 | 显示全部楼层   江苏省连云港市
66666666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 17 天

发表于 6 天前 | 显示全部楼层   湖南省邵阳市
"biht":"1426265548",        //未知
"jvGu":"dDE5",        //未知
加油把这个也解决了   这个是官方用来标记异常的  
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 4 天

发表于 7 天前 | 显示全部楼层   福建省漳州市
厉害了我的哥
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 7 天前 | 显示全部楼层   山东省聊城市
11111111111111111111
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)

签到天数: 15 天

发表于 7 天前 | 显示全部楼层   山东省聊城市
太厉害啦!!好详细的教程!
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 8 天

发表于 7 天前 | 显示全部楼层   辽宁省沈阳市
回复 支持 反对

使用道具 举报

结帖率:79% (15/19)

签到天数: 7 天

发表于 7 天前 | 显示全部楼层   江苏省苏州市
厉害啊学习了
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 7 天前 | 显示全部楼层   美国
666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 19 天

发表于 7 天前 | 显示全部楼层   广西壮族自治区贵港市
感谢楼主的分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表