Loading...

文章背景图

easycrack

2026-05-05
6
-
- 分钟

下载地址

https://crackmes.one/crackme/699b27efc1756e2381cffa4d

解压密码

crackmes.one

难度

简单

解题步骤

选中main函数

可以看到这里的用户输入部分没有使用局部变量,后续checkPassword没有传参,所以可以肯定是将用户输入传到了全局变量,后续直接在checkPassword调用

此时采用动态分析,给checkPassword打上断点

点击进入checkPassword,在比较函数位置打上断点

进入到比较函数内部,在判断位置打上断点

继续进入compare函数,这里可以发现最终的比较函数用的是memcmp,给memcmp函数打上断点

F6或Launch运行,如果担心安全性可以在虚拟机运行

点击运行图标

出现输入密码框后随便输入密码,点击check后跳转到下一个断点处

一直运行直到进入到出现memcmp

点击变量__s1,出现信息,寄存器在rcx,同理,另一个变量__s2的寄存器在rdx

在Register查看寄存器,为了让两个比较数一定相等,可以直接修改rcx或者rdx寄存器地址(value)

这里Johan直接修改rcx的地址,修改完成后点击继续运行

可以看到程序窗口回显correct,在这道题即使不知道密码,也可以通过动态修改比较参数来达成绕过判断

除此之外,Johan还研究了一下这个题目原本的密码是什么,后面发现这道题是在将密码hash值硬编码在二进制数据内,所以没有运行时候不能直接看到这个数据,程序运行时候系统会把exe内只读数据段加载到内存,所以后续才能从动态调试看到密码的hash值,在动态调试时候去到rdx寄存器的地址,可以看到密码的hash值,用的加密算法是sha256,原密码是password


评论交流

文章目录