[LitCTF 2023]程序和人有一个能跑就行了
新知识 seh
表面上的逻辑蛮简单的
int __cdecl main(int argc, const char **argv, const char **envp)
{_DWORD *v3; // eax_DWORD *v5; // eaxchar *v6; // eaxint v7; // [esp+0h] [ebp-2ACh] BYREFint v8; // [esp+14h] [ebp-298h]int *v9; // [esp+18h] [ebp-294h]int v10; // [esp+1Ch] [ebp-290h] BYREFint v11; // [esp+20h] [ebp-28Ch]int (__cdecl *v12)(int, int, int, int, int, int); // [esp+34h] [ebp-278h]int *v13; // [esp+38h] [ebp-274h]int *v14; // [esp+3Ch] [ebp-270h]void *v15; // [esp+40h] [ebp-26Ch]int *v16; // [esp+44h] [ebp-268h]char Buf1[27]; // [esp+68h] [ebp-244h] BYREFchar Buf2[256]; // [esp+A0h] [ebp-20Ch] BYREFchar Destination[268]; // [esp+1A0h] [ebp-10Ch] BYREFint savedregs; // [esp+2ACh] [ebp+0h] BYREFv9 = &v10;v12 = sub_4752F0;v13 = dword_476078;v14 = &savedregs;v15 = &loc_475B38;v16 = &v7;sub_40A8F0(&v10);sub_409B80();v11 = -1;sub_472810(&dword_47DD80, Buf2);strcpy(Destination, "litctf");decode(Buf2, strlen(Buf2), Destination, 6u);Buf1[0] = -115;Buf1[1] = 108;Buf1[2] = -123;Buf1[3] = 118;Buf1[4] = 50;Buf1[5] = 114;Buf1[6] = -73;Buf1[7] = 64;Buf1[8] = -120;Buf1[9] = 126;Buf1[10] = -107;Buf1[11] = -18;Buf1[12] = -59;Buf1[13] = -19;Buf1[14] = 46;Buf1[15] = 113;Buf1[16] = 55;Buf1[17] = -15;Buf1[18] = 74;Buf1[19] = -103;Buf1[20] = 53;Buf1[21] = 24;Buf1[22] = -89;Buf1[23] = -80;Buf1[24] = 0;Buf1[25] = -106;Buf1[26] = -73;v8 = memcmp(Buf1, Buf2, 27u);if ( v8 ){v11 = 1;v5 = print(&dword_47DF60, "U are wrong?");sub_46FBA0(v5);v6 = sub_474310(4);*v6 = Buf2;sub_475190(v6, &off_483660, 0);}v11 = 1;v3 = print(&dword_47DF60, "U are right?");sub_46FBA0(v3);sub_40AA70(v9);return v8;
}
逻辑比较简单
看一下decode
int __cdecl sub_4015A0(int a1, int a2, int a3, unsigned int a4)
{unsigned int i; // ecxchar *v5; // eaxint v6; // ecxchar v7; // siint result; // eaxint v9; // ecxint v10; // edxchar v11; // dichar v12; // siint v13; // ediint v14; // [esp+0h] [ebp-214h]char v15[256]; // [esp+4h] [ebp-210h] BYREFchar v16[272]; // [esp+104h] [ebp-110h] BYREFfor ( i = 0; i != 256; ++i ){v15[i] = i;v16[i] = *(a3 + i % a4);}v5 = v15;LOBYTE(v6) = 0;do{v7 = *v5++;v6 = (v5[255] + v7 + v6);*(v5 - 1) = v15[v6];v15[v6] = v7;}while ( v5 != v16 );result = a2;if ( a2 ){LOBYTE(v9) = 0;LOBYTE(result) = 0;v10 = 0;v14 = 0;do{++v10;result = (result + 1);v11 = v15[result];v12 = v11;v9 = (v11 + v9);v15[result] = v15[v9];v15[v9] = v11;v13 = v14;v14 = v10;*(a1 + v13) ^= v15[(v15[result] + v12)];}while ( v10 != a2 );}return result;
}
标准的RC4,没搞什么怪
但是解出来,就是fake flag
这道题,我们动调一下,你会发现
左边是F5反汇编出来的,右边F5不行,但是在程序动调时候,却能运行
这边的代码也比较简单
我们复制数据过来
就OK了
——————————————————
最后我谈谈我对这个enc,也就是C++异常机制的理解
就是 正常运行————>正常程序报错——>修补机制(里面有代码)-——————>正常程序
这道题就是 第一个RC4就是正常程序,第二个就是在修补机制里面(我这样理解原理上应该是错的,只是方便我理解,给不想深究的同学看看,哈哈)
相关文章:

[LitCTF 2023]程序和人有一个能跑就行了
新知识 seh 表面上的逻辑蛮简单的 int __cdecl main(int argc, const char **argv, const char **envp) {_DWORD *v3; // eax_DWORD *v5; // eaxchar *v6; // eaxint v7; // [esp0h] [ebp-2ACh] BYREFint v8; // [esp14h] [ebp-298h]int *v9; // [esp18h] [ebp-294h]int v10;…...

如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问
前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&am…...
perl:获取同花顺数据--业绩快报,业绩公告
perldoc LWP::UserAgent 如果没有安装,则安装模块,运行 cpanm LWP::UserAgent 。 编写 get_yjkb_10jqka.pl 如下 #!/usr/bin/perl # perl 获取同花顺数据--业绩快报 use LWP::UserAgent; use Encode qw(decode encode); use POSIX; use Data::Dump…...
FPGA选型
开发FPGA的第一步,就是选择一片符合设计需求的芯片。 专用资源 选片第一个关注的应该是FPGA器件的专用资源。例如是否需要高速接口,如果需要的话,需要多少个通道,各个通道需要的最高收发速度是多少。同样,如果需要实…...

centos系统的root密码忘记或失效的解决办法(超详细)
文章目录 1、概述2、现象描述3、解决步骤3.1 进入单机维护模式3.2 修改启动参数3.3 在维护模式下修改密码3.4 重启 4、总结 1、概述 在Linux系统中,root用户是最高权限的用户,可以执行任何命令和操作。但是,如果我们忘记了root用户的密码&…...

【Android 源码】Android源码下载指南
文章目录 前言安装Repo初始化Repo选择分支没有梯子替换为清华源 有梯子 下载源码下载开始参考 前言 这是关于Android源码下载的过程记录。 环境:Windows上通过VMware安装的Ubuntu系统 安装Repo 创建Repo文件目录 mkdir ~/bin PATH~/bin:$PATH下载Repo工具&#…...

MySQL数据库高级语句
文章目录 MySQL高级语句older by 排序区间判断查询或与且(or 与and)嵌套查询(多条件)查询不重复记录distinctcount 计数限制结果条目limit别名as常用通配符嵌套查询(子查询)同表不同表嵌套查询还能用于删除…...

软件测试【理论基础】
软件测试的IEEE定义:使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。 软件测试的发展趋势: ① 测试工作将进一步前移。软件测试不仅仅是单元测试、集成测试、系统测试…...

蓝桥杯每日一题(floyd算法)
4074 铁路与公路 如果两个城市之间有铁路t11,公路就会t2>1,没铁路的时候t1>1,公路t21。也就是公路铁路永远都不会相等。我们只需要计算通过公路和铁路从1到n最大的那个即可。 floyd是直接在数组上更新距离。不需要新建dis数组。另外一定要记得把邻接矩阵初始…...

文心一言 VS 讯飞星火 VS chatgpt (224)-- 算法导论16.3 6题
六、假定我们有字母表 C{0,1,…,n-1} 上的一个最优前缀码,我们希望用最少的二进制位传输此编码。说明如何仅用 2n-1n⌈lgn⌉ 位表示 C 上的任意最优前缀码。(提示:通过对树的遍历,用 2n-1 位说明编码树的结…...

flutter3_douyin:基于flutter3+dart3短视频直播实例|Flutter3.x仿抖音
flutter3-dylive 跨平台仿抖音短视频直播app实战项目。 全新原创基于flutter3.19.2dart3.3.0getx等技术开发仿抖音app实战项目。实现了类似抖音整屏丝滑式上下滑动视频、左右滑动切换页面模块,直播间进场/礼物动效,聊天等模块。 运用技术 编辑器&#x…...

VR全景赋能智慧农业,打造沉浸式种植体验平台
随着人口的增长,传统农业也正在面临着不一样的挑战,加上很多人对农业的固有印象,很少有年轻人愿意下到农田里,那么该如何提高产量、降低成本以及引导年轻人深刻感受现代农业成为了急需解决的问题。 随着城市化脚步的推进ÿ…...

百度文心一言(ERNIE bot)API接入Android应用
百度文心一言(ERNIE bot)API接入Android应用实践 - 拾一贰叁 - 博客园 (cnblogs.com) Preface: 现在生成式AI越来越强大了,想在android上实现一个对话助手的功能,大概摸索了一下接入百度文心一言API的方法。 与AI助手交换信息的…...
springboot基本使用八(mbatisplus+filter实现登录功能)
mybatisplus依赖: <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version> </dependency> mysql依赖: <dependency><groupId>com.mysql<…...

蚂蚁庄园今天答案
蚂蚁庄园是一款爱心公益游戏,用户可以通过喂养小鸡,产生鸡蛋,并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料,使用鸡饲料喂鸡之后,会可以获得鸡蛋,可以通过鸡蛋来进行爱心捐赠。其中&#…...

第5章 数据建模和设计
思维导图 5.1 引言 最常见的6种模式:关系模式、多维模式、面向对象模式、 事实模式、时间序列模式和NoSQL模式 每种模式分为三层模型:概念模型、逻辑模型和物理模型 每种模型都包含一系列组件:如实体、关系、事实、键和属性。 5.1.1 业务驱…...

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】
题目 题目链接: https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e 思路 动态规划: 先初始化第一行和第一列。然后其他单元格依赖自己的上边,左边和左上角参考答案Java import java.util.*;public class Solution {/*** 代码中的类…...

C#学生信息成绩管理系统
一、系统功能描述 本系统包括两类用户:学生、管理员。管理员可以通过系统来添加管理员信息、修改管理员信息、添加学生信息、修改学生信息;开设课程、查询课程、录入成绩、统计成绩、修改成绩、修改个人密码等,而学生则可以通过系统来选择课…...

精品凉拌菜系列热卤系列课程
这一系列课程涵盖精美凉拌菜和美味热卤菜的制作技巧。学员将学习如何选材、调味和烹饪,打造口感丰富、色香俱佳的菜肴。通过实践训练,掌握独特的烹饪技能,为家庭聚餐或职业厨艺提升增添亮点。 课程大小:6.6G 课程下载࿱…...

Java代码基础算法练习-求一个三位数的各位数字之和-2024.03.27
任务描述: 输入一个正整数n(取值范围:100<n<1000),然后输出每位数字之和 任务要求: 代码示例: package M0317_0331;import java.util.Scanner;public class m240327 {public static voi…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...