- 来源:Root-Me
- 题型:Cracking
- 题目:PE DotNet - 0 protection
- 分数:10 Points
水题。
开启挑战后,下载了一个 ch22.exe
文件,运行后是一个 UI 程序。
随意输入一个 password ,点击 Valider
按钮后,提示密码错误。
使用 IDA 打开这个文件,尝试反汇编(注意使用 Microsoft.NET. assembly 方式打开):
从左侧 Function name
可以找到 UI 程序每个组件模块的代码。
由于校验密码的行为是在我们点击按钮后触发的,因此可以猜测真正的密码被硬编码到这个点击行为的代码里面。
因此现在的目标应该是找到 Valider
按钮点击的事件代码。
而在 Function name
只有一个模块名为 CrackMe.Form1__Button1_Click
,双击查看这个模块代码,可以发现这个模块调用了一个 compare
函数,而根据 compare
的结果,代码会流向两个分支,一个是验证密码失败,一个是验证密码成功,说明这就是目标代码。
不难注意到在 compare
函数前面有一个常量 DotNetOP
,很容易就会猜到这是硬编码到代码里面的真正密码。
尝试使用这个密码验证,挑战成功。
答案下载
flag 下载后的 flagzip 的文件需要手动更改后缀为
*.zip
,然后解压即可(为了避免直接刷答案)