PowerISO v6.7 破解分析
软件基本信息
软件名称 | 软件版本 | 编程语言 | 加壳情况 | 难度 | 难度说明 | 练习日期 |
---|---|---|---|---|---|---|
PowerISO | v6.7 | C++ | 无 | 简单 | 2023.04.03 |
功能:ISO管理工具
破解过程:
使用调用堆栈定位验证函数
调用堆栈的内容实际上就是函数的调用链,可以看到是如何一步一步调到当前函数的,由于弹窗属于是个窗口,会让弹窗函数卡住,不往后走,所以这里可以通过调用堆栈来找到是从哪里把验证失败信息传入的,然后去分析判断条件来patch使得传入弹窗函数的是验证成功信息
点击输入序列号,进入注册界面,然后随便输入用户名,密码输满,有格式的密码一般会把输入上限设置为合法值
弹窗失败消息的时候,去追溯调用堆栈:
跳过系统模块的调用,一个一个看用户模块的调用信息,先看第一个,poweriso.sub_566960+104
找到函数头下断点:
发现这个函数就是弹窗失败信息的,失败信息是从上一层传入的,所以接下来再往上一层看看:
64位程序是通过寄存器传参的,可以看到这里rcx的参数里已经写好失败信息了,经测试,这里的两个分支语句都会弹窗失败信息
继续向上追:
是这里没错了,可以看到注册成功的信息,也可以看到跳转条件来自这个函数,且这个函数的参数正是我们输入的用户名和序列号
所以这就是个验证函数
接下来patch一下就好了
patch验证函数完成暴力破解
可以看到,验证函数返回0会进入失败分支,需要rax的返回值不为0
这里只需要强制修改选中的jne为jmp即可,即可走向验证成功的分支,返回1
再次打开程序:
这个弹窗依然在,但实际上注册已经完成了:
使用Resource Hacker去除Nag
找到这个弹窗对应的Dialog,然后右键删除即可