简单CM1
壳是有的不过都是常见的小型壳你可以脱壳修改保存破解,也可以补丁破解
密码错误没有提示,密码正确才有提示
本帖最后由 爱飞的猫 于 2024-6-29 23:19 编辑
IDA 把 `CPU` 区段头的 `462001` 注册为函数然后分析即可(因为字符串在这个区段的代码被引用了)。
区段列表:
![](https://imgsrc.baidu.com/forum/pic/item/810a19d8bc3eb13501fcb484e01ea8d3fd1f44d1.png)
找到关键字 `正确`,反过来看条件:
```c
void sub_462001(...)
{
// 省略无关内容
*((_DWORD *)a4 - 2) -= 456;
// 省略无关内容
success = *((_DWORD *)a4 - 2) == 123;
// 省略无关内容
if ( success )
{
// 省略无关内容
*((_DWORD *)a4 - 22) = "正确";
// 省略无关内容
}
// 省略无关内容
}
```
虽然不知道在干嘛,但整个程序就这一个逻辑分支(其它的跳转都是用 JMP 拼接代码片段来混淆视听,IDA 伪码生成能自动优化),就是将输入的值减去 456,然后与 123 对比。
二者相加的结果 `579` 就是密码。
![](https://imgsrc.baidu.com/forum/pic/item/d62a6059252dd42afe370294453b5bb5c9eab8d7.png)
爱飞的猫 发表于 2024-6-29 23:18
IDA 把 `CPU` 区段头的 `462001` 注册为函数然后分析即可(因为字符串在这个区段的代码被引用了)。
...
{:1_893:}完全正解 004625EE nop掉即可爆破,一大堆花指令跳了半天没跟出正确密码{:301_999:}
另外为啥我截图的时候主程序窗口会自动隐藏呢?
你好,再见 发表于 2024-6-30 02:08
004625EE nop掉即可爆破,一大堆花指令跳了半天没跟出正确密码
另外为啥我截图的时候主程序窗 ...
{:1_921:},ida静态就可以直接查看到密码的计算方法,有时候动态调试还不是最好的方式呢 终于搞定了。
我的方法是:
在内存窗口搜:"正确",找到两个,转到随便一个“正确”地址,在用搜字符串搜“正确”。
找到后,转过去,看调过“正确”的jmp下断,“正确”上面第一个jmp,修改为nop,程序退出。那就不是这个jmp。继续向上找jmp下断nop掉,运行就可以。
页:
[1]