重启验证的三种形式及其解决方法

什么是重启验证:

重启验证顾名思义就是在程序启动时验证注册信息。

执行流程:

  • 基本的执行流程:注册信息输入–>给出提示–>程序重启同时执行验证机制–>正常执行
  • 扩展的执行流程:注册信息输入–>执行部分验证机制/执行假验证机制–>程序重启–>执行真验证机制–>正常执行

对于有经验的作者来说,可以在注册信息输入和程序重启之间加入假的验证机制,假的验证机制一般比较简单,比如说只是当单纯的明码比较,当我们输入这个假的注册码的,程序一般会提示注册成功,此时程序就会知道我们是逆向者,在程序重启时就会假装注册成功,在执行程序功能时就会报错或是无反应,这就是所谓的暗桩。

重启验证的类型:

根据写入信息位置的不同分类:一类是将注册信息写入文件中,一类是将注册信息写入注册表中。

定位关键代码:

  • 字符串定位
    通过OD字符串插件扫描敏感字符串,一般出现的文件路径或是注册表路径都可能是验证信息的保存位置
  • 监控工具定位
    通过procmon等监控工具监控注册信息的写入位置
  • API定位
    通过定位CreateFile,RegCreateKey等API来获取注册信息的写入位置

重启验证一:写入信息进txt

输入“123456”,点击重启验证一,会在该文件夹下生成txt文件。存储的是刚刚输入的注册码。
在这里插入图片描述
在这里插入图片描述
调用的API函数:
写入文件:CreateFile—>WriteFile->CloseHandle
读取文件:CreateFile—>ReadFile->CloseHandle
在这里插入图片描述
调用API结束后,文件的内容会存储在buffer的地址中,即009ABAA0
在这里插入图片描述
数据窗口跟随,是我们输入的注册码。
在这里插入图片描述
堆栈窗口也显示调用函数的详细信息。
在这里插入图片描述
写入文件结束。
接下来,搜索验证通过,头部下断
在这里插入图片描述
向下执行过程中首先判断文件是否存在,如果不存在则直接跳转到验证失败。
最下方的je是关键跳,如果直接爆破就把je给nop掉。
在这里插入图片描述
开始读取文件,可以看到调用API:createfileA,文件地址即为一开始创建文件的地址。
在这里插入图片描述
然后读取文件中的注册信息,下面“JXU2MjExJXU2”即为真码,继续往下就是真码与假码比较。
在这里插入图片描述
相当于strcmp函数,比较文件中的数据与目标数据是否相等

重启验证二:写入信息进ini
在这里插入图片描述
输入假码,点击重启验证二
写入配置文件API下断点,程序断下来,数据窗口跟随。
WritePrivateProfileString:写入配置信息
下面就是写入注册信息的代码,
在这里插入图片描述
在这里插入图片描述
GetPrivateProfileStringA:读取配置信息
在这个函数上下断点,运行OD
下面就是验证的数据窗口和堆栈窗口
在这里插入图片描述
在这里插入图片描述
在读取了配置文件的信息后使用strcmp函数与程序的自效验数据进行比较,原理和储存在txt文件当中的更改操作是一样的
在这里插入图片描述
重启验证三:写入信息进注册表
在注册表编辑器中查看。搜索regedit
具体路径:HKEY_CURRENT_USER\Software\52Pojie
在这里插入图片描述
搜索重启验证3
创建注册表Key:RegCreateKay
写入注册表:RegSetValueEx
这是写入注册信息阶段,流程与重启验证一相同,
在这里插入图片描述
这是验证阶段,主要用到的API,流程也是与重启验证一相同,修改操作原理也是一样
打开注册表Key:RegOpenKeyA
查询注册表键值:RegQueryValueExA
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43916678/article/details/102486059