第一个反调试 ,在403150 ret (通过异常找到了反调试地址)
CRC校验 (通过给407C00 按钮事件下硬件访问断点)
改成这样 , 或直接在404600ret
407C00 按钮事件
(
往下跟 , 在407C2B看到了花指令 ,和反调试的标志位
发现了获取编辑框内容(
密码长度需要12位,且不能为空 , 这个设计有点奇怪,明明密码只能>=12,还要判断是否为空
407CF7可能是关键跳
原来是暗装 ,保存补丁,数据,重新加载程序
不让他跳 , 反而弹出了Faild,在MessageBoxA下断点
发现断不下来 , 反而从ntclose走了出来 , 这怎么能行 , 这肯定是自己构造的弹窗函数,封装的程度大概率没有系统的API高 , 看堆栈 , 看看有没有有用的信息
看样子是找到了 , 但是下面有个407A50 , 407A33也是Faild , 都下上断点
程序断下来了 , 是下面的那个407A50
Ctrl+R , 找到了两处调用 , 这是第一个 , 很简单的VM_CALL(自我理解) , 让我们打上标签
这下子就舒服了 , 上面的404495是反调试 , 不管他, 反正反调试我们都干掉了 , 时间有限 , 我们修改407A50 ,使其跳转到407A20
5DB2C0需要置为C , 但是我也不知道他能干啥 , 不管他了 , 直接NOP
搞定
接下来是在破解成功后,进行的vJcc爆破
这个楼主让我用vJcc爆破, 这我也不会啊 , 让我们转到4044AF下上断点 发现断不下来 , 就当他是指令膨胀吧(没有影响函数执行过程) , 让我们注意 4044A9 . mov edx, dword ptr ds:[0x005D2A30] , 我们给0x005D2A30下上硬件访问断点 三个取地址值的指令都行的
[0X5D2A30]
[0X5DB2C4]
[0X5DB2C8]
下上硬件访问断点后 , 程序断下
Ctrl+9到Ret处 , EAX为407A50 ,是错误CALL的地址 ,接下来对这段函数进行逆向分析
我们修改EAX的值后 , 使他跳转到成功CALL测试
程序没有走到失败call , 直接走到成功CALL , 看来我们改对了
加上标签 , 直接在vJcc段首 Mov EAX , 成功CALL . Ret,似乎也算vJcc爆破
肉眼识别两个立即数, 注意eax , edx , 这段代码就是一个简单的if-else , 改00407A85还是00407A91 都是可行的
407A91 源代码是and edx, 0X360->and edx, 0xFFFFFC9F
0X360取反就是0xFFFFFC9F , if(a) -> if(!a) 这个时候运行 , 就到达了成功CALL