news 2026/3/20 5:17:34

昨天线下赛的复盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
昨天线下赛的复盘

这次最大的感受:Re做题的时候不要啥都没分析出来就去写代码,不要觉得自己写着写着就能看懂,不可能的,不如先分析好,即使是先猜一下呢,还有就是测试数据不要写0,会和本身就是空的数据混了

Re1#

分最少的一题,附件很大而且F12全是Py开头的

image

断定是python逆向:

pyinstxtractor拆exe程序:

image

一般情况下,需要找和附件同名的pyc文件进行反编译,但是没找到,比较可疑的是src这个

用pycdc进行反编译:

# Source Generated with Decompyle++

# File: src.pyc (Python 3.10)

import hashlib

def get_user_input():

user_input = input('请输入: ').strip()

if len(user_input) != 9:

print('你的输入存在错误!')

continue

if not user_input.isdigit():

print('你的输入存在错误!')

continue

return user_input

def check_md5_match(user_input, target_hash):

input_md5 = hashlib.md5(user_input.encode()).hexdigest()

if input_md5 == target_hash:

return True

def main():

TARGET_HASH = 'b4bb721a74f07177a6dbc3e113c327e3'

user_input = get_user_input()

is_match = check_md5_match(user_input, TARGET_HASH)

if is_match:

flag = "flag{md5(user_input + 'SDnisc')}"

print('验证成功!')

print(f'''Flag: {flag}''')

return None

None('验证失败!')

if __name__ == '__main__':

main()

return None

可以看出,首先会对input的内容去除回车和空格/制表符那种

if not user_input.isdigit():其次,不能存在字母,长度为9,进行md5值计算,然后和给出的md5进行比较

所以,结论很明确了,我们只需要进行9位纯数字的md5爆破就可以。

我们当然可以用python写个脚本。但事实证明特别慢,不如用hashcat掩码爆破

hashcat -a 3 b4bb721a74f07177a6dbc3e113c327e3 ?d?d?d?d?d?d?d?d?d -m 0

这里就不进行爆破了,直接给了

image

然后直接后面加上SDisc,进行md5就是flag

Re2#

比较绕,但是比赛还是可以做的(虽然我最后卡死在这上面了)

image

大体看一下,去关注569D那个函数,这是主要的加密函数

但在那之前,我先写一下数据加载的函数

image

你会发现,所有数据都是在src后76位上开始向后延申数据的,srca是在src的最后,也就是116位以后的160个字节空间内

这个函数传入了两个值,一个是enc,也就是加密好的flag,另一个是写进去的flag

首先是判断长度,这里就不详细看了

image

我感觉这里是最能误导人的点,它把写入的flag的值赋给了加密好的flag?但是实质上,enc的前76位是空的,所以写这个完全没有问题

然后是逐字节加密,每个字节加密40次,第一次加密的时候,传入第一个值的地点是4*28+4=116,很熟悉的位置吧?

image

剩下的就是很乱的加密过程了,这里不详细赘述

image

这里说一下,误导我的点:

image

还是太菜了,被位运算卡住了,这里其实画个图会比较清晰,这里相当于左移n2位,然后将溢出的n2位移动到最后,所以我们写逆向代码的时候就要反过来(其实只需要把输入的键反过来就行)

这里贴一下手写的脚本,感觉要比ai给的清晰一点

# 本脚本是鹏云杯逆向第三个题,相当于第二个简单的题吧(一共就仨)

# 尝试手写python脚本

key = [0x3, 0x5, 0x1, 0x6, 0x2, 0x4, 0x5, 0x6, 0x3, 0x1, 0x2, 0x5, 0x4, 0x6, 0x1, 0x3, 0x2, 0x5, 0x4, 0x6, 0x1, 0x3, 0x2, 0x5, 0x4, 0x6, 0x1, 0x3, 0x5, 0x2, 0x4, 0x6, 0x1, 0x3, 0x2, 0x5, 0x4, 0x6, 0x1, 0x3]

enc = [0xB4, 0xB6, 0x9F, 0xA1, 0xC5, 0xAD, 0x7A, 0x68, 0x77, 0xAD, 0x7B, 0x70, 0x1D, 0x68, 0x70, 0x7B, 0x76, 0x70, 0xA0, 0x7C, 0x1D, 0xAE, 0x7B, 0x77, 0xB4, 0x7C, 0xAE, 0xB4, 0x68, 0xA0, 0x68, 0xF9, 0x76, 0xB3, 0x70, 0x77, 0x9F, 0xBA]

def switchEnc(en , key):

match key:

case 1:

en = (en ^ 5) & 0xFF

case 2:

en = (en - 1) & 0xFF

case 3:

en = (en + 1 )& 0xFF

case 4:

en = case4(en)

case 5:

en = case5(en, 1)

case _:

en = case6(en ,1)

return en

def case4(en1):

# en2 = case5(en1 + 3, 2)

# return (case6(en2 - 2, 2) - 1) & 0xFF

en2 = (case6((en1 + 1) & 0xFF ,2) + 2) & 0xFF

return (case5(en2, 2) - 3) & 0xFF

def case5(en1 ,n2):

n2 &= 7

en1 = en1 >> (n2 % 8) | en1 <<(8 - n2 % 8)

return en1 & 0xFF

def case6(en1 ,n2):

n2 &= 7

en1 = en1 << (n2 % 8) | en1 >>(8 - n2 % 8)

return en1 & 0xFF

print(len(enc))

for i in range(len(enc)):

for j in key[::-1]:

enc[i] = switchEnc(enc[i] , j)

print(chr(enc[i]),end="")

对于溢出问题:我的建议是把所有加法后面都加上防止溢出的&FF

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 10:34:12

记一次 Kubebuilder Operator 开发中的 CRD 注解超限问题

概念厘清&#xff1a;注解、CSA 与三路合并的来龙去脉要理解这个问题&#xff0c;需要先弄清楚几个关键概念。1. annotations 是什么&#xff1f;在 Kubernetes 中&#xff0c;注解是与对象关联的键值对&#xff0c;用于存储非标识性的元数据。这些信息可以被工具、库或控制器读…

作者头像 李华
网站建设 2026/3/13 11:37:27

约翰·伯格的资产配置理论

约翰伯格的资产配置理论 关键词:约翰伯格、资产配置理论、投资组合、风险分散、长期投资 摘要:本文深入探讨了约翰伯格的资产配置理论。该理论强调通过合理的资产配置实现风险分散和长期稳定的投资回报。文章首先介绍了理论提出的背景,包括目的、预期读者和文档结构等内容。…

作者头像 李华
网站建设 2026/3/13 10:22:31

命越算越薄?一张电器说明书给你讲透唯物主义命理观

【CSDN 独家】命越算越薄&#xff1f;一张电器说明书给你讲透唯物主义命理观扔掉“天机不可泄露”的玄学外衣&#xff0c;用程序员思维解码命运的底层逻辑。关键词&#xff1a;命理、唯物主义、心理学、程序员思维、决策陷阱 预计阅读&#xff1a;6分钟开场&#xff1a;程序员买…

作者头像 李华
网站建设 2026/3/13 22:04:48

【课程设计/毕业设计】基于springboot的人力资源管理系统的设计与实现员工个人信息修改、请假、员工 的薪资管理、考勤管理、社保管理【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/13 22:39:49

Java计算机毕设之基于 SpringBoot 的人事人力资源管理系统设计与实现基于springboot的人力资源管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/13 5:00:29

Spring Cloud Alibaba + Dubbo

在微服务世界里&#xff0c;服务间的调用就像小伙伴之间传纸条。你可以直接跑过去&#xff0c;也可以用 Dubbo——微服务界的“极速传声筒”&#xff0c;帮你瞬间把消息传到对方手里&#xff0c;还保证安全可靠。 本文将从 Dubbo 的原理、配置、使用场景到实战经验进行全面解析…

作者头像 李华