图片1.png (162.8 KB, 下载次数: 0)
下载附件
2021-12-28 18:28 上传
[color=]暂停程序,在堆栈窗口找压入的用户名和注册码
图片2.png (9.02 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]在下面有个 返回到 00A84462,右键->反汇编窗口跟随
图片3.png (18.65 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]上面的call就是判断注册码是否正确的call,在这个call下断点,运行程序,继续点注册按钮。断下来后F7进入这个call,F8往下跟,有个jnz,用于判断邮箱地址是否输入,如果没输入会弹对话框,为了方便起见,把它改成jmp
图片4.png (26.1 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]继续单步跟踪,把一些无用的跳转改jmp
图片5.png (19.04 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
图片6.png (19.71 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
图片7.png (18.82 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]00B4284E处有个je,此时这个跳转未实现,继续执行将会显示“Invalid license key”,因此,此处je改jmp
图片8.png (20.1 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]00B428D5处,这个je已实现,执行后会显示“Invalid license key”,不进入网络验证,因此,此处je用nop填充
图片9.png (42.26 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]F9运行程序,发现已经变成PRO版本了
图片10.png (51.77 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]保存刚才的所有修改,复制到可执行文件,再次运行时发现有自校验
图片11.png (12 KB, 下载次数: 1)
下载附件
2021-12-28 18:31 上传
[color=]再次将修改后的程序载入OD,运行,出现错误提示框后暂停程序,Alt+K查看调用堆栈
图片12.png (18.71 KB, 下载次数: 1)
下载附件
2021-12-28 18:31 上传
[color=]发现MessageBox来自004AD38F处的调用,右键->显示调用
图片13.png (36.41 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]在MessageBoxW上面有个跳转可以跳过,改成jmp,保存文件,自校验就去除了 到这里程序算破解了一半,因为目前还有个问题,就是每次打开程序时都需要注册才能变成PRO版本,比较麻烦.... 猜测程序应该在启动时读取注册表或配置文件,根据注册表或配置文件中保存的注册码判断是否注册。 再次载入程序,在读注册表API下断点
图片14.png (15.38 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]多次运行程序,直到堆栈窗口出现“License Key”
图片15.png (14.67 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]Alt+K查看调用堆栈
图片16.png (12.01 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]逐级分析函数调用,在如图所示项 右键->显示调用 发现关键信息
图片17.png (18.45 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]删除读注册表断点,点击call的下一行,按F4,运行到当前位置,然后F8单步运行,在00B6F2B5处有个大跳转,如果这个跳转实现就是FREE版本,因此nop填充
图片18.png (36.25 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]紧接着的jnz改成jmp
图片19.png (23.05 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传
[color=]破解完成
图片20.png (78.33 KB, 下载次数: 0)
下载附件
2021-12-28 18:31 上传