Youngter-drive

BUUCTF逆向题Youngter-drive-CSDN博客

逆向每日一题----Youngter-drive题解-CSDN博客

借鉴博客,写得比我好

upx拖壳

upx -d Youngter-drive.exe

这道题我不知道为什么,我这里是运行不了的,也没有找到原因

int __cdecl main_0(int argc, const char **argv, const char **envp)
{
  HANDLE Thread; // [esp+D0h] [ebp-14h]
  HANDLE hObject; // [esp+DCh] [ebp-8h]

  sub_DA10FF();
  ::hObject = CreateMutexW(0, 0, 0);
  j_strcpy(Destination, &Source);
  hObject = CreateThread(0, 0, StartAddress, 0, 0, 0);
  Thread = CreateThread(0, 0, sub_DA119F, 0, 0, 0);
  CloseHandle(hObject);
  CloseHandle(Thread);
  while ( dword_DA8008 != -1 )
    ;
  sub_DA1190();
  CloseHandle(::hObject);
  return 0;
}

这是第一个sub函数

36位的flag

这段代码是使用C语言风格的Windows API函数来创建互斥体(Mutex)、线程以及关闭句柄的操作。下面是对每行代码的详细解释:

  1. ::hObject = CreateMutexW(0, 0, 0);

    • 这行代码在全局命名空间中创建一个互斥体(Mutex)。CreateMutexW是Windows API中的一个函数,用于创建一个内核对象,用于同步多个线程对共享资源的访问,确保同一时间只有一个线程可以访问资源。
    • 参数说明:
      • 第一个参数为LPSECURITY_ATTRIBUTES lpMutexAttributes,指定了互斥体的安全属性,默认设为0,表示使用默认安全属性。
      • 第二个参数为BOOL bInitialOwner,指定创建线程是否立即拥有该互斥体。设为0意味着调用者不立即拥有互斥体。
      • 第三个参数为LPCWSTR lpName,为互斥体指定一个名称,这里也是0,表示创建一个未命名的本地互斥体。
    • ::hObject是一个全局或静态变量,用于存储新创建的互斥体的句柄。
  2. j_strcpy(Destination, &Source);

    • 这行代码似乎是用来复制字符串的,但j_strcpy并不是标准库中的函数,可能是自定义的或特定库中的函数,其作用类似于strcpy,将Source指向的字符串复制到Destination指向的缓冲区中。
  3. hObject = CreateThread(0, 0, StartAddress, 0, 0, 0);

    • 创建一个新的线程。CreateThread是Windows API中的函数,用于创建一个新的线程并执行指定的函数。
    • 参数说明:
      • 第一个参数为LPSECURITY_ATTRIBUTES lpThreadAttributes,同上,指定线程的安全属性,这里为0,使用默认设置。
      • 第二个参数为SIZE_T dwStackSize,指定线程栈的大小,设为0表示使用系统默认大小。
      • 第三个参数为LPTHREAD_START_ROUTINE lpStartAddress,是指向线程开始执行的函数地址,这里是StartAddress
      • 第四个参数为LPVOID lpParameter,传递给线程函数的参数,这里为0,没有传递参数。
      • 第五个参数为DWORD dwCreationFlags,控制线程创建的标志,设为0表示无特殊标志。
      • 第六个参数为LPDWORD lpThreadId,输出参数,返回新线程的ID,这里没有使用,所以传入了0
    • hObject被重新赋值为新创建线程的句柄。
  4. Thread = CreateThread(0, 0, sub_DA119F, 0, 0, 0);

    • 同样是创建一个线程,但这次执行的函数是sub_DA119FThread变量用于存储这个新线程的句柄。
  5. CloseHandle(hObject);

    • 关闭之前创建的互斥体或线程的句柄。CloseHandle是Windows API中的函数,用于释放与句柄关联的系统资源。这里关闭的是第一个线程的句柄(尽管变量名是hObject,但根据上下文应该是线程句柄)。
  6. CloseHandle(Thread);

    • 关闭第二个线程的句柄,释放与之关联的系统资源。

总结来说,这段代码首先创建了一个互斥体,然后创建了两个线程,每个线程都去执行不同的函数(StartAddresssub_DA119F),最后关闭了这两个线程的句柄以及(可能误标为)互斥体的句柄。注意,互斥体创建后并未显示地在代码中使用,也没有进行线程间的同步操作,这可能是个疏忽或者示例代码片段的一部分。此外,字符串复制操作与线程创建看起来是独立的操作,没有直接关联。

我理解下,就是有两个进程,一个进程进行一个函数

第一个线程h0bject会执行StartAddress函数,第二个线程v2执行sub_41119f函数,

首先找到我们已知的加密吧,这是第一个,可以看见flag是由destination来的

destination是source来的

挨个跟进source

如果是大写,-38

如果是小写 -96

至于上没那个报错,我们可以看见,这里的堆栈变成-04了,明显是错误的

1、代码插入了花指令,但是这种会导致无法使用F5进行反编译,所以针对本题而言,不是花指令导致的不平衡

2、代码函数出现了分离,就是一段代码被拆分为两部分,所以在进行恢复现场的时候,通常是使用了jmp的强制跳转,然后被硬生生分成了两部分

3、还有可能是定义的调用约定与使用的不同,因为不同的调用约定进行清理堆栈的操作不同,那stdcall与cdecl两种对比:

对于stdcall:
由调用的函数自己进行清理使用的堆栈
对于cdecl:
他的清理堆栈是由调用者自己进行回复堆栈,

()

总结一下思路

!这里因为每一个线程里面有sleep函数,这里程序会先执行下一个同等线程,所以是先第一个进程,然后第二个,然后回到一个~!!!!!!我giao,学到了<但是第二个线程没什么加密 

然后这里进行了30次

但是我得到的密文只有29位

应该有一个是我们需要爆破的

因为是交替的,所以有个问题!这里dowrd是公用了,那么第一个加密后,第二个就不会加密了!

所以只加密15个

flag1 = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
d = 'TOiZiZtOrYaToUwPnToBsOaOapsyS'
flag="flag{"
for i in range(len(d)):
    if i%2 == 0:
        flag+=d[i]
    else:
        if(d[i].isupper()):
            flag+=chr(flag1.find(d[i])+96)
        else:
            flag+=chr(flag1.find(d[i])+38)
flag+="}"
print(flag)

____________________

flag{ThisisthreadofwindowshahaIsES}

这段长度只有35个,错误

你还记得吗?开头我们看见了sancf的参数是36,说明还有一个我们没有找到

最后加个E(w sou d )

最后我说一下我对于这个堆栈的题的理解

其实这道题有些人可以发现,我们不改esp也可以通过

[求助]IDA为什么产生 sp-analysis failed-软件逆向-看雪-安全社区|安全招聘|kanxue.com

看着里面的一位大神的评论

你再看这里

不是一模一样?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进程信号(1)

目录 一、信号 1.1、生活中的信号 1.2、Linux中的信号 二、信号处理常见方式 三、信号的产生 3.1、简单理解信号的保存和发送 3.2、键盘产生信号 3.3、核心转储 3.4、系统调用接口产生信号 3.4.1、kill 3.4.2、raise 3.4.3、abort 3.5、软件条件产生信号 3.6、硬…

网络编程-TCP

一、TCP的相关IP 1.1 SeverSocket 这是Socket类,对应到网卡,但是这个类只能给服务器使用. 1.2 Socket 对应到网卡,既可以给服务器使用,又可以给客户端使用. TCP是面向字节流的,传输的基本单位是字节. TCP是有连接的,和打电话一样,需要客户端拨号,服务器来听. 服务器的内核…

【Linux】为 VMware 的 Linux 系统(CentOS 7)设置静态IP地址

文章目录 准备工作查看 子网掩码 和 网关IP确认准备设置的虚拟机端口没有被占用 调整设置编辑配置文件配置文件说明 完成配置&#xff0c;准备测试使用命令终端连接服务器 我是一名立志把细节说清楚的博主&#xff0c;欢迎【关注】&#x1f389; ~ 原创不易&#xff0c; 如果有…

redis--消息队列

分类 生产者消费模式 发布者订阅模式 生产者消费模式 在生产者消费者(Producer/Consumer)模式下&#xff0c;上层应用接收到的外部请求后开始处理其当前步骤的操作&#xff0c;在执行完成后将已经完成的操作发送至指定的频道(channel)当中&#xff0c;并由其下层的应用监听…

开发公众号自定义菜单之创建菜单

文章目录 申请测试账号换取Token接口测试提交自定义菜单查看效果校验菜单配置清空菜单配置结束语 申请测试账号 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?actionshowinfo&tsandbox/index 或 得到appid和secret 换取Token 使用appid和secret换取token令牌…

嵌入式实时操作系统笔记1:RTOS入门_理解简单的OS系统

今日开始学习嵌入式实时操作系统RTOS&#xff1a;UCOS-III实时操作系统 本次目标是入门RTOS&#xff0c;理解多任务系统...... 本文只是个人学习笔记&#xff0c;基本都是对网上资料的整合...... 目录 STM32裸机与RTOS区别&#xff1a; 裸机中断示例&#xff1a; RTOS对优先级…

飞鸡:从小训练飞行的鸡能飞行吗?为什么野鸡能飞吗?是同一品种吗?今天自由思考

鸡的飞行能力在很大程度上受到其生理结构的限制。尽管鸡有翅膀&#xff0c;但与能够长时间飞行的鸟类相比&#xff0c;鸡的翅膀相对较小&#xff0c;且胸部肌肉较弱。再加上鸡的身体较重&#xff0c;这些因素共同限制了鸡的飞行能力。通常&#xff0c;鸡只能进行短暂的、低空的…

Redis简介与安装到python的调用

前言 本文只不对redis的具体用法做详细描述&#xff0c;做简单的介绍&#xff0c;安装&#xff0c;和python代码调用详细使用教程可查看一下网站 https://www.runoob.com/redis/redis-tutorial.html https://pypi.org/project/redis/ 官方原版: https://redis.io/ 中文官网:…

【698协议】帧校验算法

698协议&#xff0c;帧校验算法 帧格式 帧校验范围 校验算法 #include "fcs16.h" /* * u16 represents an unsigned 16-bit number. Adjust the typedef for * your hardware. * Drew D. Perkins at Carnegie Mellon University. * Code liberally borrowed from M…

GB报文中的Cseq值的注意点

一、 问题现象 【问题现象】NVR使用GB接三方平台发现倍速回放时&#xff0c; 【现场拓扑】现场拓扑如下 &#xff08;1&#xff09; NVR侧使用家用宽带的方式&#xff0c;通过国标跨公网接入三方平台。 图1.1&#xff1a;网络拓扑 二、 抓包分析 INVITE sip:420000004013200…

异步获取线程执行结果,JDK中的Future、Netty中的Future和Promise对比

JDK中的Future和Netty中的Future、Promise的关系 三者源头追溯 Netty中的Future与JDK中的Future同名&#xff0c;但是是两个不同的接口。Netty中的Future继承自JDK的Future&#xff0c;而Promise又对Netty中的Future进行了扩展。 JDK中的Future源自JUC并发包&#xff1a; Net…

【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串

【LeetCode刷题】Day 7 题目1&#xff1a;209.长度最小的子数组思路分析&#xff1a;思路1&#xff1a;暴力枚举 O(N^2^)思路2&#xff1a;滑动窗口 O(N) 题目2&#xff1a;3. 无重复字符的最长子串题目分析&#xff1a;思想1&#xff1a;暴力枚举哈希表O(N^2^)思想2&#xff1…

鹏特资本进入中国市场具有以下一些优势

1. 带来资金&#xff1a;补充国内资金缺口&#xff0c;为企业发展和项目建设提供重要的资金支持。 2. 先进技术和管理经验&#xff1a;有助于推动技术创新和管理水平提升&#xff0c;促进产业升级和优化。 3. 促进竞争&#xff1a;激发国内市场活力&#xff0c;促使本土企业不…

Spring Cloud 项目中使用 Swagger

Spring Cloud 项目中使用 Swagger 关于方案的选择 在 Spring Cloud 项目中使用 Swagger 有以下 4 种方式&#xff1a; 方式一 &#xff1a;在网关处引入 Swagger &#xff0c;去聚合各个微服务的 Swagger。未来是访问网关的 Swagger 原生界面。 方式二 &#xff1a;在网关处引…

软件设计师笔记2

文章目录 软考知识点总结1. 计算机组成原理网络与信息安全数据结构与算法AOE网 编译原理操作系统软件设计软件测试数据库计算机软件产权其它 软考知识点总结 1. 计算机组成原理 cpu控制器&#xff0c;专门产生指令操作&#xff0c;送到计算机各个部位执行处理 DMA&#xff08…

ISCC2024个人挑战赛WP-WEB

&#xff08;非官方解&#xff0c;以下内容均互联网收集的信息和个人思路&#xff0c;仅供学习参考&#xff09; 还没想好名字的塔防游戏 GET /world.js HTTP/1.1 Host: 101.200.138.180:17345 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,i…

LeetCode题练习与总结:二叉树的层序遍历Ⅱ--107

一、题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[…

嵌入式进阶——LED呼吸灯(PWM)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 PWM基础概念STC8H芯片PWMA应用PWM配置详解占空比 PWM基础概念 PWM全称是脉宽调制&#xff08;Pulse Width Modulation&#xff09…

C++笔试强训day33

目录 1.跳台阶扩展问题 2.包含不超过两种字符的最长子串 3.字符串的排列 1.跳台阶扩展问题 链接https://www.nowcoder.com/practice/953b74ca5c4d44bb91f39ac4ddea0fee?tpId230&tqId39750&ru/exam/oj 我是用动态规划解决的&#xff1a; #include <iostream>…

一文读懂:http免费升级https

背景&#xff1a; 随着现在全民网络安全意识的日益提升&#xff0c;各个网站需要实现的https数量也随之提升&#xff0c;那么如何将原本网站的http访问方式升级为https呢&#xff1f; 该内容为如何免费将网站的http访问升级为https访问 论https的加密逻辑&#xff1a; 步骤 …