鼠标连点器烦人弹窗?我直接爆破

  • 项目需要测试一款芯片,重复性采集数据,网上随便找了一个鼠标连点器,试了一下,发现还挺好用的,结果用着用着,居然要卡半天,提示未注册用户需要暂停使用一分钟。本着学习的目的,尝试了一下绕过验证,结果令我大吃一惊!!!
  • 一、软件使用界面
  • 二、给软件做个体检
  • 1.查壳
  • 2.错误提示
  • 3.OD分析排坑
  • 4.追码法失败
  • 5.常量法爆破
  • 这下应该就没有烦人的弹窗了。


项目需要测试一款芯片,重复性采集数据,网上随便找了一个鼠标连点器,试了一下,发现还挺好用的,结果用着用着,居然要卡半天,提示未注册用户需要暂停使用一分钟。本着学习的目的,尝试了一下绕过验证,结果令我大吃一惊!!!

一、软件使用界面

界面还是很清爽的

java 编写连点器 连点器编辑_windows


这大大的试用版属实扎眼

java 编写连点器 连点器编辑_字符串_02


就是这玩意儿

java 编写连点器 连点器编辑_java 编写连点器_03


注册选项在这里面

java 编写连点器 连点器编辑_windows_04


java 编写连点器 连点器编辑_注册码_05

二、给软件做个体检

1.查壳

很好,Delphi写的,没有壳

java 编写连点器 连点器编辑_字符串_06

2.错误提示

随便输入注册邮箱和注册码

java 编写连点器 连点器编辑_windows_07


可以看到弹窗以及里面的字符串:”注册码不正确“

java 编写连点器 连点器编辑_windows_08

3.OD分析排坑

  1. 载入OD中,F9运行程序
  2. CTRL+G转到00401000,这是程序运行的起始位置
  3. 转到之后有OD帮我们分析的东西,不太需要,直接干掉看汇编源码,从模块中删除分析(我的已经删除了)
  4. 关键一步查找字符串,还记得之前的错误提示吗?不是Vb程序,直接智能搜索即可
  5. 出来的字符串太多了,直接CTRL+F查找 ”注册“

    6.可以找到两处比较关键的位置(第二处才是正主!!)
  6. 依次双击进去,找关键跳转,如图所示,je跳过了注册成功的字样,跳到了注册码不正确的地方,可能就是他了,直接nop掉,然后保存到文件,看看效果



    提示注册成功了,只不过要重新启动,结果重启之后还是试用版,所以这TM是个重启验证的程序!!

4.追码法失败

既然是重启验证,第一反应是尝试追码法,因为已经定位到了一个可能是关键位置的跳转,那往上肯定有一个关键call,这个call的返回值就是影响下面跳转,是跳到注册成功,还是注册失败。

通常来说,关键跳上面的就是关键call,很容易定位到。

java 编写连点器 连点器编辑_windows_09


既然关键call有了,可以利用他来干嘛呢?平时我们写程序,喜欢在某个函数中,首先读取用户的输入字符(此处就是假码),然后和某个字符串做对比(此处就是软件的真实注册码),如果比较的结果一样,那么就返回true,否则返回false。所以程序在对比分析的时候,无意之中暴露了自己,我们通过OD进入这个关键call,然后读取寄存器的数值,很有可能就能找到真码!

在上图中的call处下断点,然后点击注册,输入假码,程序就会断在此处,F7单步进call运行(和F8的区别就是,一个遇到函数直接过,一个会进入函数单步执行),进入call之后,单步F8即可。

注意,寄存器中已经出现输入的假码了!

java 编写连点器 连点器编辑_windows_10


继续往下跟,出现了非常可以的字符串,复制下来备用,然后继续看又没有其他可疑的了

java 编写连点器 连点器编辑_java 编写连点器_11


直到出call,都没有类似可疑的字符串了,所以接下来就是用上述可疑字符串去测试能不能通过了,注意,注册码对应的注册邮箱要是保持一致,因为注册码计算的方式是通过注册名生成的

打开软件,输入测试,结果还是注册失败,所以追码失败了!

5.常量法爆破

第三步中试图绕过注册码失败,因为他是一个重启验证的程序,只能从第二个字符关键位置下手了,同样是双击进去,也能找到关键跳转,这下不用直接爆破的方法了,采用更加稳妥一点的常量法。注意je跳转上面的cmp byte ptr ds:[0x****],0x0,这句代码的意思就是某个寄存器的值,和0x0做比较,影响下面的关键跳转,而且这个寄存器值是个常量,0x*****,所以从他下手。

java 编写连点器 连点器编辑_字符串_12


复制这个常量值,然后查找所有的常量,出现了很多处,说明程序在多处都有判断软件是否被注册了

java 编写连点器 连点器编辑_windows_13


java 编写连点器 连点器编辑_重启_14


熟悉汇编的同学估计可以看的比较清楚,对于mov指令就不用考虑了,我们只考虑cmp比较指令处的常量,在这些地方下断点

java 编写连点器 连点器编辑_注册码_15


然后重新运行程序,程序断在如图所示的地方,发现了非常可疑的东西,此时只要修改je或者cmp比较的值(即将0x0换成0x1即刻影响跳转)

java 编写连点器 连点器编辑_字符串_16


依次修改0x0,然后继续运行,断下来就重复操作,最后将所有修改保存至可执行文件。

java 编写连点器 连点器编辑_重启_17

这下应该就没有烦人的弹窗了。