看见一个很有意思的混淆

#pragma clang diagnostic push

#pragma clang diagnostic ignored "-Wreturn-stack-address"

#pragma clang diagnostic ignored "-Wunused-function"

**__attribute__** ((always_inline)) **static** **char** *obfuscator_string_fixapt(){ **volatile** uint8_t str[] = {0x96,0xf1,0x15,0x7c,0x94,0xdf,0x22,0xd2,0xcd,0x3f,0xbd,0x5a,0xbf,0x64,0x90,0x78,0x15,0xdc,0xf8,0x25};str[0] ^= 23;str[1] ^= 32;str[2] ^= 24;str[3] ^= 19;str[4] ^= 116;str[5] ^= 57;str[6] ^= 126;str[7] ^= 99;str[8] ^= 120;str[9] ^= 117;str[10] ^= 91;str[11] ^= 80;str[12] ^= 112;str[13] ^= 33;str[14] ^= 34;str[15] ^= 46;str[16] ^= 111;str[17] ^= 45;str[18] ^= 116;str[19] ^= 126;str[0] ^= 7;str[1] ^= 93;str[2] ^= 35;str[3] ^= 35;str[4] ^= 71;str[5] ^= 38;str[6] ^= 56;str[7] ^= 49;str[8] ^= 3;str[9] ^= 63;str[10] ^= 58;str[11] ^= 61;str[12] ^= 1;str[13] ^= 59;str[14] ^= 60;str[15] ^= 17;str[16] ^= 14;str[17] ^= 84;str[18] ^= 105;str[19] ^= 57;str[0] -= 20;str[1] -= 31;str[2] -= 14;str[3] -= 31;str[4] -= 53;str[5] -= 90;str[6] -= 68;str[7] -= 81;str[8] -= 65;str[9] -= 2;str[10] -= 106;str[11] -= 8;str[12] -= 98;str[13] -= 21;str[14] -= 44;str[15] -= 24;str[16] -= 19;str[17] -= 53;str[18] -= 113;str[19] -= 98; **return** ( **char** *)str;}

#pragma clang diagnostic pop

好像是把每一个char上的自符进行一些操做来保证二进制里面不带原始字符

你猜对了 字符串在栈里,然后做了一些混淆操作。

1 Like

这种在volatile memory里的操作不太适合作为generic implementation来实现

1 Like

是的 只是个人的showtime

张总有什么好的方法,可以实现 原始字符串(常是一些三方Key),不在二进制中出现?

您Pay吗