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

目标程序

程序下载:Splish

解压密码:9unk

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

观察程序

1.jpg

这里只分析 Hard Coded 部分

序列号寻踪

同样运行程序到主模块,然后到再去查看相关的 API

2.jpg

继续运行程序到断点处

3.jpg

执行到返回,可以看到错误的序列号

4.jpg

继续按 “F8” 步过执行,可以看到后面用 lea 指令,把 eax 和 ebx 指向两个字符串的地址处。然后开始循环判断这两个值是否相等。

5.jpg

我们双击 jne 跳转,程序会跳转到相应的地址处。可以看到这是一个错误消息弹框。

6.jpg

7.jpg

我们再双击右边寄存器窗口的 EIP,返回原来地址处。

8.jpg

9.jpg

我们继续执行,可以看到 MessageBoxA 函数存储着错误信息。

10.jpg

这里总结一下:

11.jpg

循环过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cmp byte ptr ds:[eax], 0    // eax - 0 

je 0x0040138C // 循环结束,je 指令跳出循环

mov cl, byte ptr ds:[eax] // 将 eax 的第一个字符传送到 cl 中

mov dl, byte ptr ds:[ebx] // 将 ebx 的第一个字符传送到 dl 中

cmp cl, dl // 判断这两个值是否相等,不相等就跳转报错 "Sorry,please try again",如果相等就继续循环,直到循环结束

inc eax // eax + 1 (内存地址 + 1),此时 eax 指向的内存地址是从下一个字符串 'a' 开始

inc ebx // ebx + 1 (内存地址 + 1);此时 ebx 指向的内存地址是从下一个字符串 '2' 开始

// 从最后两个 inc 指令可以看到,每执行一次 inc eax ,eax 指向的值就会少一个字符串。也就是第一个 cmp 指令是在计算循环次数, je 指令就是用来判断 循环是否结束。

最终我们找到正确的序列号:HardCoded

12.jpg

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