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

news2024/12/24 3:32:54

文章目录

  • [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) ^ 0x1E
    result += 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.coloradmin.cn/o/1148089.html

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

相关文章

nginx请求时找路径问题

nginx请求时找路径问题 你是否遇到过这样的情况: 当你安装了nginx的时候,为nginx配置了如下的location,想要去访问路径下面的内容,可是总是出现404,找不到文件,这是什么原因呢,今天我们就来解…

OpenAI : GPT-4 发布更新,整合了画图、插件、代码等能力

本心、输入输出、结果 文章目录 OpenAI : GPT-4 发布更新,整合了画图、插件、代码等能力前言GPT-4 的复合能力更新中的 automatic (自动的)获取天气我们看看讯飞星火的表现放大后内容并不是我们想要的我们看看百度文心一言的表现弘扬爱国精神OpenAI : GPT-4 发布更新,整合…

CSS3中的字体和文本样式

CSS3优化了CSS 2.1的字体和文本属性,同时新增了各种文字特效,使网页文字更具表现力和感染力,丰富了网页设计效果,如自定义字体类型、更多的色彩模式、文本阴影、生态生成内容、各种特殊值、函数等。 1、字体样式 字体样式包括类…

画个哆啦A梦吧

可自定义名字 源代码 #!/usr/bin/python # -*- coding:utf-8 -*-# from turtle import * import turtle as t# 无轨迹跳跃 def my_goto(x, y):t.penup()t.goto(x, y

多个相同地址的I2C设备,如何挂载在同一条总线上

前言 (1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02gmail.com,此消息至2025年1月1日前均有效 (2&#xff0…

提高抖音小店用户黏性和商品销量的有效策略

抖音小店是抖音平台上的电商模式,用户可以在抖音上购买各类商品。要提高用户黏性和商品销量,四川不若与众帮你整理了需要注意以下几个方面。 首先,提供优质的商品和服务。在抖音小店中,用户会通过观看商品展示视频和用户评价来选…

M1安装OpenPLC Editor

下载OpenPLC Editor for macOS.zip文件后,使用tar -zvxf命令解压,然后将"OpenPLC Editor"拖入到"应用程序"文件夹 右键点击"OpenPLC Editor",打开这个""文件,替换为以下内容 #!/bin/bash…

No174.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Godot 官方2D C#重构(4):TileMap进阶使用

文章目录 前言完成内容项目节点结构TileMap设置图片资源备选图片添加物理碰撞添加y轴遮罩判断Y Sort Enable是干什么的? 脚本代码 前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 完成内容 项目节点结构 TileMap设置 图片资源 备选图…

git 推送到github远程仓库细节处理(全网最良心)

我查看了很多网上的教程都不是很好 我们先在github创建一个仓库,且初始化 readme 我们到本地文件初始化仓库 添加远程仓库 这时候我们就 git add . , git commit ,再准备git push 的时候 显示没有指定远程的分支 我们按照提示操作 提示我们要先git pull 提示我…

39 :C语言与汇编语言混合编程

目录 编译过程 编译小知识 C语言中函数是如何进行调用的? 寄存器压栈过程 C语言函数调用过程 函数调用过程 函数返回过程 C语言中的调用约定 gcc编译器使用的栈帧布局 ebp是函数调用以及函数返回的核心寄存器 用汇编语言编写Linux应用程序 交互关键字 …

windows下基于vscode的ssh服务远程连接ubuntu服务器

Ubuntu端配置 1.确保ubuntu端已启用ssh服务 首先,安装ssh服务 sudo apt-get install openssh-server 安装后,打开ssh服务 sudo service ssh start 如果显示有sshd就说明成功了。 判断是否成功打开 ps -e|grep ssh 同时也可以通过如下方式确保ss…

Spring-AOP概念及相关术语

AOP概念 一、概述1、相关术语2、作用 二、基于注解的AOP1、准备工作2、各种通知3、切入点表达式语法4、重用切入点表达式5、获取通知的相关信息6、切面的优先级 一、概述 回顾: 什么是面向对象 什么是AOP AOP(Aspect Oriented Programming)是…

STM32F103的GPIO

文章目录 STM32F103的地址STM32F103的GPIOA的地址推算 STM32F103的地址 GPIO 都是挂载在 APB2 总线之上。 STM32F103的GPIOA的地址推算 (出自STM32F103开发指南P127) GPIOA 的 7 个寄存器都是 32 位的,所以每个寄存器占有 4个地址&#x…

Web入门笔记

Web入门笔记 HTTP协议 超文本传输协议 规定了浏览器和服务器之间数据传输的规则,请问数据和响应数据的格式 基于TCP请求-响应模式一次请求对应一次响应无状态的协议 请问数据格式 浏览器版本:解决浏览器兼容问题。GET请求体:存放请求参数…

缓解大模型幻觉问题的解决方案

本文记录大模型幻觉问题的相关内容。 参考:Mitigating LLM Hallucinations: a multifaceted approach 地址:https://amatriain.net/blog/hallucinations (图:解决大模型幻觉的不同方式) 什么是幻觉? 幻觉…

木疙瘩的进度动画实现文字逐个出现路径描边

第一步 创建素材 第二步 插入进度动画 第三步,在最后一帧插入关键帧即可!

Linux之系统编程

1.yum 1.yum list可以出现所有可下载的程序 辅助grep进行查找 2.yum install可以下载并安装 3.yum remove可以卸载程序 不同的商业操作系统内核都是一样的,主要是配套社区不一样。 开源组织,各大公司,既得利益者。 同上 基础软件源可以保证…

腾讯云轻量服务器地域选择教程,一篇文章就够了

腾讯云轻量应用服务器地域是指轻量服务器数据中心所在的地理位置,如上海、广州和北京等地域,如何选择地域?腾讯云百科txybk.com建议地域选择遵循就近原则,用户距离轻量服务器地域越近,网络延迟越低,速度就越…