在打开bug之前,我想检查一下这里发生了什么。
我正在将这段C代码移植到Rust:
unsigned __int128 r = (unsigned __int128)a * (unsigned __int128)b;
很简单(我想):
let r = (a as u128) * (b as u128);
现在有了这个输入参数,我在C和Rust中得到了一个不同的乘法结果:
(0x56eaa5f5f650a9e3 as u128) * (0xa0cf24341e75bda9 as u128)
Rust和C中的结果是不同的:
Rust: 0x3698fbc09d2c5b15e8889
例如,插入到进程中以获取C2信标的最基本恶意软件之一如下:
Get Handle of a process -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread
现在用C/C++编写它是非常原生的,因为它可以很容易地与WinAPI通信。用另一种编程语言(如Golang或Rust )来对抗EDR,而不仅仅是带有静态分析检查的AV,有什么好处吗?更具体地说,是将JMP与那些WinAPI调用挂钩并调用的EDR?
我的问题来自于.NET和C#的兴起,它们有很多用例,例如使用LOLBAS csc.exe在机器上编译,
Java有“检查异常”,这迫使方法的调用者要么处理异常,要么重新抛出异常。
// requires ParseException to be handled or rethrown
int i = NumberFormat.getIntegerInstance().parse("42").intValue();
其他较新的语言,如Go和Rust,则使用多个返回值:
i, err := strconv.Atoi("42") // Go
match "42".parse::<i32>() { // Rust
Ok(n)
我用cargo new创建了一个“你好世界”的锈蚀应用程序。当我执行git status时,它显示了一堆文件:
A rust/welcomec/Cargo.lock
A rust/welcomec/Cargo.toml
A rust/welcomec/src/main.rs
A rust/welcomec/target/debug/.cargo-lock
A rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/bin-welcome-2d68725c8fae6fd1
A rust/welcomec/ta