逆向实战 3#解除程序重启验证


感觉跟上一次做的破解验证比较像,但是使用到了更加丰富的API

并且把注册验证的常用的API做了一个较为详细的梳理

省流助手:啰嗦至极菜鸡学习笔记,多图警告

环境 & 工具

  • win xp 32位
  • 吾爱破解版ollydbg

常用系统API

  • 文本文件

    CreateFile -> WriteFile -> ReadFile->CloseHandle

  • ini文件

    WritePrivateProfileStringA -> GetPrivateProfileStringA

  • 注册表文件

    RegCreateKey->RegOpenKey->RegSetValue(Ex)->RegQueryValue(Ex)

文本文件注册

image-20220119152555708

找到关键字符串“重启验证一”,所在位置就是写入验证码的主函数,定位到该函数开头位置并下断

image-20220121094911592

image-20220121095102361

让程序运行至断点位置开始调试,调试期间使用enter步入,观察是否有有价值的call,主要观察的是否有有价值的系统API,一直到运行到0x0040275B处的call,发现了此处获取了输入框输入,说明程序在这里把我们输入的注册码读入了并返回了长度,并且在读入后判断了注册码是否为空

image-20220121095807595

下方创建文件,并根据返回值确认文件是否创建成功,如果成功,则进行下一步

image-20220121102223549

image-20220121102247271

随后写入文件,然后退出程序

image-20220121103824784

image-20220121103846471

通过这个我们获知了验证文件名、保存地址和保存方式,所以现在可以去找读入验证文件的位置了,使用搜索字符串方法搜索文件名

image-20220121105823277

双击跳转,并使用f4运行到相应位置

image-20220121110111045

观察附近字段,找到关键API——确认文件是否存在

image-20220121111904516

在下方找到了对应的验证通过字符串,观察验证通过上方的call,显然就是判断注册码有效性的函数,如果返回值为0,那么test eax eax就会让下方的je跳过验证通过

image-20220121111703886

此处其实只需把je指令nop掉就可以了,但我们为了更完美的破解验证,进入验证call观察逻辑

发现程序是一个简单写死的strcmp,所以修改验证码

image-20220121112455617

成功通过验证

image-20220121112923788

配置文件注册

配置文件的注册其实与文本文件的注册同理

由于配置文件写入的API使用频率较低,所以这里直接把断点设置在WritePrivateProfileStringA处

image-20220122093712913

随后跳出当前函数(目的,观察压入API的参数)

image-20220122094218831得知写入ini文件的注册码格式后,直接搜索52Pojie.ini并下断点,重载后向下运行到filename参数为52pojie.ini的GetFileAttributesA函数处,观察下方出现的验证通过字样上方的call

image-20220122101754073

还是strcmp,属于是梅开二度

image-20220122101836275

注册表注册

原理一样,不想写了,去打游戏,心情好了补上吧,可以评论区催更

复现样本、工具下载

本博文仅以学习交流为目的,侵删

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐