
首先查壳发现是upx壳,直接上工具脱壳
upx -d E:\桌面\7289daa8-a5d5-430e-87a0-92ce805d8f15\Youngter-drive.exe

打开是这样的程序
拉入IDA进行分析

找到主函数,发现创建了两个线程,一个StartAddress,一个sub_41119F,进去看看

这里是对我们的flag进行操作,主要函数是sub_41112C

会出现这种情况,原因是堆栈不平衡利用ida调堆栈就好

找到411A04处,在pop ebp上按alt+k

将0x4改为0x0

这样就可以进入函数分析了
这里是将输入的大写字母-38为off_418000的下标进行赋值,将小写字母-96为off_418000的下标进行赋值

看到另一个线程函数,这个函数使对字符串的加密是隔一个字加密,也就是在奇数位时加密,偶数位时不变
附上我拙劣的脚本
cipher = 'TOiZiZtOrYaToUwPnToBsOaOapsyS'
list1 = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
flag = ''
for i in range(29):
if(i%2==0):
flag += cipher[i]
else:
if(list1.find(cipher[i])>=1 and list1.find(cipher[i])<=26):
flag += chr(list1.find(cipher[i])+96)
else:
flag += chr(list1.find(cipher[i])+38)
print(flag)
本文详细介绍了如何使用UPX脱壳工具处理一个程序,并通过IDA进行静态分析。作者探讨了程序中的主函数和两个关键线程,特别是对一个涉及字符串加密的函数进行了深入分析。加密算法特点是隔一个字符加密,对于大写字母减38,小写字母减96作为索引进行赋值。还提供了一个简单的脚本来解密给定的密文。
972

被折叠的 条评论
为什么被折叠?



