【对线程的初认识和初步理解与平衡堆栈】Youngter-drive

查壳有壳脱壳ida

进入到函数main_0

youngter-drive01

第一个函数已经被我改过名称,里面是一个输入函数


CreateMutexW是一个Windows API函数,用于创建命名或未命名的互斥体(Mutex)对象。互斥体是一种同步对象,允许多个线程==同步==访问共享资源,确保一次只有一个线程可以访问该资源

CreateThread是一个 Windows API 函数,用于创建一个新的线程。它允许你在==一个进程中并发执行多个线程==每个线程可以==独立==运行不同的代码

CloseHandle是一个 Windows API 函数,用于关闭一个内核对象的句柄。


跟进StartAddress

startaddress

这里执行完encp函数会暂停100秒

跟进sub_9E119F

sub_9E119F


StartAddress运行完暂停后运行sub_9E119F

sub_9E119F它只有一个减减的功能,然后暂停给100s

sub_9E119F暂停时,此刻StartAddress开始进行操作

即为当TABLE是奇数时运行加密;当TABLE时偶数不进行加密保留原来状态

进入encp(已经改过名称)

这里需要平衡堆栈消去红名,按照这个视频做:https://www.bilibili.com/video/BV1V84y1j7rS/?spm_id_from=333.880.my_history.page.click&vd_source=1c1b392be21faf2076e99a04a9cb6b82

encp

这就是加密,大小字符转换和在预定的字符串寻址

结合上面的线程操作可得出脚本

1
2
3
4
5
6
7
8
9
10
11
12
txt = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
enc = 'TOiZiZtOrYaToUwPnToBsOaOapsyS'
flag = " "
for i in range(29):
if i%2 == 0:
flag += enc[i]
else:
if enc[i].isupper():
flag += chr(txt.find(enc[i]) + 96)
else:
flag += chr(txt.find(enc[i]) + 38)
print(flag)

但是会少一个字节,因为TABLE是29,在循环的时候是处理了30个字符

而密文只有29位所以要猜

最后猜的出的是要在脚本得出的flag后加上个E