这个功能实际上是做什么的?

逆向工程 二元分析 x64dbg
2021-06-29 11:25:46

我在大学参加这个逆向工程实验室,我们有这个最后的大家庭作业项目。我有二进制文件的一部分,它通过迭代它自己的字节和add-ing 或xor-ing 然后将它们重写回内存来更改它自己的 asm 代码

我被困在这个函数中,我设法使用 x64dbg 将其反编译为以下(变量命名由我更改)

uint8_t fun_401c05(uint8_t argument) {
    uint8_t counter;

    counter = 0;
    if (argument) {
        do {
            counter = (uint8_t)(counter + 1);
            argument = (uint8_t)(argument & (uint8_t)(argument - 1));
        } while (argument);
    }
    return counter;
}

我试图了解这个函数到底是做什么的。我知道该函数被调用了 3 次,每次都使用我输入文件中的一个字母。然后使用xor一些sar指令处理每个结果(这是我第一次看到它)来计算一个 int 键,该键允许访问挑战的下一部分,我需要了解该函数的作用以赋予它正确的权限输入。我可以看到它的作用,但还不能真正理解它的含义..

编辑:我知道问题的名称很糟糕,但我不知道要给它什么其他通用名称。如果有人可以帮助我将不胜感激

1个回答

它计算1's inargument的二进制表示的数量(见链接)。

基本上,每个n & (n - 1)抵消了至少显著1n的二进制表示,保留所有的更显著数字。