【BUUCTF】Youngter-drive

Youngter-drive

UPX脱壳

分析

image-20241028214938347

这是一道多线程题,先来分析这个main函数

::hObject = CreateMutexW(0, 0, 0); : 创建一个互斥锁,使两个双线程能够使用共享资源

hObject = CreateThread(0, 0, StartAddress, 0, 0, 0); Thread = CreateThread(0, 0, sub_41119F, 0, 0, 0); :创建两个线程

while ( dword_418008 != -1 ) : 一直循环到dword_418008为-1结束程序

分析双线程程序

跟进StartAddress

void __stdcall __noreturn StartAddress_0(int a1)
{
  while ( 1 )
  {
    WaitForSingleObject(hObject, 0xFFFFFFFF);
    if ( dword_418008 > -1 )
    {
      sub_41112C(&Source, dword_418008);
      --dword_418008;
      Sleep(0x64u);
    }
    ReleaseMutex(hObject);
  }
}

Sleep(0x64u); :先第一个程序运行后,sleep,然后马上运行第二个进程,然后sleep,又运行第一个,循环

sub_41119FStartAddress的区别就是第一个调用了sub_41112C函数对字符串进行了加密

image-20241028231153385

这就是主加密程序

简单的字母替换程序

编写脚本

key = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
enc = 'TOiZiZtOrYaToUwPnToBsOaOapsyS'
flag = ''
for i in range(29):
    if i % 2 == 0:
        flag += enc[i]
    else:
        if ord(enc[i]) <= ord('Z'):
            flag += chr(key.index(enc[i]) + 96)
        else:
            flag += chr(key.index(enc[i]) + 38)
print(flag)

ThisisthreadofwindowshahaIsES

但这个flag不完整,最后一位也不知道咋搞,只能爆破了

最后flag:ThisisthreadofwindowshahaIsESE

posted @ 2024-10-28 23:20  结城希亚  阅读(5)  评论(0编辑  收藏  举报