zsky 发表于 2020-8-28 00:06

首届钓鱼城杯逆向题 reg 题解

本帖最后由 L15263458908 于 2020-11-7 15:20 编辑

### 首届钓鱼城杯逆向题reg题解

首先下载程序,观察, 通过这个图标可以看出,感觉这个程序并不是普通的C/C++写的EXE程序,而是其他语言打包的



用IDA打开程序,果然,毫无头绪
用010editor打开程序,发现里面找到了关键字符串,然后居然是在资源段

用ResourceHacker打开reg.exe

发现,关键数据是在PRELOAD.MAIN里面,并且可以发现这个程序是用aardio写的,本来想反编译PRELOAD.MAIN来还原源代码来着,结果并没有找到相关aardio反编译的资料 (如果大佬知道怎么反编译的话,请评论留言,感谢!!)

结果只能放弃这种方法,观察PRELOAD.MAIN中的关键字符串,猜测是AES加密,
猜测它最终会调用底层的Win32API ,CryptEncrypt函数
这里先给出两个函数的参数
```
BOOL CryptEncrypt(
HCRYPTKEYhKey,   //密钥句柄
HCRYPTHASH hHash,    //
BOOL       Final,    //
DWORD      dwFlags,//
BYTE       *pbData,//存放要加密的数据
DWORD      *pdwDataLen, //存放要加密的数据的长度
DWORD      dwBufLen   //pbData缓冲区总大小
);
// 加密后, pbData存放加密后的数据,然后pdwDataLen存放的是加密后数据的长度
```
```
BOOL CryptDecrypt(
HCRYPTKEYhKey,//密钥句柄
HCRYPTHASH hHash, //
BOOL       Final,//
DWORD      dwFlags, //
BYTE       *pbData,//加密的数据
DWORD      *pdwDataLen //存放要加密的数据长度
);
// 解密后, pbData存放解密后的数据,然后pdwDataLen存放的是解密后数据的长度
```

在加密的之前,其实还调用了很多其他的API来配置环境,因为那些都与解题无关,所以不再解释
具体的,大家可以参考这2篇文章
https://blog.csdn.net/kamaliang/article/details/6608786
https://www.cnblogs.com/M4ster/p/win_api_aes.html

我们用OD打开程序,在CryptEncrypt函数下断点



输入123


观察参数,pbData是咱们输入的数据,然后直接ctrl +F9,运行到函数末尾


发现数据已经加密完了,然后把数据提取出来,进行base64加密得到
```
import base64

a = b"\x33\x36\x38\xF1\x66\x54\x6C\xBC\x9C\x73\x02\xDE\x9D\x87\x5C\x2E"
c = base64.b64encode(a)
print(c) #MzY48WZUbLyccwLenYdcLg==
```

发现与程序输出的值一模一样


现在就很明确了,我们的思路就是手动patch改汇编来调用CryptDecrypt函数,关于它的参数,只需要改动 pbdata和pdwDataLen就可以了,于是我们把题目给出的
"8QAUFzIzw0gtrLeRUpesiVXTHsNtf+yNFFplxexMhAnJ3ejTeAlPHreByieTh1Gg"进行base64解密,得到
F1 00 14 17 32 33 C3 48 2D AC B7 91 52 97 AC 89
55 D3 1E C3 6D 7F EC 8D 14 5A 65 C5 EC 4C 84 09
C9 DD E8 D3 78 09 4F 1E B7 81 CA 27 93 87 51 A0

然后长度是0X30
进入OD,重新运行程序,还是在CryptEncrypt函数头部下断点,Ctrl + F9运行到末尾
这时,开始修改参数把 pbdata改为上述数据,然后pdwDataLen改为0X30







然后把ESP + 4


参数全部构造完毕
最后开始改汇编,直接改为call CryptDecrypt



F7进去,Ctrl + F9运行到函数末尾,再次观察参数
pbdata已经是解密后的数据了,双击过去,发现解密完成,得到了flag


题目链接
https://wwe.lanzouj.com/iznKWg4jv2h
密码:erpg

digitalhouse 发表于 2020-8-28 08:55

太厲害了

nonamer 发表于 2020-8-28 09:07

多谢大神楼主分享~!

BXb 发表于 2020-8-28 09:08

长见识。

就是那个秋 发表于 2020-8-28 14:52

谢谢大神分享!

xiong779 发表于 2020-8-28 15:44

谢谢大神分享!

寒山远 发表于 2020-8-28 17:02

感谢分享

未央i 发表于 2020-8-28 21:30

感谢分享

__不说 发表于 2020-8-29 17:12

用了半天终于复现了。。不过还只是复现,感觉好多思路还得学习。感谢楼主的WriteUp,对新手真的十分友好!

小朋友呢 发表于 2020-8-29 18:12

大神这个8QAUFzIzw0gtrLeRUpesiVXTHsNtf+yNFFplxexMhAnJ3ejTeAlPHreByieTh1Gg是在程序里面找到的还是从哪里找到的
页: [1] 2
查看完整版本: 首届钓鱼城杯逆向题 reg 题解