ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
**硬编码序列号:** > 不依赖于用户名来生成,总是由固定的字符和数字构成的固定不变的字符串 * * * * * 首先`Ctrl+N`查看API函数列表 `GetDlgItemTextA`获取用户输入的序列号 `MessageBoxA`提示输入的序列号正确,错误与否 我们给这两个API函数设置断点 然后,按F9键,运行CrackMe程序 在输入框输入wintry,然后单击确认验证 * * * * * 断在了GetDlgItemTextA处,该函数用于获取用户输入的序列号, 并且该函数的Buffer参数是用于存放获取到的序列号的缓冲区首地址 在该参数上单击鼠标右键选择数据窗口跟随。 当前缓冲区为空,因为该API函数还没有执行 Ctr+F9执行到函数返回。 该函数将用户输入的序列号保存到了缓冲区中 * * * * * F7键单步返回到主程序中 看到比较和条件跳转指令,分别跳到正确和错误两个分支 往上有两条指令,一条给EBX寄存器赋值,一条和EBX比较 其中被赋值的值就是我们输入的序列号,然后和下边正确的序列号比较、 选择在数据窗口中跟随内存地址,对比寄存器,就能找到正确序列号了。 * * * * * 还有一个简单的方法, 直接查找参考字符串,跟进正确活错误提示语句 向上寻找关键Call,字符串比较函数等。。。 例子: https://pan.baidu.com/s/1cO4vhODN388kwnyX9evrKQ https://pan.baidu.com/s/1xIWFMBL79xVMeWWIwkhmNA * * * * * **再来看一个更加复杂的硬编码的CrackMe** 这个CrackMe并不是序列号直接进行比较 有一个简单的算法 https://pan.baidu.com/s/1QBz_dF9v1oz3RFYZ2zApIw