SHCTF 山河CTF Reverse方向[Week1]全WP 详解

文章目录

  • [WEEK1]ez_asm
  • [WEEK1]easy_re
  • [WEEK1]seed
  • [WEEK1]signin
  • [WEEK1]easy_math
  • [WEEK1]ez_apk

[WEEK1]ez_asm

在这里插入图片描述
从上往下读,第一处是xor 1Eh,第二处是sub 0Ah;逆向一下先加0A后异或1E
写个EXP

data = "nhuo[M`7mc7uhc$7midgbTf`7`$7%#ubf7 ci5Y"
result = ''for char in data:xor_value = (ord(char)+0x0A) ^ 0x1Eresult += chr(xor_value)print(result.encode('utf-8').decode('unicode_escape'))

flag{It_is_als0_impor@nt_t0_13arn_4sm!}

[WEEK1]easy_re

在这里插入图片描述
对输入的Str做一个for循环处理,再与des比较
取出des中的数据,逆向一下;

# 已知的des数组
des = [ 0x66, 0xC6, 0x16, 0x76, 0xB7, 0x45, 0x27, 0x97, 0xF5, 0x47,0x03, 0xF5, 0x37, 0x03, 0xC6, 0x67, 0x33, 0xF5, 0x47, 0x86,0x56, 0xF5, 0x26, 0x96, 0xE6, 0x16, 0x27, 0x97, 0xF5, 0x07,0x27, 0x03, 0x26, 0xC6, 0x33, 0xD6, 0xD7]# 创建一个空列表来存储计算得到的Str
Str = []# 逆向计算Str
for value in des:# 首先计算右移4位,然后按位或上16倍的值Str_value = (value >> 4) | (16 * value)# 将计算得到的值添加到Str列表中Str.append(hex(Str_value))# 打印计算得到的Str
print(Str)
Str=['0x666', '0xc6c', '0x161', '0x767', '0xb7b', '0x454', '0x272', '0x979', '0xf5f', '0x474', '0x30', '0xf5f', '0x373', '0x30', '0xc6c', '0x676', '0x333', '0xf5f', '0x474', '0x868', '0x565', '0xf5f', '0x262', '0x969', '0xe6e', '0x161', '0x272', '0x979', '0xf5f', '0x70', '0x272', '0x30', '0x262', '0xc6c', '0x333', '0xd6d', '0xd7d']

再做一下处理,因为这里可以发现66是f,6c是l,61是a;这样就可以推测取俩位是flag

# 提取每个元素的后两位字符(十六进制字符)
enflag= [s[-2:] for s in Str]
# 转换每个十六进制字符为ASCII字符
flag = [chr(int(hex_str, 16)) for hex_str in enflag]# 使用join()方法将ASCII字符合并成一个字符串
result = ''.join(flag)# 打印合并后的字符串
print(result)

flag{Try_t0_s0lv3_the_binary_pr0bl3m}

[WEEK1]seed

在这里插入图片描述
查壳 64bit无壳 用ida64打开
在这里插入图片描述
逻辑很清晰,随机数生成存到v5里面,与输入的v6依次异或,然后和des比较;逆向一下就是用des里面的数据和随机数异或就可以了;都知道,rand()实际上是伪随机数,这里我们用动态调试就可以看到。
在这里插入图片描述
随便下个断点,只要在rand后就好,这里就是了。

enc = [0x26, 0x45, 0x49, 0x8E, 0xB9, 0x43, 0xCD, 0x9B, 0xFA, 0x0C]
des = [64, 41, 40, 233, 194, 4, 164, 237, 159, 83, 95, 117, 60, 209, 205, 43, 168, 196, 137, 105, 21, 33, 22, 239, 215,39, 146, 223, 202, 83, 95, 42, 60, 209, 206, 3, 163, 239, 165, 120, 22, 26, 45, 225, 196]# 创建一个空列表来存储计算得到的ASCII字符
result = []for i in range(len(des)):result.append(chr(des[i] ^ enc[i % 10]))  # 使用chr()将整数转为ASCII字符# 使用join()方法将ASCII字符合并成一个字符串
output = ''.join(result)# 打印合并后的ASCII字符串
print(output)
# flag{Give_y0u_the_se3d_and_D0_you_w@nt_t0_do}

[WEEK1]signin

在这里插入图片描述
在这里插入图片描述
ida打开后 flag{flag1sinarray}

[WEEK1]easy_math

py文件打开

在这里插入图片描述
源代码的解释一下:将输入的长度为42的flag分为长度为7的六个十六进制;这六个十六进制满足下列条件;这里可以用Z3约束求解得出六个数,再转换成ascii就🆗了;

Z3约束不懂得骨骼一下;学习;

exp:

from z3 import *v = Real('v')
w = Real('w')
x = Real('x')
y = Real('y')
z = Real('z')
c = Real('c')
s = Solver()s.add(593*v + 997*w + 811*x + 258*y + 829*z + 532*c == 0x5b8e0aef71d34ff43)
s.add(605*v + 686*w + 328*x + 602*y + 695*z + 576*c == 0x551a262360964ef7f)
s.add(373*v + 512*w + 449*x + 756*y + 448*z + 580*c == 0x49d158a5657d6931c)
s.add(560*v + 635*w + 422*x + 971*y + 855*z + 597*c == 0x625568d5abbabf4f3)
s.add(717*v + 507*w + 388*x + 925*y + 324*z + 524*c == 0x50ee0c025e70e3c23)
s.add(312*v + 368*w + 884*x + 518*y + 495*z + 414*c == 0x40e735f8aa2815f65)
result = []
if s.check() == sat:result = s.model()
print(result)
# 这里输出得result顺序不对所以修改了一下,得到下面得enc
enc = [28829613228248624, 26827458353261422, 13642136288051316, 29378135513658469, 32192963475959391, 30791965425607037]
enc1 = []
flag = []
for i in range(6):enc1.append(hex(enc[i])[2:])for j in range(0,14,2):flag.append(enc1[i][j:j+2])print(flag)
print("".join([chr(int(hex_str,16))for hex_str in flag]))
# flag{N0_One_kn0ws_m@th_B3tter_Th@n_me!!!!}

[WEEK1]ez_apk

在这里插入图片描述

用JEB(其他apk反编译工具应该也可以)打开,先看MainActivity,
在这里插入图片描述
这里获取我们的输入,也就是input_1控件的内容,然后用“encrypt.encode”方法对其进行编码,将结果存储进s中,最后和字符串“ ”比较,相等就输出flag正确;

在这里插入图片描述
看到上面有一个字符串,留意一下;下面就是encode。encode中还调用了一个divmod来将256进制转化为58进制的数,这里encode和divmod就是一个base58编码的过程;

还有一种判断方法,base58的特征:相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/"符号,最主要的是后面不会出现’='。观察一下可以发现,无论是码表还是编码后的内容都没有这些特征值,这样也可以判断Base58编码;

在这里插入图片描述

编码网站:cyberchef

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/123025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保姆级教学安装Linux操作系统,以及Linux的语法入门

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专…

附录B 其他第三方软件移植(FTP、OpenSSH、GDB)

目录 开发板 FTP 服务器移植与搭建vsftpd 源码下载vsftpd 移植vsftpd 服务器测试配置vsftpd添加新用户Filezilla 连接测试 开发板 OpenSSH 移植与使用OpenSSH 简介OpenSSH 移植OpenSSH 源码获取移植zlib 库移植openssl 库移植openssh 库 openssh 设置openssh 使用ssh 登录scp 命…

Java SE 学习笔记(十七)—— 单元测试、反射

目录 1 单元测试1.1 单元测试概述1.2 单元测试快速入门1.3 JUnit 常用注解 2 反射2.1 反射概述2.2 获取类对象2.3 获取构造器对象2.4 获取成员变量对象2.5 获取常用方法对象2.6 反射的作用2.6.1 绕过编译阶段为集合添加数据2.6.2 通用框架的底层原理 1 单元测试 1.1 单元测试概…

简单而高效:使用PHP爬虫从网易音乐获取音频的方法

概述 网易音乐是一个流行的在线音乐平台,提供了海量的音乐资源和服务。如果你想从网易音乐下载音频文件,你可能会遇到一些困难,因为网易音乐对其音频资源进行了加密和防盗链的处理。本文将介绍一种使用PHP爬虫从网易音乐获取音频的方法&…

【python笔记】小甲鱼

P3 查看内置函数 dir(__builtins__) P4 变量名命名规则: 1、变量名不能以数字打头; 2、变量名可以是中文 字符串可以是: 1、单引号:文本中存在双引号时使用单引号 2、双引号:文本中存在单引号时使用双引号 当…

Linux创建逻辑卷并扩容(超详细)

目录 ​编辑 一、概念解析 1、LV逻辑卷 2、PV物理卷 3、VG卷组 二、扩容前准备 三、创建逻辑卷并扩容 1、打开虚拟机 2、进入root用户 3、查看新加入的硬盘 4、创建主分区 5、创建物理卷 6、打包为一个卷组 7、创建逻辑卷 8、格式化逻辑卷 9、挂载逻辑卷--开机自…

Go学习第十四章——Gin请求与响应

Go web框架——Gin请求与响应 1 响应1.1 String1.2 JSON(*)1.3 HTML(*)1.4 XML1.5 文件(*) 2 请求2.1 请求参数查询参数 (Query)动态参数 (Param)表单参数 (PostForm)原始参数 (GetRawData) 2.2 请求头2.3 …

【送书福利-第二十一期】《ChatGPT进阶:提示工程入门》

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…

elementUI 特定分辨率(如1920*1080)下el-row未超出一行却换行

在1920*1080分辨率下, el-col 内容未超出 el-col 宽度,el-col 不足以占据一行,el-row 却自动换行了(其他分辨率没有这个问题)。 截图: 排查: el-col 内容没有溢出;没有多余的 pad…

TELUS Ventures(泰勒斯)

TELUS Ventures(泰勒斯)高峰论坛于2023年10月28日在南京第5站正式开幕。该论坛是由泰勒斯风险投资公司主办的一项重要活动,旨在促进创新和创业精神的发展 。 这次高峰论坛将汇集来自全球各地的创业者、投资者和行业专家,共同探讨…

Mac 版 WPS 接入 WPS AI,支持内容创作、修改文章、提炼重点等功能

导读近日消息,“WPS 办公助手”公众号发文宣布,Mac 版 WPS 现已接入 WPS AI,将带来内容生成、内容修改、辅助阅读等功能。 汇总 Mac 版 WPS 接入 WPS AI 之后,在文字、PDF 方面的功能如下: 一键生成文章大纲、讲话稿、…

TS中类型别名和接口区别

在很多场景下,interface 和 type都能使用,因此两者在很多时候会被混淆: 接口可以通过之间的继承,实现多种接口的组合 使用类型别名也可以实现多种的,通过&连接,有差异: 子接口中不能重新覆盖父接口中…

UWB室内定位技术

室内定位系统方案中,UWB室内定位技术目前应用较多,得益于UWB室内定位10-30厘米的超高定位精度。 UWB全称是超宽带技术,它是一种无线载波通信技术。 UWB不采用载波,而是利用纳秒至微微秒级的非正弦波窄脉冲传输数据。 目前根据使用…

公众号留言功能有必要开吗?如何开通留言?

为什么公众号没有留言功能?2018年2月12日,TX新规出台:根据相关规定和平台规则要求,我们暂时调整留言功能开放规则,后续新注册帐号无留言功能。这就意味着2018年2月12日号之后注册的公众号不论个人主体还是组织主体&…

队列(8.6)

目录 2.队列 2.1队列的概念及结构 2.2队列的实现 2.2.1初始化队列 2.2.2队尾入队列 2.2.3队头出队列 2.2.4获取队列头部元素 2.2.5 销毁队列 3.栈和队列面试题 225. 用队列实现栈 - 力扣(LeetCode) 232. 用栈实现队列 - 力扣(LeetC…

力扣每日一题73:矩阵置零

题目描述: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2…

java集成海康预览抓图出现内存一直上涨问题

求助:在java 中集成海康sdk后批量抓图出现内存上涨问题,不论是预览后不关闭继续预览,还是预览后关闭预览,然后重新预览都没有解决这个问题(抓图正常),尝试使用第三方解码器ffmpeg来进行解码&…

刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损分类,解压缩直接运行)

1.运行效果:刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损)_哔哩哔哩_bilibili 环境库: NumPy 版本: 1.19.4 Pandas 版本: 0.23.4 Matplotlib 版本: 2.2.3 Keras …

Android JNI/NDK 入门从一到二

1. 前言 最基础的创建JNI接口的操作,可以直接看这篇文章 : 第一个Android JNI工程, 本文会基于掌握创建JNI接口的操作的基础之上,来入门JNI/NDK。 2. 在JNI中打印日志 2.1 添加log模块 记得CMake中有log模块,不然编译不过 ta…

正点原子嵌入式linux驱动开发——Linux 多点电容触摸屏

随着智能手机的发展,电容触摸屏也得到了飞速的发展。相比电阻触摸屏,电容触摸屏有很多的优势,比如支持多点触控、不需要按压,只需要轻轻触摸就有反应。ALIENTEK的三款RGB LCD屏幕都支持多点电容触摸,本章就以ATK7016这…