1.先运行下正常 2.打密码 密码错误 3.用 OD 调试 发现报异常 说明做了反调试(OD不要用插件不然他会反反调试看不到) 4.(这里要用到 win7了 因为 win10 报异常不知道在哪里) win10效果

win7效果可以看出异常地址在哪里 5.知道异常地址在哪了用ida静态分析(ida就好办多了这里直接用mac版7.0) 一看就知道是汇编写的 6.开始分析 进回调函数 一下就就看到异常地址 往下面找一看就有个异常处理函数(怎么知道的写过调试器的一看就知道是个seh 不知道就查下SetUnhandledExceptionFilter) 7.进入异常处理函数 进来有点懵 (还好ida强大) 8.按快捷键c把当前数据转成汇编代码(光标放在函数名上)点yes 9.按p转成函数形势 改下名字 开始分析这个处理函数 其实是一个异常处理函数参数为(struct _EXCEPTION_POINTERS *pExceptionInfo) 他取第一个字段 是一个结构体 PEXCEPTION_RECORD ExceptionRecord; 再在结构体取异常码ExceptionCode 然后取struct _EXCEPTION_POINTERS *pExceptionInfo的第二个字段 也就是线程上下文 修改寄存器值同时返回-1 说明重新从异常处理执行
在ida中要自己添加一个结构体(在结构体窗口 按ins键 有个addxxx按扭 是创建win就有的结构体 然后 ctrl +f 搜 PCONTEXT) 分析结果为 根据处理函数所要修改的寄存器 然后在od里当执行到异常地址时把寄存器改掉 如上图要改的寄存器有 edi 改为eax=0x40304e
esi修改成 400332a eip修改成40107f (修改eip直接在地址右键设置为新eip) 密码已经出来了 magic 其实win10下也可以搞定 拖入od就断在oep处了 ctrl +g 转到 0x00401022 (回调函数地址)

其它截图 思路2 是下SEH断点