- 博客(78)
- 问答 (4)
- 收藏
- 关注
原创 苏宁滑块VMP深入剖析(三):纯算篇
本文分析了目标网站的加解密流程,重点研究了VMP字节码结构和动态解密机制。文章指出参数加密涉及多个动态函数(如decrypt7、decrypt11)和字符串处理操作,但执行顺序随JS变化。验证请求参数由dfp_token(经非标准RC4加密)、环境信息和编码鼠标轨迹组成。虽然动态VMP增加了纯算法还原难度,但缺乏环境检测反而简化了逆向过程。全文仅供学习交流,禁止商用或非法用途。
2025-12-23 18:42:43
274
原创 使用AST还原字面量混淆的【公式化解法】
本文详细介绍了动态字面量混淆的公式化解法。通过分析国外视频网站vidfast.pro的请求链,发现其参数由混淆JS生成,采用AES-CBC-256加密且密钥每日变更。解决方案分为四步:1)使用AST识别提取解密函数、数组和重排序函数;2)解析多层函数调用链,处理参数变换;3)批量执行解密任务提升效率;4)将解密结果替换回AST节点。该方法具有通用性,只需调整特征识别部分即可应对不同混淆器,显著提升了反混淆效率。文章强调仅供学习交流,严禁商业和非法用途。
2025-12-23 18:37:16
418
原创 苏宁滑块VMP深入剖析(二):补环境篇
本文深入分析了苏宁滑块验证码的VMP保护机制,重点介绍了补环境的核心方法。作者通过插桩技术对属性访问和函数调用进行日志记录,逐步补齐缺失的DOM环境。文章详细展示了如何处理init.json响应、还原打乱顺序的底图、识别缺口坐标,以及模拟鼠标事件触发流程。特别指出该VMP将核心逻辑封装在匿名函数中执行的特点,并提到后续将分析anonymous函数中的算法流程。整个过程借助AI工具辅助完成,通过插桩日志已基本暴露整个验证流程。
2025-12-18 15:09:01
1018
原创 苏宁滑块VMP深入剖析(一):解混淆篇
摘要:本文深入分析了苏宁滑块验证的VMP反爬机制,指出其反爬思路优于腾讯点选、百度旋转等方案。文章重点解析了关键JS文件(mgr.js)的混淆技术,包括函数柯里化、链式赋值和逗号表达式,并详细介绍了使用AST还原链式赋值的具体方法。作者强调还原代码需保持语义等价性,同时指出柯里化函数不需处理的原因。最后预告下篇将探讨通过补环境模拟滑块滑动过程的分析方法。全文仅供学习交流,禁止商业用途。
2025-12-16 15:26:28
1083
原创 360滑块验证码逆向分析
本文分析了360验证码demo页面的滑块验证流程,主要包括以下步骤: 初始化请求/auth获取验证码和RSA公钥 解密并拼接打乱的底图 识别图片中的数字及坐标 生成模拟轨迹数据 使用RSA加密构建提交参数 发送/check请求验证结果 文章指出该demo流程较为简单,仅需解密混淆JS代码后即可分析出加密逻辑。其中关键点是使用获取的公钥加密轨迹数据,最后提醒仅供学习交流使用,并附上解混淆代码获取方式。
2025-09-28 14:10:04
1095
原创 Vaptcha手势验证码逆向分析
【摘要】本文分析了Vaptcha验证码的破解过程,主要涉及三个关键请求:/config获取JS文件、/get获取验证码底图、/validate提交验证结果。重点解密了/get请求中的en参数,该参数由canvas指纹、浏览器指纹等11个字段拼接后通过MurmurHash3算法和自定义混淆函数生成。验证码底图通过解密img_order参数后重新拼接,数字识别后还需生成模拟人类行为的点击轨迹。整个破解过程需处理字符串混淆、工作量证明等反爬机制,但通过AST还原JS混淆后,关键参数均可定位实现。(149字)
2025-09-22 16:09:32
1870
原创 某度数字点选验证码逆向分析
本文分析了百度验证码系统的逆向处理流程,主要包括验证码初始化请求、图片数据解密、图片重构、数字识别、轨迹生成和数据加密等步骤。通过插桩分析BiocCaptcha.js中的VMP指令,解密获取验证码图片的正确拼接顺序和请求地址,使用AES-CBC算法解密数据。在重构验证码图片后,通过打码平台识别数字并生成模拟人类行为的点击轨迹。最后对提交参数进行Base64编码和AES加密处理。该VMP样本结构简单,未采用高强度混淆或检测机制,适合初学者研究学习。
2025-09-15 18:23:41
1594
1
原创 电子某务局盾山加密逆向分析
本文分析了某税务网站发票查询接口的加密参数生成逻辑。通过Hook eval绕过无限debugger后,发现其采用虚拟机实现完整ECMAScript特性,核心加密在_fe函数中通过指令集操作完成。提供了两种解决方案:1)补环境法,需注意cookie处理差异和node特征校验;2)算法还原法,通过插桩分析_cf函数。加密流程为:获取时间戳和浏览器指纹,与path拼接后经多次哈希(SHA1/SM3/MD5)处理生成参数lzkqow23819和6eMrZlPH。文中提供了逆向分析公众号联系方式。
2025-07-04 12:16:07
1371
2
原创 易盾无感验证分析
本文分析了163登录验证流程中的关键加密参数,包括fingerprint、cb和irToken中的d、n参数。通过逆向发现:1)指纹fp由环境信息与canvas生成,处理后存入cookie;2)d参数通过环境数据拼接后经CRC校验和S盒转换等处理;3)cb采用36位UUID加密,使用包含动态密钥的自定义算法;4)鼠标轨迹经过双重加密处理。研究指出浏览器环境信息可固化复用,轨迹验证可通过贝塞尔曲线优化通过。所有分析仅用于技术研究,严禁非法用途。
2025-07-04 12:09:40
921
转载 【无标题】
本文总结有19种不同的魔法方法,但其实Python种定义的魔法方法有上百种,大多数魔法方法都是你不知道的地方发挥着作用。我们并不需要也不必须要去全部重写或者部分重写,这更像是Python给我们设定的语法糖一样,如果你的功能有魔法方法可以帮助你实现,那么可以使用这些魔法方法。在笔者看来了解这些魔法方法可以帮助编程者更加深入的了解Python在你不知道的地方到底执行了什么,有助于我们对python这一门动态语言的理解。
2024-03-09 03:13:26
254
转载 【无标题】
双亲委派的具体逻辑就实现在这里面,按照loadClass()的逻辑,如果父类加载失败,会自动调用自己的findClass()来完成加载,这样既不影响用户按照自己的意愿去加载类,又可以保证新写出来的类加载器符合双亲委派规则。算法分为“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。到了JDK 8 Update 40的时候,G1提供并发的类卸载的支持,补全了其计划功能的最后一块拼图。
2024-01-22 17:26:53
366
2
原创 Java8 lambda 表达式 forEach 如何提前终止?
break;});在上面的示例中,我们首先定义了一个自定义的函数式接口BreakableConsumer,它继承了Consumer接口,并新增了一个isBreak方法,用于判断是否需要提前终止迭代。接着,我们定义了一个forEachWithBreak方法,该方法接受一个BreakableConsumer类型的参数,并在迭代过程中判断是否需要提前终止迭代。最后,在main方法中,我们使用forEachWithBreak方法并传递一个Lambda表达式作为参数来进行迭代操作。
2023-07-06 10:16:03
688
1
原创 抖音服务器带宽有多大,才能供上亿人同时刷?
通过分布式计算和分布式存储技术,抖音可以将数据分散存储在不同的服务器节点中,提高数据处理和传输效率,从而更好地支持用户的视频播放和上传等操作。我们可以从抖音官方公开的信息中得知,截至2021年6月,抖音已经拥有了超过10亿的用户量。一般来说,抖音的服务器带宽在高峰期会达到数百Gbps的速度,以应对来自全球不同地区的数以亿计的视频请求。此外,抖音还使用了多层负载均衡技术,通过将请求分发到多个服务器节点中,从而实现更好的性能和可靠性。因此,对于抖音这样的短视频应用,服务器带宽是至关重要的。
2023-07-06 10:14:28
1614
原创 年终奖大幅缩水,是去还是留?
互联网行业是中国经济发展的一个重要支柱,这也使得互联网公司的年终奖一直是许多从业者最为关注的话题之一。随着行业的不断发展,互联网公司的年终奖也在不断提高,逐渐成为了企业吸引和留住人才的重要手段。在互联网公司中,年终奖的数额一般是员工年终总收入的一大部分,通常在10%至20%之间。互联网公司的年终奖除了直接提高员工的收入外,还有一定的象征意义。年终奖可以反映公司的经济状况和员工的业绩表现,也是公司对员工付出的一种肯定和回报。
2023-07-06 10:10:51
298
原创 15年前的手机并没有jvm虚拟机,为何可以运行Java游戏
但是,随着技术的进步,人们开始在手机上玩游戏,而其中最受欢迎的游戏就是Java游戏。尽管移动设备的技术已经发生了巨大的变化,但Java技术仍然在移动设备上发挥着重要的作用,这些设备离不开Java虚拟机的支持。而jvm虚拟机是Java语言的核心组成部分,它可以运行Java字节码,并且为Java程序提供了跨平台的支持。是Java平台的一种轻量级版本,专门用于嵌入式设备,例如手机和其他便携设备。与标准版Java相比,Java ME提供了更小、更灵活、更易于移植的虚拟机和类库,这使得它成为移动设备上的理想选择。
2023-07-06 10:06:28
2108
原创 Java17的性能优势是否足以让它取代Java8?
随着时间的推移,Java不断地进行更新和发展,以满足不断变化的业务需求。目前,Java8已经成为了一个非常成熟的版本,并且在各个领域广泛应用。但是,Java17也早已发布,,Java社区中出现了一个问题:Java17是否会取代Java8?
2023-07-05 10:36:15
1112
原创 LLVM&Swift之父推出全新AI开发语言Mojo,快35000倍于Python!
Mojo是一款全新的AI开发编程语言,由LLVM与Swift之父Chris Lattner领导的团队开发。这款语言的特点是具有高效的代码生成和执行速度。据称,Mojo比Python快35000倍,这使得它成为当前最快的AI开发语言之一。Mojo的设计目标是提供高效、易用、安全的AI开发环境。它支持Python API,可以轻松地与现有的Python代码进行集成。此外,Mojo还支持多线程和分布式计算,使得在大规模数据处理时可以更好地发挥其优势。
2023-07-05 10:35:57
373
原创 面试官:一千万的数据,要怎么查?
一个老生常谈的问题,SELECT *和SELECT具体字段那个快?在数据量少的时候可能没什么差别,但是数据量达到千万级,差距就显现出来。废话不多说,往下看 ↓。
2023-07-05 10:35:07
302
原创 面试官:说说 WebSocket 和 Socket 及 Http 的区别?
Socket是一种用于进程间通信和网络通信的编程接口,它提供了一种底层的API,使得开发人员可以根据自己的需要设计和实现各种网络协议。而Http是一种用于在Web浏览器和Web服务器之间传输数据的协议,它使用TCP作为传输协议,每个请求和响应之间是相互独立的。在实时通信场景下,WebSocket和Socket是更好的选择,而在普通的Web应用中,Http是更为常用的协议。Http协议的缺点是它无法实现实时通信,每次请求和响应之间需要重新建立连接,所以在实时通信场景下会产生较大的延迟。
2023-07-05 10:34:41
300
原创 逝去的机遇:三进制计算机为什么没有成为主流?
尽管三进制计算机具有一些优点,例如可以更有效地利用电子器件和降低计算机系统的能耗,但是它也存在一些缺点,例如设计和制造更困难、缺乏硬件和软件支持以及在数学运算方面存在某些困难。同时,由于二进制计算机已经成为了主流,三进制计算机的应用空间变得更加有限。
2023-07-05 10:33:39
5876
原创 从古代八卦探究计算机的八进制
在中国古代哲学体系中,八卦是由三个阴阳符号组成的八个图案。这些图案被用来表示天、地、水、火、风、雷、山、泽等自然元素,也被用来描述人类的行为和情感。每个八卦都有一个特定的名称和含义。例如,“乾”代表天,“坤”代表地,“震”代表雷,“巽”代表风等等。《易经》是八卦理论的集大成者,它对于古代中国的哲学、文化、社会乃至科技发展都有着重要的影响。在计算机科学中,八进制是一种数字表示法,它使用 0-7 八个数字来表示数值。例如,八进制数值 10 表示十进制数值 8。
2023-07-04 10:05:25
1053
原创 再见!Fastjson!
在工具选择上从来都没有最合适,只有更合适,这是一个仁者见仁智者见智的问题,至少单从安全性这一角度来说,Fastjson已经输了,写这篇文章的目的只是为了记录Fastjson曾经辉煌的历史和存在问题,并不是为了和大家抬杠。同样的,Fastjson还是Jackson也就没有标准的答案,各位还是结合自己的具体情况。
2023-07-04 09:56:59
504
原创 面试官:断网了,还能 ping 通 127.0.0.1 吗?
由于回显请求是在本地计算机上发送和接收的,所以我们将收到回显响应消息,从而确认本地网络接口的正常运行。这种能够在断网的情况下通过 Ping 命令与本地进行通信的特性,使得本地回环地址成为了诊断网络问题的有用工具。通过向 127.0.0.1 发送 Ping 请求,我们可以确认计算机上的网络接口是否工作正常,以及操作系统的网络协议栈是否正常运行。本地回环地址是一个特殊的地址,指向我们所在计算机上的网络接口卡,通过它可以在本机上进行网络通信。因此,即使外部网络连接中断,我们仍然能够与本地进行通信。
2023-07-03 14:11:22
353
原创 三进制:为何在常见进制中缺失的奇特存在?
尽管三进制在实际应用中相对较少,它仍然具有一些潜在的应用价值。在状态表示、图像处理和密码学等特定领域中,三进制可能会发挥其独特的优势。然而,由于其缺乏实用性、进制转换复杂性和缺乏标准化等因素,目前三进制在常见进制系统中并没有得到广泛应用。随着技术的发展和需求的变化,我们也许会看到三进制在某些特定领域的更多应用和研究。
2023-07-03 14:10:03
1465
原创 深度理解:Redis Hash(散列表)实现原理
Redis Hash是一个键值对集合,是一个string类型的field和value的映射表。它的每个hash可以存储430亿个键值对(40多亿)。
2023-07-03 14:08:36
779
原创 硬件重生:PC与数码市场迎来历史性繁荣,搞机佬的春天回来了
新的技术和产品的发展提供了无数新的可能性,为喜欢研究和优化硬件性能的搞机佬们提供了更多机会。因此,我们可以期待,在未来的一段时间里,搞机佬们将会有更多的展现空间,而数字革命也将在他们的推动下进一步发展。这意味着更多的消费者愿意投资于更高级的设备,这也为那些喜欢研究和优化硬件性能的搞机佬们提供了巨大的机会。这其中,尤其是高端智能手机市场的增长更为明显,同比增长15%,这与新兴科技的发展和消费者的科技需求有关。根据我们的调研数据,这一领域的市场规模和销售量都大幅增长,这预示着搞机佬们的春天已经来临。
2023-07-03 14:07:34
220
原创 Java17的性能优势是否足以让它取代Java8?
随着时间的推移,Java不断地进行更新和发展,以满足不断变化的业务需求。目前,Java8已经成为了一个非常成熟的版本,并且在各个领域广泛应用。但是,Java17也早已发布,,Java社区中出现了一个问题:Java17是否会取代Java8?
2023-05-05 14:35:47
2860
2
原创 为什么北欧的顶级程序员数量远远超于中国?
相比之下,中国的政策和社会保障相对较为薄弱,这可能会影响到中国的程序员。此外,中国的社会保障制度也存在一些不足之处,例如医疗保障和养老保障等问题,这可能会影响程序员的工作积极性和稳定性。北欧地区的政策非常注重人才的吸引和留住。此外,北欧地区的政府也非常注重支持科技行业的发展,投资大量的资金和资源在研发和创新上,这为当地的程序员提供了更多的机会和资源。此外,中国的大学教育侧重于理论知识,缺乏实践经验,这可能会影响程序员的技能水平。相比之下,中国的工作文化可能更注重结果,忽视了员工的工作质量和幸福感。
2023-05-04 18:57:55
5262
5
原创 如何优雅地停掉线程?
很久很久以前,在一个名为“Springboot”的村庄中,住着一群热爱编程的程序员。他们喜欢探索新技术、优化自己的代码,为了打造更好的软件而不断努力着。在这个村庄中,有一个名叫小明的程序员,他是村庄中最优秀的程序员之一。他非常喜欢用Springboot来开发应用程序,并且在使用Springboot的过程中,遇到了一个问题:如何优雅地停掉线程。小明知道,线程是非常重要的,因为它们负责处理应用程序的各种任务。如果线程不能正常停止,就会导致应用程序崩溃,甚至可能损坏数据。因此,停掉线程必须要非常谨慎地进行。
2023-05-04 18:56:28
3306
原创 手动封装一个日期处理工具类,几乎覆盖了所有的时间操作(收藏)
工具类包含以下方法:废话就不说了,直接上代码,建议收藏,实用的话帮忙点个赞!以下是使用该工具类的示例代码:由于当前日期是2023-04-27,因此以下是上面示例代码的输出结果:
2023-05-04 18:55:47
2406
原创 MySQL面试八股文:索引篇
前缀索引是指只对索引列的一部分进行索引,从而减少索引的空间占用。例如,对于VARCHAR类型的列,可以只对其前几个字符进行索引。前缀索引的缺点是精度不够高,可能会导致查询结果不准确。
2023-05-04 18:55:34
1100
原创 火遍童年的FC游戏是使用什么语言编写的
虽然汇编语言相对于高级语言来说更难学习,但是在FC主机的硬件环境下,它是最适合的编程语言。使用汇编语言编写程序,程序员可以更加精细地控制计算机硬件,使得程序可以运行得更快,并且在极限的内存限制下,仍然能够保持高效。FC游戏是通过一个名为“红白机”的主机来运行的,它使用了一种名为6502的CPU芯片。NES汇编语言是专门为FC游戏开发而设计的汇编语言,它提供了一些方便的指令和宏,使得编写程序更加容易。此外,它还提供了一些基本的库,如屏幕输出库、输入库和音频库等,使得程序员可以更加方便地编写程序。
2023-05-04 11:38:03
1675
原创 深入探讨Java、Spring和Dubbo的SPI机制
Java SPI机制、Spring SPI机制、Dubbo SPI机制都是实现框架扩展的机制,但它们的实现方式、配置文件、功能定位和扩展点类型都有所不同。应用程序开发者可以根据不同的需求和框架选择不同的SPI机制来实现扩展。
2023-05-04 11:35:15
1041
原创 手动封装了一个 OkHttp3 工具类,用着贼舒服
在实际的系统开发过程中,我们通常会基于项目环境,封装一个公共的网络请求工具库,以便开发接口请求相关的需求时,能更加方便的使用。以服务端编程为例,以下是小编封装工具类的实践过程。这个工具类包含了GET和POST请求方法,同时支持JSON、表单和多部分请求体,并且支持上传文件。
2023-04-25 14:21:36
1246
原创 MySQL自增ID用完了怎么办?4种解决方案!
MySQL的自增ID是通过自动增量机制生成的。当创建一张新表并定义了一个自增列时,MySQL会在表中创建一个叫做AUTO_INCREMENT的计数器。每当插入一行新数据时,MySQL会自动将这个计数器的值加一,并将这个新的值插入到自增列中。这样,每一行数据都会拥有一个唯一的自增ID。默认情况下,自增ID的起始值是1,并且每次自增1。这个起始值可以通过ALTER TABLE语句来更改。
2023-04-19 15:07:58
5608
2
原创 MySQL中,SQL 查询总是先执行SELECT语句吗?
除此之外,在实际使用 MySQL 进行查询时,我们还可以通过使用 EXPLAIN 命令来查看 MySQL 的查询执行计划。EXPLAIN 命令可以帮助我们了解 MySQL 在执行查询时的具体执行顺序和优化策略,从而帮助我们更好地优化 SQL 查询语句,提高查询效率和性能。总之,MySQL 中的 SELECT 语句并不总是最先被执行,具体的执行顺序取决于查询中的具体情况。在实际使用 MySQL 进行查询时,我们应该根据具体的查询需求,合理地编写 SQL 查询语句,以获得更好的查询效率和更准确的查询结果。
2023-04-19 15:07:10
526
原创 解决Spring事务不生效的10种常见场景
Spring事务不生效可能出现的情况是非常多的,本文仅列举了一些常见的情况。在实际开发中,我们需要根据具体的业务场景和问题来进行排查和调试,找出问题所在并进行相应的解决。同时,我们也需要在事务管理方面进行更深入的学习和研究,掌握更多的知识和技能,以便更好地应对各种情况。
2023-04-19 15:06:27
1851
原创 Java实现数据加密:掌握DES CBC和ECB两种模式
DES算法是一种对称加密算法,它使用相同的密钥进行加密和解密。DES算法是一种分组密码,即将明文分成固定长度的块,并对每个块进行加密。DES算法将每个64位的明文块分成两个32位的半块,然后进行一系列的加密和解密操作,最终得到一个64位的密文块。
2023-04-19 15:05:45
1616
空空如也
关于#python#的问题:模拟登陆后能获取到cookie,就是cookie一天就过期
2021-08-12
Java如何设置随机定时任务时间?
2021-08-12
Shiro SessionDAO是在什么情况下执行?
2019-06-25
博主发文,通知粉丝功能如何实现
2019-04-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅