Ganlv 发表于 2019-3-31 22:30

面向 Cheat Engine 的 CrackMe 简单的数据保护

本帖最后由 Ganlv 于 2019-4-1 21:23 编辑


## CrackMe 文件下载


包含 `a.exe` 程序,`main.c` 源代码,`README.md` 说明文件。

**先不要源码哟,先尝试破解哦。**

## 使用方法

1. 解压到一个文件夹中。
2. Shift + 右键在此处打开命令行(或者是 Powershell)。
3. 执行 `chcp 65001` 把命令行改成 `UTF-8` 字节集。
4. 执行 `a.exe`。
5. 使用 CE 愉快地玩耍吧。





## 玩法

这个小游戏包含多个关卡,关卡的目标是一样的,但是血量数据的存储方式是不一样的:

您现在的血量是 100,每按一次回车,血量都会减少,把血量改成大于 100 的数值则可过关。

程序逻辑执行顺序:

1. 显示当前血量
2. 判断是否大于 100
3. 如果大于 100 则过关
4. 否则等待回车
5. 血量减少,并回到第 1 步。

进入关卡后,输入 q 再按回车即可返回主菜单。

包含关卡(1 ~ 9):

使用 CE 搜索内存,然后修改内存。数据在内存中存储的方式是不一样的,你需要找到不同的数据结构。

当然如果你使用 x64dbg 直接分析反汇编那就太简单了,毕竟这个 C 语言程序总共代码也没有多少,定位到关键代码一点都不麻烦。真正的游戏程序不会让你这么轻易找到关键代码的,你应该试试能不能根据内存变化找到关键代码。

* 关卡 1-3 简单地直接搜索即可。
* 关卡 4-6 需要用未知初始值和改变的数值模糊搜索,然后反汇编分析算法。
* 关卡 7-9 是我自己想的方法,看源码的话原理不是特别难以理解,但是的确很烦人,我自己都没有找到通用的方法来应对这种加密方法。

monvvv 发表于 2019-4-2 14:13

Ganlv 发表于 2019-4-1 21:28
其实 CE 的问题就是没法简单地联合搜索,不过它支持用 Lua 自定义复杂搜索,。

主要想搜索到地址首先就得大致的猜到使用的数据结构,只要起码能模糊的知道保存的方式,不管怎么样都是能找到数据的。问题是在不考虑性能的情况下可能的保存方式太多了,

monvvv 发表于 2019-4-1 16:04

试了下,前6个没什么好说的。第7个可以直接通过模糊搜索找到最后一位的地址,第8和第9不看提示很难找到,但根据提示就比较容易了。
各种五花八门的编码方法用ce根据内存变化搜索确实没什么好办法,用调试器的话又违反了找数据的初衷。

dokuro 发表于 2019-3-31 23:22

有时间研究一下

孤独的Provence 发表于 2019-4-1 07:46

有时间可以玩玩,挺有意思的

wangyujie96 发表于 2019-4-1 17:30

找到数据地址之后,找什么改写了此地址,然后sub 1改成add ff ……

qingyf 发表于 2019-4-1 18:59

本帖最后由 qingyf 于 2019-4-1 19:04 编辑


第六关没过的去。。。。。。。。。。。。。。



还是不行

Ganlv 发表于 2019-4-1 21:26

qingyf 发表于 2019-4-1 18:59
第六关没过的去。。。。。。。。。。。。。。




代码的 bug,修改完的数据必须是 100~128 之间才行。我修改了几行代码,重新上传附件了。

BIGGER_THAN_100 那个宏写错了,所以如果数特别大就不行了。

Ganlv 发表于 2019-4-1 21:28

monvvv 发表于 2019-4-1 16:04
试了下,前6个没什么好说的。第7个可以直接通过模糊搜索找到最后一位的地址,第8和第9不看提示很难找到,但 ...

其实 CE 的问题就是没法简单地联合搜索,不过它支持用 Lua 自定义复杂搜索,。

57yn 发表于 2019-4-26 11:31

感谢分享,刚好可以拿来练练{:301_993:}
页: [1] 2
查看完整版本: 面向 Cheat Engine 的 CrackMe 简单的数据保护