ransomware ctf逆向分析

题目来源于网上,具体未知。

运行软件后如图:
在这里插入图片描述
看起来很吓人有没有?

实际点击页面后,发现只是一张图片,输入框可以输入,输入完成后,只有Decrypt可以点击。
在这里插入图片描述
先查下壳有没有,发现没有,发现编译器是VS2017。
在这里插入图片描述
使用IDA打开,IDA首先找到了WinMain入口。
在这里插入图片描述
因为是GUI程序, 所以入口点是WinMain。不过目前关注的重点不是在这里,先要找到合适的位置下断点。

GUI程序存在输入框,所以寻找下获取输入框内容的API函数,这里找到了GetDlgItemTextA,下断点调试后发现确实是。

在IDA里找交叉引用的地方找到GetDlgItemTextA,F5翻译下。
在这里插入图片描述
很清楚显示为对话框过程函数,这里应该就是主逻辑了。
在这里插入图片描述
来到下面GetDlgItemTextA调用处
在这里插入图片描述
大概的处理流程为先获取输入框的内容,接着判断输入字符串的长度是不是18个字节。

如果是则继续往下执行,如果不是则直接返回错误并弹窗。

这里我们跟进等于18的流程里,sub_4013B0函数为复制输入框内容的值到Dst空间。

sub_401010函数为算法核心部分,如果返回值为1则成功,返回为0则失败弹窗。

双击进入sub_401010里,查看源汇编指令可知a1这里翻译错了,应该为String。
在这里插入图片描述
在这里插入图片描述
这里的处理流程为,将String每个字节与0xCC进行异或运算的结果再赋值给源地址。

之后再每个字节与byte_404000地址空间的每个字节进行比较,如果每个都相等则最后返回值为1。

所以我们可以写出注册机,逆算法。

# coding=utf-8
key = [
  0xFD, 0x93, 0xA8, 0x83, 0x93, 0xA2, 0xFC, 0xB8, 0x93, 0xBB,
  0x8D, 0xA2, 0xA2, 0xAD, 0x93, 0xAF, 0xBE, 0xB5
]

flag = ""

for i in range(len(key)):
    flag += chr(key[i] ^ 0xCC)
print(flag)

在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章