考点
- 反调试(sharpOD当我没说)
- wincrypt加密库
0x00 日常查壳
32位的无壳MFC题
0x01 分析主函数
拉进IDA,让IDA跑一会(注意IDA左下角),通过shift + F12找字符串可以找到Success,Crtl + X交叉引用到主函数
不经想起Buu上的CrackRTF,好像还是我写的第一篇Re文章
通过官方的文档可以知道不同数字对应不同加密,比如这个MD5加密
0x02 GetData
那么直接动调拿取数据!
找到我们的目标方法一个方法是算偏移地址(方法很多不一一举例)
首先得知我们目标函数的在IDA的起始地址是4031E0,拉到最上面知道IDA基地址是401000
4031E0 - 401000 = 21E0得到函数的偏移地址
我OD里的程序领空的起始地址是8E1000
相加可得 8E1000 + 21E0 = 8E 31E0,即得主函数地址,下断点开跑
可以通过IDA的压栈地址,在OD里找到我们的数据(中间注意input是32位key是8位别跳飞)
反调试 ZwSetInformationThread
所以为什么没在IDA提,因为还要过个这个,打比赛时间比较少就没什么时间找到底IDA哪里出问题了
当然赛后复现要认真看每一处考点,看一位师傅的博客得知是这个反调试(通过反复调试各位自己也可以找到
但我在IDA的导入函数一直没找到,不过通过字符串搜索找到了,完成是作者自写调用的反调试
那么过他的方法直接patch掉或者该值都可以,可以参考这篇文章
随后即可在IDA调试!
0x03 GetFlag
那么现在问题就是HashAES那个函数了
通过查阅这篇文章可以知道这是生成了AES加密,并且我们的密钥就是我们的key经过了MD5
一个比较好的方法就是模拟HASH值直接Decrypt
把CryptEncrypt改成CryptDecrypt,注意一下数据的类型即可
1 |
|
GetFlag!
(emmm,在想DAS的题要不要录下)
About this Post
This post is written by P.Z, licensed under CC BY-NC 4.0.