加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

这个混淆的C行如何打印“EMIL”?

发布时间:2020-12-16 10:24:55 所属栏目:百科 来源:网络整理
导读:你能解释下面的代码是如何工作的吗? main(O){10putchar(4^--O?77-(1551284*O):10)main(2+O);} 输出: EMIL 你可以在Ideone上测试它.我在unwind的个人资料中找到了这一行. 解决方法 可以在逐步的基础上轻松地进行反混淆. 白色空间总是有帮助: main(O){ 10 p
你能解释下面的代码是如何工作的吗?

main(O){10<putchar(4^--O?77-(15&5128>>4*O):10)&&main(2+O);}

输出:

EMIL

你可以在Ideone上测试它.我在unwind的个人资料中找到了这一行.

解决方法

可以在逐步的基础上轻松地进行反混淆.

白色空间总是有帮助:

main(O)
{
  10 < putchar(4 ^ --O ? 77 - (15 & 5128 >> 4 * O)
                       : 10)
  && main(2+O);
}

添加变量:

main(O)
{
  int i = 4 ^ --O ? 77 - (15 & 5128 >> 4 * O)
                  : 10;
  i = putchar(i);
  10 < i && main(2+O);
}

用?if替换?::

main(O)
{
  int i;
  if (4 ^ --O)
    i = 77 - (15 & 5128 >> 4 * O)
  else
    i = 10;
  i = putchar(i);
  10 < i && main(2 + O);
}

替换&&如果:

main(O)
{
  int i;
  if (4 ^ --O)
    i = 77 - (15 & 5128 >> 4 * O)
  else
    i = 10;
  i = putchar(i);
  if (10 < i)
    main(2 + O);
}

支架清晰度:

main(O)
{
  int i;
  if (4 ^ --O)
    i = 77 - (15 & (5128 >> (4 * O)))
  else
    i = 10;
  i = putchar(i);
  if (10 < i)
    main(2 + O);
}

从这里开始,应用运算符的基本C知识就是一个简单的例子.

运行代码:( main的初始参数是1,we can check this)

main(1)
  4 ^ 0 = 4 = true
    5128 >> 4 * 0 = 5128
    15 & 5128 = 8
    i = 77 - 8 = 69
  putchar(69) -> 'E'
  10 < 69
    call main(2+0)
main(2)
  ...

是谁写的呢?嗯,据我所知,当谈到混淆代码时,这几乎是个谜.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读