查壳
脱壳
IDA打开,找到main函数
值得注意的是这个CreateMutexW函数
进程在执行过程中可能创建多个新的进程。创建进程称为父进程,而新的进程称为子进程。每个新进程可以再创建其他进程,从而形成进程树。
详细可以看进程的创建和终止
这里创建了两个进程
第一个线程h0bject会执行StartAddress函数,第二个线程v2执行sub_41119f函数
然后挨个分析打开StartAddress函数
加密函数:这是将字符串进行了替换,当字符是大写字母时,替换为off_418000处-38,小写则替换后-96
这时回过头来看第二个线程
发现没有处理任何数据只是把原来的字符串向前移动
注意数据是从后向前处理的,查看数据大小发现是0x1d,就是29个,然后分析就行
两个线程同时工作的,所以要交替处理数据,也就是在奇数位时加密,偶数位时不变,
s = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm' #off_418000
d = 'TOiZiZtOrYaToUwPnToBsOaOapsyS' #off_418004
f = ''
for i in range(len(d)):
if i%2 == 0:
f = f + d[i]
else:
if(d[i].isupper()):
f = f + chr(s.find(d[i])+96)
else:
f = f + chr(s.find(d[i])+38)
print(f)
在比对时只比对了29位,所以得出的flag少了一位,所以需要再加一位提交。