吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7072|回复: 25
收起左侧

[Web逆向] 某盾cd,fp获取(一)

  [复制链接]
#sky# 发表于 2022-5-10 17:17

某盾cd,fp获取(一)

这里是某盾的第一篇,接下来还会有完整的分享

1.开始对目标进行抓包

目标地址: aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc=

1.https://c.xxx.com/api/v3/get?referer=
# 获取图片和滑块的接口,待分析参数 acToken,cb, fp
2.https://c.xxx.com/api/v3/check?referer=
# 提交参数进行验证 待分析参数 data, actoken 

最开始分析的时候是上一个版本,没想到刚看了一天,这个网站就升级了,内心XXX,上一个版本第一步并没有验证acToken。这里还有一个问题是 如果你之前没有分析过,你抓包感觉是两个http请求就可以了,但其实绝对不是你想的那样。
本篇先对cb fp两个参数进行分析

2.开始调试

全局搜索cb参数,打断点
在这里插入图片描述
cb 就是 _0x244142()这个函数生成的,而且在cb生成之前,fp已经生成了,继续看cb,点到后面的函数里面去看看
在这里插入图片描述
_0x387005 = _0x2877  _0x387005就是最上面的那个大数组进行移动之后的数组,里面包含很多字段信息,这里用来让代码混淆起来,增加分析难度,和某验类似
在这里插入图片描述
第一个函数生成一个字符串,又经过_0x18975f进行二次加密, 就得到了最后的结果,接下来看第一个函数
在这里插入图片描述
这里面是一个uuid函数,可以直接抠出来,缺少什么补什么,接着看第二个函数,
在这里插入图片描述
同样是一个普通的函数,也是一样的操作,缺啥就调试补充进去啥,我这里是用node执行,
在这里插入图片描述
cb参数获取就很简单,接下来是fp,这里有个新的问题,我们调试的js链接最后面有一个v=275609 后面的数字大概刷新页面一两次就会变,导致你之前调试的断点,就会失效,你可以选择用reres保存一份js进行替换,或者记住你上次断点的地方,刷新后立马下断点,立刻再刷新,这样就很麻烦,不过也可以用。还有你刷新了好几次,发现你打的断点没有任何作用,一种可能 你断点,打错了,还有可能是这个是第一次你进入这个网站,他才会生成,就需要clear site data一下。刷新,就会发现它断在断点处。
下面马上来看下fp的生成吧。
在这里插入图片描述
fp = _0x4fa361 , _0x4fa361是被_0x47ecbd[_0x19d935(0x1af)]赋值,_0x47ecbd = _0x1e67e3[_0x19d935(0xa43)]  所以fp 是_0x1e67e3的一部分,
在这里插入图片描述
这里的fingerprint和fp的值是一样的,也就是说fingerprint就是fp,接下来找fingerprint怎么生成的。然后在当前js搜索fingerprint,发现了这个
在这里插入图片描述
fingerprint是在这里生成的,因为他上下参数和上面那个图的字段都对得上,然后看_0x556ecc是怎么生成的,发现是和window有关,在控制台打印一下_0x327e87(0x8e7)
在这里插入图片描述
fp被fingerprint赋值,fingerprint是被window['gdxidpyhxde']赋值,接下来就开始寻找gdxidpyhxde是怎么生成的,全局搜索gdxidpyhxde,发现在只找到了有一个在js开头的大数组中,除了这一个地方,没有其他的地方
在这里插入图片描述
那换种方法搜索一下吧。搜索(0x8e7) 发现也只有一个
在这里插入图片描述
那肯定就是被隐藏起来的了呗,那就换个思路去寻找,这里先说一个笨方法,既然这个参数和window有关。那就可以使用正则 window[.*?= 去搜索一下,在所有出现被赋值,就是说在 = 左面出现的位置,进行打断点。
在这里插入图片描述
有25个可以一个地方一个地方查看一下,这样可以找到,这个办法有点笨,但是实用,如果window[出现的地方太多,这个办法就不是很方便,可以说会很难受,但这个案例是可以使用的。

下面介绍第二种方法
先将移位后的大数组复制出来。同时验证一下复制出来的数组是否正确
在这里插入图片描述

第0x8e7位和上面图中的值是一样的,接下来根据数组来替换整个js中需要该数组的地方。

import re

# 数组太大,自己去控制台复制吧
_0x4b23 = '''
'''.strip().split("xxx")

print(len(_0x4b23))

def _0x2877(_0x1f7720):
    return _0x4b23[_0x1f7720 - 0x12f]

print(_0x2877(0x8e7))

with open("core_all.js", 'r', encoding='utf-8') as f:
    js_str = f.read()

# 将所有 =_0x2877的变量替换成_0x2877
func_list = re.findall("var (.*?) = _0x2877", js_str)
print(len(func_list))
print(func_list)

last_js_str = js_str
for func in func_list:
    last_js_str = last_js_str.replace(func, "_0x2877")

_0x2877_func_list = re.findall("(_0x2877\(0x.*?\))", last_js_str)

print(len(_0x2877_func_list))
print(_0x2877_func_list)

result_js = last_js_str
for each in _0x2877_func_list:
    result_js = result_js.replace(each, '"' + eval(each) + '"')

with open("new_core.js", 'w', encoding='utf-8') as f:
    f.write(result_js)

替换前
在这里插入图片描述

替换后的结果
在这里插入图片描述

接下来在我们生成的js中进行搜索,x,还是只有两处,继续看看还有没有其他的大数组
在这里插入图片描述

在这里插入图片描述
在这里又发现了几个数组,猜测可能和这里有关吧,提取一下这几个数组看看,和上面做类似的处理看看。

在这里插入图片描述
nice,找到了一个新的地方,看看_0x4b1f33在哪里调用了
在这里插入图片描述
原来在这里,将字符串所有字母转成小写,再看一下_0x62bf4c在哪里调用了
在这里插入图片描述
在这里,被赋值为Null,就在这打个断点,调试一下吧,当我在重新刷新的时候,发现js文件变了,我这里没有进行替换,你们可以使用reres替换一下啊,在上次找到的位置打个断点。
_0x321880
继续向下调试
在这里插入图片描述
最终在这里发现我们要的fp在这里生成。接下来就是扣代码的时间,补充一下window环境。

在这里插入图片描述

成功生成。

3.总结:

cb参数获取简单,fp参数混淆的复杂一些,我因为不会ast,所以会走一些弯路,感兴趣的同学可以学一下,我后面正则替换的地方用ast会更容易一些。

今天的分享就到这里,仅供学习,若有侵权,请联系我删除,希望大家可以点个赞支持一下。

免费评分

参与人数 12威望 +2 吾爱币 +112 热心值 +10 收起 理由
bjznhxy + 1 + 1 我很赞同!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
gaosld + 1 + 1 谢谢@Thanks!
唐小样儿 + 1 + 1 我很赞同!
耳食之辈 + 1 谢谢@Thanks!
ycxlsxb + 1 + 1 谢谢@Thanks!
timeni + 1 + 1 用心讨论,共获提升!
yixi + 1 + 1 谢谢@Thanks!
Establish + 1 + 1 我很赞同!
weilan + 1 + 1 我很赞同!
haonanyxp + 1 已经处理,感谢您对吾爱破解论坛的支持!
涛之雨 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

悦来客栈的老板 发表于 2022-5-11 21:05
ast又不难,学起来就是了

免费评分

参与人数 1吾爱币 +4 热心值 +1 收起 理由
涛之雨 + 4 + 1 蔡老板好

查看全部评分

涛之雨 发表于 2022-5-12 08:41
本帖最后由 涛之雨 于 2022-5-12 08:47 编辑

蔡老板说的不错。
而且就算很难不学是永远不会的,
无非就是照着接口写代码,多参考参考就行。
初次尝试,有始有终,
两篇合并处理,给以优秀鼓励,再接再厉。

此外就是说一下,正则表达式,我之前也用过正则表达式还原,我甚至都基本上实现了完全逻辑恢复,但是这个弊端太大了,然后重新开坑。
首先就是他的混淆必须特别有特征,比如这个_0x,如果换一个ABC或者il1基本上就很难办了。
其次就是他的作用域不好判断,还是这种比较方便,因为相同的变量一般只有一个。
如果是ABC或者是0oO之类的,基本上正则是只能放弃了(也可能是我没想到更好的办法)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
#sky# + 1 + 1 谢谢@Thanks!

查看全部评分

taxuewuhen 发表于 2022-5-11 11:33
9992979 发表于 2022-5-11 20:20
谢谢楼主分享
 楼主| #sky# 发表于 2022-5-12 09:38
悦来客栈的老板 发表于 2022-5-11 21:05
ast又不难,学起来就是了

蔡老板好,马上学
as4202 发表于 2022-5-12 11:56
学习了谢谢。
twapj 发表于 2022-5-12 15:51
谢谢  学习了
mbc 发表于 2022-5-13 13:10
了解了,借鉴了一下
zyh101736 发表于 2022-5-13 15:22
大家都学起来,不过我觉得还是有一定难度的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 19:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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