Youngter-drive

2024-05-26 18:04
文章标签 drive youngter

本文主要是介绍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

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

你再看这里

不是一模一样?

这篇关于Youngter-drive的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005196

相关文章

UVA 10542 - Hyper-drive(容斥原理)

UVA 10542 - Hyper-drive 题目链接 题意:给定一些个d维的方块,给定两点,求穿过多少方块 思路:容斥原理,每次选出一些维度,如果gcd(a, b),就会穿过多少点,对应的就减少穿过多少方块,所以最后得到式子d1 + d2 + .. dn - gcd(d1, d2)..+gcd(d1, d2, d3)... 代码: #include <cstdio>

xilinx xdma drive 传输8MB以上数据受限的问题

当传输超过8 MB数据时报错error code=1359, #define XDMA_MAX_TRANSFER_SIZE  (8UL * 1024UL * 1024UL) 可以修改成: #define XDMA_MAX_TRANSFER_SIZE  (80UL * 1024UL * 1024UL) VS2019 + WDK环境的搭建 先准备好VS + WDK的驱动开发环境。需要下

chrome和drive安装包路径

Chrome for Testing availability (googlechromelabs.github.io) 下载Stable下面的包哈

Google Drive资源下载(附DPED dataset百度云链接)

最近在研究使用深度学习进行照片增强,主要是参考文献《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》。文章给出的GitHub工程使用了DPED dataset数据集,无奈数据集都存放在Google的云端硬盘上,总共约为60G。使用浏览器下载都是小水管,也就100K左右的速度,而且没下多少M内容就下

Drive Scope for Mac:硬盘健康监测分析工具

Drive Scope for Mac是一款专为Mac用户设计的硬盘健康监测与分析工具,致力于保障用户的数据安全。这款软件功能强大且操作简便,能够实时检测硬盘的各项指标,帮助用户及时发现并解决潜在问题。 Drive Scope for Mac 1.2.23注册激活版下载 Drive Scope能够深入检测硬盘的温度、SMART状态、磁盘健康度等关键参数,提供详细的硬盘健康报告。同时,它还支

群晖虚拟机搭建Synology Drive并实现Obsidian笔记异地多端同步

文章目录 一、简介软件特色演示: 二、使用免费群晖虚拟机搭建群晖Synology Drive服务,实现局域网同步1 安装并设置Synology Drive套件2 局域网内同步文件测试 三、内网穿透群晖Synology Drive,实现异地多端同步Windows 安装 Cpolar步骤: 四、实现固定TCP地址同步 一、简介 [上期教程介绍了如何免费多端同步Zotero

如何使用群晖Synology Drive结合cpolar内网穿透实现同步Obsidian笔记文件

文章目录 一、简介软件特色演示: 二、使用免费群晖虚拟机搭建群晖Synology Drive服务,实现局域网同步1 安装并设置Synology Drive套件2 局域网内同步文件测试 三、内网穿透群晖Synology Drive,实现异地多端同步Windows 安装 Cpolar步骤: 四、实现固定TCP地址同步 一、简介 ​ 上期教程介绍了如何免费多端同步Zoter

CF 1490G - Old Floppy Drive 思维,二分

题目链接 https://codeforces.com/problemset/problem/1490/G 题意 给定数组a(如1,2,2,3),构造一个A数组,为a数组的循环拼接(如1,2,2,3,1,2,2,3…)。m个询问,对于每个询问q,输出最小的i,使得A数组前i+1个数字的和大于等于q 思路 我们需要如下几个数组 sum:a的前缀和 max_:a前缀和的最大值 易知max_

苹果收购吴恩达旗下 Drive.ai;OneDrive 上存储的恶意软件激增

(给技术最前线加星标,每天看技术热点) 转自:开源中国、solidot、cnBeta、腾讯科技、快科技等 【技术资讯】 0、研究发现微软 OneDrive 上存储的恶意软件突然大幅增加 微软OneDrive用于托管恶意文件的使用率显着上升。根据FireEye报告显示,微软OneDrive上一季度托管恶意文件的用户数量激增60%以上,而此前仅上升了一位数百分点。据FireEye称

我的电脑(资源管理器)中的A360 Drive怎么删除

在电脑中,图标自然是越整洁越好,把有用的留下,没用的删除更是很多人的整理思路。 在我的电脑(资源管理器)中,总是会有各种各样的快捷方式,或可以直接删除,或可以在软件设置中删除。但有一些就比较复杂,比如A360 Drive。 在电脑中安装了AutoCAD之后,便会在我的电脑(资源管理器)中多出来一个A360 Drive,这是方便用户访问存储、协作工作空间和云服务。 今天我们就来干掉它。 按Wi