这个混淆的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) ... 是谁写的呢?嗯,据我所知,当谈到混淆代码时,这几乎是个谜. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |