[GWCTF 2019]re3

int mprotect(void *addr, size_t len, int prot);

 实现内存区域的动态权限控制:

  • addr:要修改保护权限的内存区域的起始地址。
  • len:要修改保护权限的内存区域的长度(以字节为单位)。
  • prot:要设置的新的保护权限,通常使用以下常量之一:
    • PROT_NONE:禁止对内存区域的任何访问。
    • PROT_READ:允许读取内存区域的内容。
    • PROT_WRITE:允许向内存区域写入数据。
    • PROT_EXEC:允许执行内存区域中的指令.

嗯,然后先修改那段内存吧

https://www.cnblogs.com/LyShark/articles/13100048.html 

[IDA]IDC脚本基础_idc的加法运算-CSDN博客

主要是sub开头那一点,不然好像不能P重定义

 

调用了很多函数,最后有一个比较。

然后再从main函数开始分析,看别人wp,有JUMPOUT(0x402123LL)

函数边界识别错误

或者是由于编译器某些原因会把某些代码分出来,不存放在连续区域,而是在其他位置,这些块有时ida能识别出来,被称为chunk,有些不能识别,此时就得自己手动设置。
如果是边界识别错误,那就alt+p,找到正确的末尾;
如果是后者,那就通过append_func_tail来将目标区域添加到本函数中,另外,得先undefine目标区域。

我可能先undefine了,所以没有爆红

sub_401CF9(const void *a1, size_t a2, __int64 a3)

问gpt是哈希md5加密,还有根据算法特征码

                                                // 五个一样的函数,不一样的参数v6 = __readfsqword(0x28u);                    // 访问 CPU 中的 FS 寄存器(在 x86 架构中用于存储线程局部存储器段描述符的基地址),并读取偏移地址为 0x28 的字节数据sub_401CF9(&aAbcdefghijklmn, 64LL, v2);       // base64表经过md5-->v2sub_401CF9(&unk_603100, 20LL, &v3);sub_401CF9(&unk_6030C0, 53LL, &v4);sub_401CF9(&dword_4025C0, 256LL, &v5);sub_401CF9(v2, 64LL, a1);                     // v2也经过md5-->a1,即base表经过两次md5return __readfsqword(0x28u) ^ v6;

 

也用到了刚刚那个数组,所以应该就是AES的加密实现

所以应该就是base表两次md5加密得到unk_603170作为AES密钥,我们的输入是明文,加密后和byte比较。

所以就是先得到unk(可以动调也可以md5网站),然后再aes解密就行了

 

aes好像还有CBC模式与ECB模式,额。。。

总的来说,re题不太需要搞清楚每一步都在干什么,每个语句都是什么意思,搞清楚整体逻辑,就行了。

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

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

相关文章

在线视频教育平台,基于 SpringBoot+Vue+MySQL 开发的前后端分离的在线视频教育平台设计实现

目录 一. 前言 二. 功能模块 2.1. 用户功能模块 2.2. 管理员功能模块 2.3. 教师功能模块 2.4. 前台首页功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优…

Golang | Leetcode Golang题解之第88题合并两个有序数组

题目: 题解: func merge(nums1 []int, m int, nums2 []int, n int) {for p1, p2, tail : m-1, n-1, mn-1; p1 > 0 || p2 > 0; tail-- {var cur intif p1 -1 {cur nums2[p2]p2--} else if p2 -1 {cur nums1[p1]p1--} else if nums1[p1] > n…

5.nginx常用命令和日志定时切割

一. nginx常用的相关命令介绍 1.强制关闭nginx: ./nginx -s stop 2.优雅的关闭nginx: ./nginx -s quit 3.检查配置文件是否正确: ./nginx -t 4.查看nginx版本: ./nginx -v 5.查看nginx版本相关的配置环境信息:./nginx -V 6.nginx帮助信…

Java入门1: 基础语法

Java入门1: 基础语法 MangoGO 芒狗狗 目录 1 基础语法1.1 Hello World1.2 常量1.3 数据类型1.4 String1.5 StringBuilder1.6 运算符1.7 位运算符1.8 逻辑运算符1.9 关系运算符1.10 练习:计算数字和1.11 关键字和语句1.12 流程控制1.13 数组1.14 用户输入操作参考代码…

【C++】再识构造函数:初始化列表新方式

欢迎来到CILMY23的博客 🏆本篇主题为: 再识构造函数:初始化列表新方式 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux 🏆感…

一种快速H.264 NALU快速搜索算法

1. 引言 在播放H.264码流的时候,进行NALU的搜索的效率高低影响着系统的性能。有采用普通逐字节搜索的算法,有利用cpu的simd的单指令多数据操作的并行功能进行搜索的算法,今天要介绍的是一个非常简单而且高效的快速搜索算法,而且不需要利用simd指令,搜索的速度甚至快于我之…

Vue的学习 —— <初识vue>

目录 前言 目标 前端的发展历程 正篇开始——Vue讲解 一、Vue简介 二、Vue特性 1、数据驱动视图 2、双向数据绑定 3、指令 4、插件 三、vue的三大版本 前言 在这个快速迭代的互联网时代,前端技术的发展日新月异,Vue.js的出现无疑为前端开发领…

深度解析Nginx:高性能Web服务器的奥秘(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、Nginx概述 二、Nginx核心功能 1、URL重写与重…

git-将本地项目上传到远程仓库

在gitee中新建一个远程仓库。 填写对应内容。 打开你想上传的文件夹,比如我想上传yuanshen 右击,打开git bash 输入git init初始化仓库 git init 添加项目所有文件 git add . 将添加的文件提交到本地仓库(提交说明必填) git …

嵌入式CAN通信协议详解分析

CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线…

算法课程笔记——自下而上树形DP

算法课程笔记——自下而上树形DP #include<bits/stdc.h>usingnamespacestd; constintN100005; intn,a[N]; longlongdp[N][2]; vector<int> e[N]; voiddfs(intu){for(autov:e[u]){dfs(v);dp[u][1]dp[v][0];dp[u][0]max(dp[v][0],dp[v][1]);}dp[u][1]a[u]; } intmain…

图像分类——猫狗图片

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

如何用Rust获取CPU、内存、硬盘的信息?

目录 一、用Rust获取CPU、内存、硬盘的信息 二、知识点 systemstat 一、用Rust获取CPU、内存、硬盘的信息 首先&#xff0c;需要添加systemstat库到Cargo.toml文件&#xff1a; [dependencies] systemstat "0.8.2" 在Rust代码中使用它&#xff1a; extern crat…

新增柱线组合图、象限图,新增钉钉、飞书、企业微信客户端免密登录,DataEase开源数据可视化分析工具v2.6.0发布

2024年5月13日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.6.0版本。 这一版本的功能升级包括&#xff1a;图表方面&#xff0c;新增了柱线组合图、象限图&#xff1b;仪表板方面&#xff0c;支持批量拖拽字段&#xff0c;外部参数新增支持配置过滤组件&…

日元崩了:日本上市公司转战比特币作对冲

5月13日&#xff0c;日本上市公司Metaplanet发布公告宣布因为政府债务水平高企、实际利率长期处于负值以及日元贬值&#xff0c;Metaplanet特将比特币作为其公司战略储备资产&#xff0c;以回应日本严峻的经济形势。同时也为当地资产管理领域的企业创新开创了先例。 Metaplanet…

强化学习——马尔可夫奖励过程的理解

目录 一、马尔可夫奖励过程1.回报2.价值函数 参考文献 一、马尔可夫奖励过程 在马尔可夫过程的基础上加入奖励函数 r r r 和折扣因子 γ \gamma γ&#xff0c;就可以得到马尔可夫奖励过程&#xff08;Markov reward process&#xff09;。一个马尔可夫奖励过程由 < S , …

Vue从入门到实战Day05

一、自定义指令 自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能 需求&#xff1a;当页面加载时&#xff0c;让元素将获得焦点 (autofocus在safari浏览器有兼容性) 操作dom&#xff1a;dom元素.focus() mounted() {this.$ref…

Elasticsearch解决字段膨胀问题

文章目录 背景Flattened类型的产生Flattened类型的定义基于Flattened类型插入数据更新Flattened字段并添加数据Flattened类型检索 Flattened类型的不足 背景 Elasticsearch映射如果不进行特殊设置&#xff0c;则默认为dynamic:true。dynamic:true实际上支持不加约束地动态添加…

关于milvus go sdk运行时报9223372036854775807 (untvped int constant)overflows int问题

背景 在使用milvus go sdk去查询milvus服务中并列出所有集合的时候遇到一个int溢出问题&#xff0c;依据官方文档&#xff0c;具体代码如下 package localimport ("context""fmt""github.com/milvus-io/milvus-sdk-go/v2/client""log&quo…

vue3使用依赖注入实现跨组件传值

父组件Index.vue: <script setup> import { onMounted, provide, ref } from vue import Child from ./Child.vue import ./index.cssconst count ref(0)provide(count, count)const handleClick () > {count.value }onMounted(() > {}) </script><tem…