面向 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 是我自己想的方法,看源码的话原理不是特别难以理解,但是的确很烦人,我自己都没有找到通用的方法来应对这种加密方法。
Ganlv 发表于 2019-4-1 21:28
其实 CE 的问题就是没法简单地联合搜索,不过它支持用 Lua 自定义复杂搜索,。
主要想搜索到地址首先就得大致的猜到使用的数据结构,只要起码能模糊的知道保存的方式,不管怎么样都是能找到数据的。问题是在不考虑性能的情况下可能的保存方式太多了, 试了下,前6个没什么好说的。第7个可以直接通过模糊搜索找到最后一位的地址,第8和第9不看提示很难找到,但根据提示就比较容易了。
各种五花八门的编码方法用ce根据内存变化搜索确实没什么好办法,用调试器的话又违反了找数据的初衷。 有时间研究一下 有时间可以玩玩,挺有意思的 找到数据地址之后,找什么改写了此地址,然后sub 1改成add ff …… 本帖最后由 qingyf 于 2019-4-1 19:04 编辑
第六关没过的去。。。。。。。。。。。。。。
还是不行 qingyf 发表于 2019-4-1 18:59
第六关没过的去。。。。。。。。。。。。。。
代码的 bug,修改完的数据必须是 100~128 之间才行。我修改了几行代码,重新上传附件了。
BIGGER_THAN_100 那个宏写错了,所以如果数特别大就不行了。 monvvv 发表于 2019-4-1 16:04
试了下,前6个没什么好说的。第7个可以直接通过模糊搜索找到最后一位的地址,第8和第9不看提示很难找到,但 ...
其实 CE 的问题就是没法简单地联合搜索,不过它支持用 Lua 自定义复杂搜索,。 感谢分享,刚好可以拿来练练{:301_993:}
页:
[1]
2