C 拼写数字到数字-理解简短的模糊代码
有人能帮我理解这个代码吗C 拼写数字到数字-理解简短的模糊代码,c,obfuscation,lexer,deobfuscation,C,Obfuscation,Lexer,Deobfuscation,有人能帮我理解这个代码吗 long long n,u,m,b;main(e,r){for(;n++||(e=getchar()|32)>=0;b= "ynwtsflrabg"[n%=11]-e?b:b*8+n)for(r=b%64-25;e<47&&b;b/=8)for (n=19;n;"1+DIY/.K430x9G(kC["[n]-42&255^b||(m+=n>15?n:n>9?m% u*~-u:~r?n+!r*16:n*16,b=0))u=1
long long n,u,m,b;main(e,r){for(;n++||(e=getchar()|32)>=0;b=
"ynwtsflrabg"[n%=11]-e?b:b*8+n)for(r=b%64-25;e<47&&b;b/=8)for
(n=19;n;"1+DIY/.K430x9G(kC["[n]-42&255^b||(m+=n>15?n:n>9?m%
u*~-u:~r?n+!r*16:n*16,b=0))u=1ll<<6177%n--*4;printf("%llx",m);}
长n,u,m,b;main(e,r){for(;n++| |(e=getchar()| 32)>=0;b=
“ynwtsflrabg”[n%=11]-e?b:b*8+n)用于(r=b%64-25;e15?n:n>9?m%
u*~-u:~r?n+!r*16:n*16,b=0)u=1ll15?n:n>9?m%u*~-u:~r?n+!r*16:n*16,b=0)-为什么这些条件在n
上
eIt不是可移植的C,因此也不是特别聪明。有更好的例子。但就我而言,你的分析到目前为止值得一试。试着在你选择的调试器中单步执行代码-这通常有助于理解其他人的代码。字符串文字也是数组表达式,可以是下标与任何其他数组表达式一样-“foo”[1]
的计算结果为'o'
@Bathsheba:not portable C您指的是旧的K&R语法:main(e,R)
?不,事实上它采用ascii编码。大多数混淆比赛坚持使用portable C。
long long n, u, m, b; // = 0
int main(int e, int r) {
/* loop1:*/ for(;
/* --condition: */
/* if not:*/ n++ || // n++ == 0 <=> n == 0 // Set n += 1
/* then:*/
/* if not:*/ (e = getchar() | 32) >= 0; // Set e <- input char
// `| 32` transforms upper case to lower case
// getchar < 0 <=> EOF
/* then break*/
/* --increment: */
b =
/* if:*/ "ynwtsflrabg"[n %= 11] - e ? // Set n %= 11
/* then b=*/ b :
/* else b=*/ b * 8 + n)
/* loop2:*/ for(r = (b % 64) - 25; // Set r
/* --condition: */
/* if not:*/ (e < 47) && b;
/* break*/
/* --increment: */
b /= 8) // Set b
/* loop3:*/ for(n = 19; // Set n
/* --condition: */
/* if not:*/ n; // <=> n != 0
/* then break */
/* --increment: */
/* if not:*/ ("1+DIY/.K430x9G(kC["[n] - 42) & 255 ^ b ||
/* <=> {7, 1, 26, 31, 47, 5, 4, 33, 10, 9, 6, 78,
15, 29, 254, 65, 25, 49, 214}[n] == b */
/* then:*/ (m += // Set m
/* if:*/ n > 15 ?
/* then m+=*/ n :
/* else if:*/ n > 9 ?
/* then m+=*/ m % u * ~-u :
// <=> m % u * (u - 1)
/* else if:*/ ~(int)r ?
/* then m+=*/ n + !(int)r * 16 :
/* else m+=*/ n * 16,
b = 0)) // Set b
/* --body: */ u = 1ll << (6177 % n-- * 4); // Set u, n
// <=> u = pow(2, 6177 % n-- * 4)
printf("%llx\n", m);
}