DASCTF-FATE-Reverse
DASCTF-FATE-Reverse
¶0x00-Crackme
¶考点
MFC逆向、反调试、Wincrypt
¶分析
看exe文件的图标是MFC,于是去网上搜了一下MFC逆向,发现了这篇文章
https://blog.csdn.net/Sanky0u/article/details/81568483
1000和1001对应两个输入框
能定位到输入框
对函数交叉引用发现找不到,因为这里使用的是this指针调用(可能)
MFC主函数是WinMain
然后动调半天看晕了
字符串搜索回显的字符串Wrong,直接明文存储
如果下次有机会出这样的题一定把回显字符串加密(
流程分析
这里都是一些API函数,就不过多介绍了
¶key加密
关键的是
不同的值对应了不同的加密
所以就是将我们输入的key分为两个长度为四的字符串,然后分别进行MD5和SHA1加密
¶flag加密
先把整段key进行md5加密
然后将加密后的key传入最终的加密函数中,生成MD5的哈希值,传入生成Key
看到这个参数,查了一下
https://docs.microsoft.com/zh-tw/windows/win32/seccrypto/alg-id?redirectedfrom=MSDN
发现对应AES-128,也就是生成AES-128的密钥
然后调用CryptEncrypt函数加密
¶反调试-ZwSetInformationThread
我们需要动态调试提取数据,但是在刚才的位置设置断点会发现输入后直接结束,应该是有反调试
https://ctf-wiki.org/reverse/windows/anti-debug/zwsetinformationthread/
对比各种反调试和去IMPORT找导入函数,最终确定是ZwSetInformationThread
反反调试在该文中也有介绍,就不再多说了
绕过后就可以提取数据进行解密了
¶得到key
MD5
SHA1
¶解密flag
这里直接提取数据拿去AES解密有问题(提取出来调用CryptDecrypt也不行),还是FallW1nd师傅强,想到直接模拟生成哈希值的过程,然后最后调用CryptDecrypt即可
EXP如下
1 |
|
¶附录
还有这种调用加密,有兴趣可以去看看-http://ctf.hsc2019.site/challenges#DRIVER-58
¶0x01-FakePica
¶考点
安卓加壳、AES
¶分析
hgame-week3-re也有脱壳,这里把工具链接贴一下
https://github.com/CodingGay/BlackDex
具体分析加壳与脱壳直接看我之前写的文章
https://gift1a.github.io/2022/02/13/hgame2022-week3-re/?highlight=梆
¶加密分析
找到Mainactivity
数据提取
1 | unsigned char content[] = {-114, 95, -37, 127, -110, 113, 41, 74, 40, 73, 19, 124, -57, -88, 39, -116, -16, -75, -3, -45, -73, -6, -104, -6, -78, 121, 110, 74, -90, -47, -28, -28}; |
解密直接去在线网站即可
¶0x02-奇怪的交易
¶考点
ELF-python打包、算法
¶分析
还好加了Lu1u师傅,刚好看到
https://lu1u.xyz/2022/03/28/RE_Challenge/
objcopy --dump-section pydata=pydata.dump 1
sudo snap install pyinstxtractor
pyinstxtractor pydata.dump
得到pyc文件,修补好文件头发现uncompyle6不了(因为是3.10的),寄,只能嗯读python字节码
¶翻译字节码
1 | from cup import* |
翻译出来大概是这样的
这里要关注跳转的条件是not还是true
encrypt函数是cup库里面的一个函数,当时我忽略了from cup import,导致一直识别不出来encrypt函数是什么*
过程差不多都可以读出来,那个for循环就是将每四个字符转为一个int,由于不会python,很多都是自己写代码试出来的(,剩下的蹲wp了
整个过程就是先进行RSA加密,然后调用encrypt函数加密
¶tip
看了https://blog.t0hka.top/index.php/archives/36/才知道可以使用在线工具
https://tool.lu/pyc/,效果差不多,不过还是需要自己修复一下
¶pyinstaller加密
https://bbs.pediy.com/thread-271253.htm
我们可以在解包的时候发现两个文件,一个是加密的密钥,一个是加密的过程
接下来只需要对PYZ文件解包(同样使用pyinxtxtractor),得到加密后的cup库即可
解密脚本
1 | #!/usr/bin/env python3 |
反编译得到cup库的内容
1 | #!/usr/bin/env python |
可以看出是xxtea加密
¶解密
得到rsa的密文c
1 |
|
解RSA,怪我不是密码🤠,直接贴t0hka师傅的脚本了
1 | import gmpy2 |