#include "md5p.h"
typedef unsigned long (*_md5_nl)(unsigned long,unsigned long,unsigned long);
static const unsigned long _md5_a = 0x67452301UL;
static const unsigned long _md5_b = 0xefcdab89UL;
static const unsigned long _md5_c = 0x98badcfeUL;
static const unsigned long _md5_d = 0x10325476UL;
static int _md5_n[4][2] = {
{0, 1},
{1, 5},
{5, 3},
{0, 7}
};
static unsigned long _md5_s[4][4] = {
{ 7, 12, 17, 22},
{ 5, 9, 14, 20},
{ 4, 11, 16, 23},
{ 6, 10, 15, 21}
};
static unsigned long _md5_t[4][16] = {
{0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821},
{0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a},
{0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665},
{0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391}
};
static inline unsigned long _md5_rol(unsigned long n, unsigned long c)
{
return (n << c) | (n >> (32 - c));
}
static inline void _md5_xx(unsigned long& a, unsigned long b, unsigned long r, unsigned long M, unsigned long s, unsigned long t)
{
a = b + _md5_rol(a + r + M + t, s);
}
static inline unsigned long _md5_f(unsigned long x, unsigned long y, unsigned long z)
{
return (x & y) | ((~x) & z);
}
static inline unsigned long _md5_g(unsigned long x, unsigned long y, unsigned long z)
{
return (x & z) | (y & (~z));
}
static inline unsigned long _md5_h(unsigned long x, unsigned long y, unsigned long z)
{
return (x ^ y ^ z);
}
static inline unsigned long _md5_i(unsigned long x, unsigned long y, unsigned long z)
{
return y ^ (x | (~z));
}
void MD5p::Initialize(unsigned long chain[4])
{
chain[0] = _md5_a;
chain[1] = _md5_b;
chain[2] = _md5_c;
chain[3] = _md5_d;
return;
}
void MD5p::Update(unsigned long chain[4], unsigned long M[16])
{
_md5_nl FN[4] = {
_md5_f,
_md5_g,
_md5_h,
_md5_i
};
unsigned long state[4];
for (int i = 0; i < 4; i++) {
state[i] = chain[i];
}
for (int i = 0; i < 4; i++) {
int n = _md5_n[i][0];
for (int j = 0; j < 16; j++) {
int k = ((4 - (j & 3)) & 3);
_md5_xx(state[k], state[(k + 1) & 3], FN[i](state[(k + 1) & 3], state[(k + 2) & 3], state[(k + 3) & 3]), M[n & 0xf], _md5_s[i][j & 3], _md5_t[i][j]);
n += _md5_n[i][1];
}
}
for (int i = 0; i < 4; i++) {
chain[i] += state[i];
}
}
void MD5p::Final(unsigned long chain[4], unsigned char* tail, unsigned long length[2])
{
unsigned char E[128];
int l = length[0] & 0x3f;
int p = 0;
for (p = 0; p < l; p++) {
E[p] = tail[p];
}
int n = (l >= 56? 120: 56) - l;
if (n > 0) {
E[p++] = 0x80;
while (--n > 0) {
E[p++] = 0;
}
}
((unsigned long *)(E + p))[0] = length[0] << 3;
((unsigned long *)(E + p))[1] = length[1] << 3 | length[0] >> 29;
Update(chain, (unsigned long *)E);
if(l >= 56) {
Update(chain, (unsigned long *)&E[64]);
}
}
相关推荐
1688 item_review 接口深度分析及 Python 实现
1688 的接口是阿里巴巴开放平台提供的核心接口之一,用于获取指定商品的买家评论数据,包括文本评价、评分、晒图、采购属性(如采购数量、用途)等信息。该接口是分析商品质量、供应商信誉、买家需求的关键数据来源,广泛应用于供应链风控、竞品分析、商品优化等场景。
BUU CODE REVIEW 1 1(反序列化+md5绕过)
BUU CODE REVIEW 1 1(反序列化+md5绕过)
大众点评评论数据抓取实战:如何绕过_token加密参数(Python+PyExecJS完整方案)
本文详细介绍了如何通过Python和PyExecJS逆向分析并绕过大众点评评论接口的_token加密参数,实现高效稳定的数据抓取。文章提供了从接口识别、加密逻辑分析到完整工程化代码实现的完整方案,帮助开发者直接获取结构化的JSON评论数据,解决Ajax接口动态参数难题。
BUUCTF——Basic-BUU CODE REVIEW(MD5弱碰撞&反序列化漏洞)
所以我们不能将input设为具体的值,而是在序列化执行,令input=&correct。于是涉及到了md5绕过的问题,md5这个地方可以用md5弱碰撞,因为是弱类型比较。右键“检查”,使用Hackbar工具,输入对应的GET和POST参数然后Execute,得到flag。POST传入的参数pleasepost=2,同时要求md51和md52的值不同,但是md5值相同。要求GET传入的参数pleaseget=1,于是GET处的参数很简单,就是。得到了POST第二个部分的字段,最后拼接起来就是。...
高效数据迁移:ICCAP到ADS的数据导入与导出实战指南
本文提供了从ICCAP到ADS进行高效、准确数据迁移的实战指南。针对射频与微波电路设计中的关键挑战,详细阐述了迁移前的战略规划、ICCAP数据的精细化导出(包括脚本化批处理)、ADS数据的多种导入方法(如Data Items、DML模型库及编程化API),并强调了数据完整性与准确性验证的重要性,确保模型参数和仿真结果在平台间可靠传递。
CAN总线BusOff恢复机制详解:快慢恢复策略在车载网络中的实战应用
本文深入解析了CAN总线BusOff恢复机制,重点阐述了快慢恢复策略在车载网络中的工程应用。通过对比NXP S32K与STM32平台的实现代码,并结合CANoe仿真与参数优化方法,为工程师提供了从理论到实战的完整解决方案,旨在提升车载网络的可靠性与功能安全。
# Codex 项目实战:从 0 搭建 AGENTS.md、Rules、Test 与 AI Code Review 工作流plus pro chatgpt 5.6sol
这一点经常被误解。我们公司成立于……这个项目最早创建于……项目的愿景是……这些内容不是完全没用。但对于 Coding Agent 来说,Signal 很低。WhereHowConstraintValidation代码在哪里?应该怎么改?什么不能做?怎么判断正确?什么情况下才算完成?2026 年 Coding Agent 已经越来越能够真正执行系统操作。OpenAI 2026 年公开介绍 Codex 安全运行机制时,也重点强调了技术边界、人工批准、系统访问范围和可审计性;
YOLOv11【第二章:核心模块进阶篇·第3节】LDConv线性可变形卷积改进YOLOv11!
🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。
【CTF Web】BUUCTF BUU CODE REVIEW 1 Writeup(代码审计+PHP弱类型漏洞+MD5的0e绕过+反序列化)
1。
【2024-06-21】网易互娱秋招实习笔试三道编程题解
恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经。作者@TechGuide【全网同名】
第10集:AIOps 平台架构设计!画出面试官最想看的系统全景图
本文介绍了如何将AIOps平台的六大功能模块整合为四层架构设计,并生成专业系统全景图。文章首先指出面试中架构设计能力的重要性,强调一张清晰的架构图能直观展现全局观。随后指导读者检查项目结构,准备绘图环境。核心部分详细拆解了四层架构:数据采集层(Prometheus、ELK等)、AI分析层(巡检、告警、预测等)、决策执行层(工作流引擎、自愈Agent)和展示交互层(API、控制台)。通过Python代码自动生成模块依赖关系图,并提供了面试讲解技巧。全文旨在帮助开发者在面试中系统性地展示项目架构设计能力。
刚换到 Codex 不顺手?用 3 层配置解决 4 个常见问题
本文介绍了如何通过三层配置优化Codex的使用体验,解决审批频繁、回复冗长等常见问题。第一层是模型参数配置,建议显式设置模型类型和推理档位;第二层通过AGENTS.md文件管理沟通方式,要求回复简洁高效;第三层使用Rules命令边界控制操作权限,实施两阶段变更协议。文章还推荐使用Auto-review减少无效审批,并提供了配置审计工具下载链接。通过这三层配置,可以实现低风险操作自动完成、修改操作先计划后执行、外部访问需解释审批、高破坏性操作禁止执行的协作流程。
【即插即用模块】注意力篇 | MICCAI 2023 | MFE:多尺度特征提取,告别固定感受野,猛涨2个点!
本文提出一种用于低分辨率乳腺癌病理图像超分辨率与分类的网络SHISRCNet。针对现有方法处理低分辨率图像效果差、感受野固定等问题,设计了多特征提取模块(MFE),通过多速率空洞卷积覆盖全尺度感受野(局部到全局),结合递进残差连接和动态权重融合机制,实现自适应多尺度特征增强。实验表明,该模块在超分辨率任务中PSNR提升近2个点,分类准确率显著提高。代码提供详细注释,支持即插即用,适用于各类多尺度视觉任务。
第二周学习内容
反序列化+md5绕过。
【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码
大家好,我是阿光。本专栏整理了《深度学习100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。正在更新中~ ✨。
全志V3S嵌入式驱动开发(解决kernel 5.2.y wifi驱动问题)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 wifi模块,之前测试的时候,开发板上用的是esp8089,当时内核时4.14.y,测试也是通过的。链接地址在这里, https://blog.youkuaiyun.com/feixiaoxing/article/details/131178420?spm=1001.2014.3001.5501 那个时候测试的时候,我们就说过,wifi驱动可能是除了镜像制作之外,最复杂的一个
业务审查任务_business-review-task
以下为本文档的中文说明business-review-task(业务审查任务)是Relaticle开发的一款专业技能,充当非技术产品经理的角色来审查代码变更。该技能通过驱动真实的Relaticle应用(https://relaticle.test)并逐条断言验收标准,验证代码差异是否真正实现了其所声称的功能。它支持多种调用模式:默认模式审查当前分支与main的差异;–working-tree包含未暂存的更改;–pr N审查GitHub PR;–describe通过文字描述验收标准;
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
HiveSQL电商分析案例30题
问题导读: 1、如何通过UDF自定义 MD5加密函数 ,对地址、邮箱等信息进行加密? 2、如何对表内容进行检查? 3、如何进行数据分析? 一、前言 Hive 学习过程中的一个练习项目,如果不妥的地方或者更好的建议,欢迎指出!我们主要进行一下一些练习: 数据结构 数据清洗 基于Hive的数据分析 二、项目需求 首先和大家讲一下这个项目的需求: 「对某零售企业最近1年门店收集的数据进行数据分析」 潜在客户画像 ...
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
每日进步一点点(网安)
先看源代码源代码中包含BUU类和if条件判断语句先分析BUU类,有__destruct()方法,就是对象被销毁时自动调用,可以通过序列化结果进行post传参,让correct和input相等即可得到flag,这是对BUU类的操作s:0:"";R:2;为什么这样构造呢?因为uniqid()产生的数是随时变化的,所以不能单纯让两个变量的值相等,因为无法保障值是确定唯一的,所以用到指针,让两个变量的内存地址相等,也就是共用一个内存地址。
寒假学习笔记【反序列化2】
观察代码,类函数中destruct中存在if条件,达成可以输出flag,if条件为correct强等于input,但在此之前correct会被赋值。类函数之外有if条件的反序列化,第一个是使get传参的pleaseget===‘1’,之后是post传参的pleasepost==='2',最后是让经过md5哈希后的md51==md52并且md51不等于md52。要想上传obj,首先要绕过md5在PHP中,如果字符串以0e开头并且后面是纯数字,它会被解释为科学计数法,并且其值会被认为是0。
反序列化2
is_valid() 方法规定传入变量的字符的 ASCII 码必须是 32-125,而变量是 protected 定义的,protected 属性在序列化后会出现不可见字符 \x00*\x00,转化为 ASCII 码不符合要求,而 public 属性序列化不会出现不可见字符,可以用 public属性来绕过。//flag.php 也可,但是使用 php 封装协议过滤更加完善。接着来看魔术方法 __destruct(),在这个方法中,当 op 强等于 2 时,会使 op 等于 1,但在 php 中,强比较。
php反序列化练习
根据前面学的代码审计一下,发现需要满足三个条件get=1post=2md51!=md52 但是要满足md5(md51) ==md5(md52),MD5函数不能处理数组,那么我们可以利用NULL等于NULL来进行绕过这样flag就能出现,这里可以用php在线工具直接编写出来objs:0:"";R:2;那就可以开始操作了,得到flag了。
5大领域10道题定起点:find-your-level测评技巧与AI学习计划定制指南
[
Codex深度解读:OpenAI打造的下一代编码工作系统 本文系统解析了OpenAI Codex的设计理念与核心价值。Codex并非单纯的代码生成模型,而是由模型层(GPT-5.4-codex)、执行框架层(Harness)和交互入口层(App/CLI/IDE/Cloud)组成的三层架构系统,专注于提升复杂任务的稳定交付能力。与常见AI编码助手相比,Codex更强调"一次做对"的完成度、系统化工作流和风险控制。其核心创新在于Skills(固化开发流程)与MCP(连接外部服务)机制,将AI能力转化为可复用的工
我用 Claude Code 干了 3 个月:从写代码到搭系统,这些技巧让我效率翻倍
Claude Code 是 2026 年三大 AI 编程工具之一,独特优势是能理解整个项目、执行复杂任务、自主调试。本文基于 3 个月重度使用经验,总结 8 个最实用的技巧:用 Plan Mode 先规划再执行(返工率降低 70%)、用 CLAUDE.md 存项目规范、先写测试再写代码(TDD + AI)、用 @ 引用文件、让它解释代码而不是直接改、Background Agent 后台执行、多轮对话迭代(每轮 200-500 行代码)、让它做 Code Review。附 5 个踩坑记录和与 Cursor/
推荐一款强大又免费的检测iOS应用是否会4.3a的工具
前言做马甲包、多渠道App的iOS开发,最头疼的莫过于4.3(a)重复应用驳回。很多团队只更换图标、APP名称、少量文案就打包提审,结果直接收到4.3拒信,白白浪费两三天审核周期,反复返工也找不到苹果判定高度相似的核心依据。市面上专门针对4.3风险检测的开源工具非常稀缺:商用混淆工具收费昂贵且逻辑不透明,没法自查混淆效果;海外工具适配国内多马甲场景很差;纯人工对比两套包的代码、资源,耗时长还极易遗漏关键相似特征。
961



被折叠的 条评论
为什么被折叠?



