czyr 发表于 2024-6-29 13:02

简单CM1

壳是有的不过都是常见的小型壳
你可以脱壳修改保存破解,也可以补丁破解
密码错误没有提示,密码正确才有提示



爱飞的猫 发表于 2024-6-29 23:18

本帖最后由 爱飞的猫 于 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)

czyr 发表于 2024-6-29 23:45

爱飞的猫 发表于 2024-6-29 23:18
IDA 把 `CPU` 区段头的 `462001` 注册为函数然后分析即可(因为字符串在这个区段的代码被引用了)。

...

{:1_893:}完全正解

你好,再见 发表于 2024-6-30 02:08

004625EE nop掉即可爆破,一大堆花指令跳了半天没跟出正确密码{:301_999:}
另外为啥我截图的时候主程序窗口会自动隐藏呢?


czyr 发表于 2024-6-30 14:35

你好,再见 发表于 2024-6-30 02:08
004625EE nop掉即可爆破,一大堆花指令跳了半天没跟出正确密码
另外为啥我截图的时候主程序窗 ...

{:1_921:},ida静态就可以直接查看到密码的计算方法,有时候动态调试还不是最好的方式呢

suihun 发表于 2024-7-1 01:09

cqycxcw 发表于 2024-7-1 08:07

redapple2015 发表于 2024-8-8 14:51

终于搞定了。
我的方法是:
在内存窗口搜:"正确",找到两个,转到随便一个“正确”地址,在用搜字符串搜“正确”。
找到后,转过去,看调过“正确”的jmp下断,“正确”上面第一个jmp,修改为nop,程序退出。那就不是这个jmp。继续向上找jmp下断nop掉,运行就可以。





页: [1]
查看完整版本: 简单CM1