这对作弊引擎有用吗?
Will this work against cheat engine?
我几个月前开始编程。我正在 Animate CC 中制作一个完整的客户端游戏,所以我正在尝试一种针对内存扫描软件的简单措施。
我正在努力避免人们更改我的 money 变量。
var canMoneyChange = false;
var money = 0;
var previousMoney = 0;
function everyFrame() { //Let's admit that this function is called every frame
if (moneyChange == true) {
lastMoney = money;
canMoneyChange = false;
} else {
if (lastMoney != money) { //If money is "magically" changed it should drop here
resetGame();
}
}
现在每当我更新货币视觉显示时,我还必须包含布尔变量:
//...
canMoneyChange = true;
money += 100; //For example
updateMoney(); //This is only for visual effects
//...
想知道这是否有效,谢谢。
编辑:该死的,我没有意识到 CE 会同时找到 lastMoney 和 money。我可以做一些事情,比如乘以一个数字来隐藏 lastMoney:
function everyFrame() { //Let's admit that this function is called every frame
if (moneyChange == true) {
lastMoney = money * 8;
canMoneyChange = false;
} else {
if (lastMoney != money * 8) {
resetGame();
}
}
这将阻止 50% 的 Cheat Engine 用户,因为大多数用户没有经验,只能进行简单的扫描和内存修改。他们只会放弃,因为您已将对抗性成本提高到他们的阈值以上。
正如其他人评论的那样,这是一场猫捉老鼠的游戏。
用户仍然可以扫描 "unknown initial value" 并扫描减少和增加的值。这将产生混淆的货币价值和常规价值,从那里计算出来并不需要太多。
用户也可以做"Find what Writes to this address",在货币地址上设置一个写断点,然后它会给他们指令把货币改回原来的值。此时他们将看到:
lastMoney = money * 8;
在汇编中并能够从那里弄清楚。
在所有 anti-cheat 情况下,您设置的每一个威慑都会增加对抗成本并过滤掉另一层作弊者。你的目标永远不应该是阻止所有作弊者,因为那从未发生过。但在几个小时内,您可以收集一些混淆信息和一些 anti-debug 措施来阻止 75% 的作弊者。问题是当其他 25% 代表有经验的作弊者发布作弊时。那时,75% 没有经验的群体的对抗成本代表了在搜索引擎上的搜索。
我会说添加一些 IsDebuggerPresent() 类型检查,但我想在您的平台上这是不可能的。
我不熟悉 Animate CC 或 Flash,但是将您现在正在使用的 1 种自定义混淆技术与 public 免费混淆器相结合会惹恼很多人,足以让向上。
我几个月前开始编程。我正在 Animate CC 中制作一个完整的客户端游戏,所以我正在尝试一种针对内存扫描软件的简单措施。
我正在努力避免人们更改我的 money 变量。
var canMoneyChange = false;
var money = 0;
var previousMoney = 0;
function everyFrame() { //Let's admit that this function is called every frame
if (moneyChange == true) {
lastMoney = money;
canMoneyChange = false;
} else {
if (lastMoney != money) { //If money is "magically" changed it should drop here
resetGame();
}
}
现在每当我更新货币视觉显示时,我还必须包含布尔变量:
//...
canMoneyChange = true;
money += 100; //For example
updateMoney(); //This is only for visual effects
//...
想知道这是否有效,谢谢。
编辑:该死的,我没有意识到 CE 会同时找到 lastMoney 和 money。我可以做一些事情,比如乘以一个数字来隐藏 lastMoney:
function everyFrame() { //Let's admit that this function is called every frame
if (moneyChange == true) {
lastMoney = money * 8;
canMoneyChange = false;
} else {
if (lastMoney != money * 8) {
resetGame();
}
}
这将阻止 50% 的 Cheat Engine 用户,因为大多数用户没有经验,只能进行简单的扫描和内存修改。他们只会放弃,因为您已将对抗性成本提高到他们的阈值以上。
正如其他人评论的那样,这是一场猫捉老鼠的游戏。
用户仍然可以扫描 "unknown initial value" 并扫描减少和增加的值。这将产生混淆的货币价值和常规价值,从那里计算出来并不需要太多。
用户也可以做"Find what Writes to this address",在货币地址上设置一个写断点,然后它会给他们指令把货币改回原来的值。此时他们将看到:
lastMoney = money * 8;
在汇编中并能够从那里弄清楚。
在所有 anti-cheat 情况下,您设置的每一个威慑都会增加对抗成本并过滤掉另一层作弊者。你的目标永远不应该是阻止所有作弊者,因为那从未发生过。但在几个小时内,您可以收集一些混淆信息和一些 anti-debug 措施来阻止 75% 的作弊者。问题是当其他 25% 代表有经验的作弊者发布作弊时。那时,75% 没有经验的群体的对抗成本代表了在搜索引擎上的搜索。
我会说添加一些 IsDebuggerPresent() 类型检查,但我想在您的平台上这是不可能的。
我不熟悉 Animate CC 或 Flash,但是将您现在正在使用的 1 种自定义混淆技术与 public 免费混淆器相结合会惹恼很多人,足以让向上。