源代码中包含明文字符串,很容易通过静态反编译工具分析出来,strings工具也可以将其dump出来,非常不利于敏感文本保护。用加密文本代替明文,能有效阻止静态反编译工具分析,增加破解难度。
obstr就是这样一个简单加密C字符的小工具,它将字符串转换为加密数据,在运行时解密。
obstr并非一个十分“健壮”的加密算法,只是给破解增加一点点难度,请谨慎使用
- 将
obstr.h
,obstr.c
两个文件导入到您的工程 - 在本工程运行make命令,生成
obdef
辅助工具
举个例子,代码中有个字符串"hello"。先通过obdef
生成加密宏定义
➜ obstr git:(master) ✗ ./obdef hello
/* hello */
static uint8_t obstr_3099[] = {0x08,0x3a,0x26,0x96,0x8c,0x63,0xe7,0x17};
#define O_hello ObstrDec(obstr_3099)
将输出内容拷贝到代码里,在要用"hello"
的地方,用O_hello
代替即可,就这么简单。
加密方法选用简单快速的TEA,密钥默认{0x0, 0x0, 0x0, 0x0}。
举例来说,字符串“hello”加密后的结果为
h | e | l | l | o | \0 | ||
---|---|---|---|---|---|---|---|
0x3a | 0x26 | 0x96 | 0x8c | 0x63 | 0xe7 | 0x17 | 0x49 |
加密后的密文不再以\0结尾,在密文前加上当前密文长度
\8 | h | e | l | l | o | \0 | ||
---|---|---|---|---|---|---|---|---|
0x08 | 0x3a | 0x26 | 0x96 | 0x8c | 0x63 | 0xe7 | 0x17 | 0x49 |
解密流程相反,先通过异或解出密文长度,再通过TEA解密字符串。
解密后,下次使用时无需再重复解密。