ttbbs 发表于 2021-11-26 06:54

手动vm之用极长的不含if的代码打一个if

本帖最后由 ttbbs 于 2024-3-24 22:54 编辑

#include <iostream>
#include <windows.h>

#define P(a,b)((~a),(~b))
#define FA(a) P(a,a)
#define FB(a,b) P(P(a,a),P(b,b))
#define FC(a,b) P(P(a,b),P(a,b))
#define FD(a,b) P(P(P(a,a),P(b,b)),P(a,b))
#define FE(a,b) (FB(a,b)+FC(a,b))
int main() {
    int x, y, z, jug;
    x = 3;
    y = 3;
    z = FA(FE(FA(x), y));
    jug = 0;
    for (int i = 1; i < 128; i++) {
      __asm {
            push edx
      }
      jug = FC(jug, FB(z, 1));
      __asm {
            pop edx
            shr z, 1
      }
    }
    jug = FA(jug);
    __asm {
      push s1
      push s2
      mov eax, jug
      sub, eax
      s2 : ret
      nop
    }
    std::cout << "x=y" << std::endl;
s1:system("pause");
}

ttbbs 发表于 2021-11-26 07:52

weakptr 发表于 2021-11-26 07:38
add ,jug
ret



其实就是判断z二进制里是否有一的结果,有一就是零,无一就是一

weakptr 发表于 2021-11-26 07:38

add ,jug
ret

jug是啥呢

surui6016 发表于 2021-11-26 07:49

我是新手,学习学习。

yuleniwo 发表于 2021-11-26 08:49

本帖最后由 yuleniwo 于 2021-11-26 08:52 编辑

weakptr 发表于 2021-11-26 07:38
add ,jug
ret


不好意思,回复错了,不能自己删除。

24G 发表于 2021-11-26 10:17

膜拜大佬,新人学习学习。

wull1299 发表于 2021-11-26 13:44

支持一下

dookp 发表于 2021-11-26 13:55

学习学习

cpujazz 发表于 2021-11-26 14:35

我的cm就是这种原理

ttbbs 发表于 2021-11-26 19:44

cpujazz 发表于 2021-11-26 14:35
我的cm就是这种原理

看来是大神了,大神还知道其他混淆方式吗?
页: [1] 2
查看完整版本: 手动vm之用极长的不含if的代码打一个if