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

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

你再看这里

不是一模一样?

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

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

相关文章

Nginx 的原理解析 worker 配置及相关问题 -细节狂魔

文章目录 前言Nginx 的最基本的执行过程&#xff08;master & worker&#xff09;worker 是如何进行工作的 一个 master 和 多个 woker 有哪些好处1、可以使用 nginx 热部署2、节省资源 && worker 进程之间互不影响 && nginx 服务不会中断 woker 设置多少才…

【知识图谱】探索攻略:基础、构建、高级应用与相关论文方向

【知识图谱】相关文章汇总 写在最前面一、什么是知识图谱&#xff1f;二、相关历史文章代码实现&#xff1a;简单的知识图谱可视化知识图谱前身&#xff1a;信息抽取知识图谱应用1&#xff1a;社交网络分析知识图谱应用2&#xff1a;威胁情报挖掘知识图谱应用3&#xff1a;Code…

Python小游戏——俄罗斯方块

文章目录 项目介绍环境配置代码设计思路1.初始化和导入库&#xff1a;2.定义颜色和屏幕尺寸&#xff1a;3.定义游戏逻辑&#xff1a;4.游戏循环&#xff1a; 源代码效果图 项目介绍 俄罗斯方块游戏是一款经典的益智游戏&#xff0c;玩家通过旋转和移动各种形状的方块&#xff…

【NumPy】关于numpy.clip()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

Gradle筑基——Gradle Maven仓库管理

基础概念&#xff1a; 1.POM pom:全名Project Object Model 项目对象模型&#xff0c;用来描述当前maven项目发布模块的基础信息 pom主要节点信息如下&#xff1a; 配置描述举例&#xff08;com.android.tools.build:gradle:4.1.1&#xff09;groupId组织 / 公司的名称com.…

初学Echart

创建一个html文件 1.引入 点击链接----快速上手网址&#xff1a;快速上手 - 使用手册 - Apache ECharts 复制这一串【这个是引入echart路径】 引入到这里 2.使用 我们在上一步---点击返回--往下翻---找到完整代码--复制黏贴 复制粘贴后--总体长这样 <!DOCTYPE html> &…

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型 前言 整了一个在C# Winform中调用文生图Stable Diffusion XL的小程序&#xff0c;基于百度智能云千帆平台 步骤 如何注册百度智能云和创建应用&#xff0c;获取API 密钥等和在之前的博客中基本相同&#…

[C++]debug介绍+debug时如何查看指针指向内存处的值

一、简介 预备工具和知识&#xff1a;使用使用VSCode使用Debug。 本文简介&#xff1a;本文将简要介绍debug中Continue&#xff0c;Step Over&#xff0c;Step Into和Restart的功能。并介绍如何在debug时查看动态内存地址&#xff08;指针&#xff09;的值&#xff1b; 二、D…

连公司WiFi后,无法访问外网,怎么回事,如何解决?

文章目录 封面问题描述问题探究什么是DNS&#xff1f;分布式&#xff0c;层次数据库如何理解分布式&#xff1f;如何理解层次&#xff1f; 本地DNS服务器迭代查询&#xff0c;递归查询DNS缓存参考资料 封面 问题描述 从甲方项目组返回公司后&#xff0c;我习惯性连上公司WiFi&…

视频号小店去哪里找货源?最全货源渠道分享!

大家好&#xff0c;我是电商糖果 视频号小店因为是这两年电商行业新出来的黑马&#xff0c;吸引着不少商家入驻。 入驻了商家中很多都没有自己的货源渠道。 他们基本都是从无货源开始起步&#xff0c;后期通过积累资源&#xff0c;慢慢搭建属于自己的货源渠道。 可是渐渐的…

算法的时间与空间复杂度

算法是指用来操作数据、解决程序问题的一种方法。对于同一问题&#xff0c;使用不同的算法&#xff0c;也许最终结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别。 那我们该如何去衡量不同算法之间的优劣呢&#xff1f;主要还是从算法所占用的【时间】和…

5.26机器人基础-空间描述和变换-总结

非目录 方便我找 重点 逆解 位姿矩阵的几何意义 实际坐标需要除以比例因子才能得到 比例因子的好处&#xff1a;在计算机的储存更加简单方便&#xff0c;例如x,y,x原先很大时&#xff0c;等比例改变 位姿坐标的齐次变换&#xff1a;左乘齐次坐标 从端点到末端&#xff0c…

集合竞价选股策略实战测试

2.3.2版本发布的集合竞价选股策略是网友吴PSYP提供的&#xff0c;团队按照策略实现的选股算法&#xff0c;最近半个月对策略进行的实战测试&#xff0c;从集合竞价选股开始&#xff0c;到股票收盘&#xff0c;收盘价格大于集合竞价价格&#xff0c;算作盈利&#xff0c;测试结果…

Vision Mamba论文阅读(主干网络)

这几天被Mamba刷屏了&#xff0c;又由于本人是做视觉方面任务的&#xff0c;固来看看mamba在视觉上的应用。 今天分享的是Vision Mamba: Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 论文网址&#xff1a;https://arxiv.or…

火山引擎“奇袭”阿里云

图片&#xff5c;电影《美国队长3》剧照 ©自象限原创 作者丨程心 编辑丨罗辑 大模型价格战&#xff0c;已经不是什么新闻。 从OpenAI发布GPT-4o&#xff0c;将API价格下调50%&#xff0c;并宣布面向普通用户免费开始&#xff0c;就标志着大模型的竞争从性能进入到了成本…

【机器学习】期望最大化(EM)算法

文章目录 一、极大似然估计1.1 基本原理1.2 举例说明 二、Jensen不等式三、EM算法3.1 隐变量 与 观测变量3.2 为什么要用EM3.3 引入Jensen不等式3.4 EM算法步骤3.5 EM算法总结 参考资料 EM是一种解决 存在隐含变量优化问题 的有效方法。EM的意思是“期望最大化&#xff08;Exp…

Aloha机械臂的mujoco仿真问题记录

今天在测试ACT代码时&#xff0c;遇到了仿真中的机械臂无法摆放正确的姿势来抓去红色方块。 后来经过测试&#xff0c;发现应该是python包的版本问题有误&#xff0c;下面记录下正确的包版本&#xff1a; 官方给出的包&#xff1a; conda create -n aloha python3.8.10 conda…

vue3 ts问题 找不到模块“@/views/home/index.vue”或其相应的类型声明。

1. 找不到模块“/views/HomeView.vue”或其相应的类型声明 今天帮同事看了一个问题&#xff0c;他尝试用vitevue3tspinia创建项目&#xff0c;结果刚上来就遇到这么一个问题 2. 解决办法 出现这个问题的原因就是&#xff1a;ts只支持导出导入模块&#xff0c;但是vue不是模块…

leetcode 1631. 最小体力消耗路径 二分+BFS、并查集、Dijkstra算法

最小体力消耗路径 题目与水位上升的泳池中游泳类似 二分查找BFS 首先&#xff0c;采用二分查找&#xff0c;确定一个体力值&#xff0c;再从左上角&#xff0c;进行BFS&#xff0c;查看能否到达右下角&#xff0c;如果不行&#xff0c;二分查找就往大的数字进行查找&#xff…

web及网络基础图文详解

目录 1.1TCP/IP 协议族 1.2TCP/IP 的分层管理 1.3TCP/IP通信传输流 1.4 与 HTTP 关系密切的协议 : IP、TCP 和 DNS &#xff08;1&#xff09;负责传输的 IP协议&#xff08;网络层&#xff09; &#xff08;2&#xff09;确保可靠的 TCP协议&#xff08;传输层&#xff…