#混淆 #游戏开发 #停止 #变体 #大多数 #作弊 #修改

nightly obfuscate-integer

这是一个库,可能会阻止大多数作弊引擎(及其他变体)程序扫描相对地址,从而阻止进一步的修改

2 个版本

0.1.2 2021 年 12 月 28 日
0.1.1 2021 年 12 月 27 日
0.1.0 2021 年 12 月 25 日

1157游戏开发

自定义许可证

30KB
442

混淆整数 — 针对作弊引擎用户

这是一个库,可能会阻止大多数作弊引擎(及其他变体)程序扫描相对地址,从而阻止进一步的修改。

在 GPL v3 或更高版本下发布。

更新日志

v0.1.1 - v0.1.2

  • v0.1.2 中的热修复:删除主函数。
  • 添加一个 README.md 文件
  • 在库中添加一些不安全代码,使程序更加随机。

v0.1.0

  • 初始提交

lib.rs:

这是一个用于测试的库,可能会阻止大多数作弊引擎(及其他变体)程序扫描相对地址,从而阻止进一步的修改。这里提供的类型大多以 'O' 开头,其余部分与其实际类型相同,例如,Oi32 实际上是一个混淆的 i32,对于大多数作弊引擎用户来说,即使修改一个非常简单的程序也相当困难。

许可证:GPL-v3 或更高版本

示例

#![feature(bench_black_box)]
use std::hint::black_box;
#[macro_use] // if you want to import the macro
extern crate obfuscate_integer;
use obfuscate_integer::*;
fn main(){cai!{
    let mut player_hp:Oi32:=500000;
    let mut enemy_hp:Oi32:=1000000;
    let mut round:Oi16:=0;
    let now=std::time::Instant::now();
    loop{
        round+=1;
        enemy_hp-=1;
        if enemy_hp<0 {break}
        player_hp-=1;
        if player_hp<0 {break}
    }
    println!("execute 5000000 loops, cost {:?}",now.elapsed());
    let mut player_hp:Oi32:=500000;
    let mut enemy_hp:Oi32:=1000000;
    let mut round:Oi16:=0;
    let now=std::time::Instant::now();
    loop{
        round+=black_box(1);
        enemy_hp-=black_box(1);
        if enemy_hp<0 {break}
        player_hp-=black_box(1);
        if player_hp<0 {break}
    }
    println!("execute 5000000 loops, cost {:?}",now.elapsed());
    let mut stdin = std::io::stdin();
    let mut player_hp:Oi32:=500000;
    let mut enemy_hp:Oi32:=1000000;
    let mut round:Oi16:=0;
    let mut buffer = String::new();
    } // at least 0.1.0, `cai!` does not support complicated instructions like the following one. it might be solved in future versions.
    if loop{
        round+=1;
        println!("Round {} is comming, player's hp is {} and enemy's hp is {}. Press `Enter` to continue.",&round,&player_hp,&enemy_hp);
        stdin.read_line(&mut buffer).unwrap();
        buffer.clear();
        enemy_hp-=1;
        if enemy_hp<0 {break true}
        player_hp-=1;
        if player_hp<0 {break false}
    }{
        println!("You win!");
    }else{
        println!("You dead.");
    }
}

限制

程序必须使用 overflow-checks = false 编译,因为调试模式无法处理高度可能的环绕操作。使用 std::hint::black_box,不难发现 Oi32 使程序运行速度比使用 i32 慢 100 倍,因此,不要在处理大量计算时使用 Oi* 或 Ou*。对于正常(例如,游戏)使用,这是可以接受的。

没有运行时依赖项

功能