D3CTF_d3hell

Posted by Humb1e on 2023-05-09
Estimated Reading Time 1 Minutes
Words 464 In Total
Viewed Times

D^3CTF_d3hell

一道exe结合dll的题目

首先需要分析dll,进去一顿乱点发现了一个tea加密

image-20230509210712183还有在text段的一堆乱码

于是就猜测有smc加密的,但tcl后来才知道有天堂之门

但是这里和一般的天堂之门不一样,是从64位转到32位的天堂之门

image-20230509210836649

这里的retf就是比较显著的天堂之门的特征,所以之后的代码就是32位的

需要dump出去用ida32打开查看

因为菜鸡不会写idapython脚本dump数据,就shift+E导出了

但是要注意shift+E直接导出是ascii码…

image-20230509211017364

选这个raw bytes选项才能保存exe

保存之后打开就能发现一个smc加密了

没法F5很烦,摁看汇编

image-20230509211118155

里面的666C169A对照了原程序就是这段汇编之后的地址,所以这段汇编是对后面代码的一个smc解密

翻译过来的逻辑大概是这样的

1
2
for i in range(1,0x249):
[addr+i]^=[addr+i-1]

写一个idapython脚本就是

1
2
3
4
5
6
7
import idc 

addr=0x666C169A

for i in range(1,0x249):

​ idc.patch_byte(addr+i,idc.get_wide_byte(i+addr)^idc.get_wide_byte(i-1+addr))

image-20230509212012213

这就是解密后的代码

image-20230509220041332

code中存放的是time()

v8是time()的地址

所以这段代码是为了check time()源码有没有被修改

image-20230509220134671

这里检测是否是调试状态,如果是或者sleep()被修改那么会将一些关键的数值替换掉

image-20230509220210440

这里实现了tea解密并且后面的0x405020和0x405060分别对应着exe中大数和最后异或的re_table的地址

这个dll和exe之间是通过地址定位的

image-20230509231255715

…一开始写tea脚本跑了半天跑出来不对…

后来发现xdbg能直接调试看image-20230509231800327

才发现自己有反反调的插件…

然后直接找网站大数分解一下就完事了


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !