x64dbg-硬件编码序列号寻踪一
9unk Lv5

目标程序

程序下载:Leccion 13 HARDCODED 1

解压密码:9unk

任务目标:寻找正确序列号

观察程序

1.jpg

序列号寻踪

运行程序到主模块,右键—>搜索—>当前模块—>字符串

2.jpg

结果如下:

3.jpg

FIACA、Mal Muy MAL(错误)、Muy BIEN(正确)

这里可以看到几个西班牙语言的字符串,其中我们注意到使用到 “FIACA” 这个字符串的反汇编,其中用到了比较指令 cmp,很明显这个字符串应该就是正确的序列号。但是不推荐使用这种方法来定位序列号。

  1. 一般程序中有很多字符串,如果一个一个用肉眼去找是很费时的

  2. 有些假的序列号会故意放在字符串列表中

使用快捷键 “Ctrl+N” 来查找主模块使用的 API 函数,这里可以看到之前我们熟悉的 GetDlgItemTextA(获取输入框字符串) 和 MessageBoxA(消息弹窗)这两个 API。

4.jpg

我们分别左键选择这个两个 API,并按 “F2” 设置断点。

5.jpg

“F9” 运行程序,输入任意序列号,点击 “Verificar” 按钮。此时程序断在 GetDlgItemTextA 入口处。

6.jpg

“Ctrl+F9” 运行程序到返回,此时可以看到 stdcall 窗口中的 GetDlgItemTextA “buffer” 参数值是 “123456”

7.jpg

在 “stdcall” 窗口—>右键 buffer 参数—>在内存窗口中转到,可以看到内存数据窗口存储着我们输入的序列号 “123456”

8.jpg

“F8” 运行程序到主模块

9.jpg

我们可以看到程序先把正确的序列号地址存到 edx 中,然后把错误的序列号放到 ebx 中。执行到 cmp 指令处,可以看到程序要用 ebx(输入的序列号) 和 edx(正确序列号)作比较,如果两个值相等 ZF 标志位就等于 1,程序就提示正确 Muy BIEN(正确)。

10.jpg

这里是用的 dword(双字)作比较,也就是 4 个字节,即正确序列号为 FIAC

很明显上面的这两个值肯定不相同会报错,我们 “F9” 继续运行到 MessageBoxA 断点处,从参数我们可以看到它的提示 “Mal Muy MAL”(错误),我们按 “F9” 键运行起来。

11.jpg

12.jpg

我们输入正确的序列号,重新运行程序到跳转指令处,此时可以看到 ZF=1

13.jpg

我们继续 “F9” 运行程序,此时弹出了正确的消息框。

14.jpg

  • 本文标题:x64dbg-硬件编码序列号寻踪一
  • 本文作者:9unk
  • 创建时间:2020-12-16 14:18:28
  • 本文链接:https://9unkk.github.io/2020/12/16/x64dbg-ying-jian-bian-ma-xu-lie-hao-xun-zong-yi/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!