|
|
|
@ -1,20 +1,27 @@
|
|
|
|
|
#ifndef __LOADER_H__
|
|
|
|
|
#define __LOADER_H__
|
|
|
|
|
|
|
|
|
|
// 定义加密和解密的宏,实际调用do_encode函数
|
|
|
|
|
#define do_encrypt(ptr, len, key) do_encode(ptr, len, key)
|
|
|
|
|
#define do_decrypt(ptr, len, key) do_encode(ptr, len, key)
|
|
|
|
|
|
|
|
|
|
// 定义一个静态内联函数,用于实现32位值的循环左移操作
|
|
|
|
|
static inline unsigned int custom_rol32(unsigned int val, int n)
|
|
|
|
|
{
|
|
|
|
|
return ((val << n) | (val >> (32 - n)));
|
|
|
|
|
// 循环左移n位,右移(32 - n)位,然后将两者的结果合并
|
|
|
|
|
return ((val << n) | (val >> (32 - n)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 定义一个静态内联函数,用于执行编码操作
|
|
|
|
|
static inline void do_encode(void *ptr, unsigned int len, unsigned int key)
|
|
|
|
|
{
|
|
|
|
|
while (len > sizeof(key)) {
|
|
|
|
|
*(unsigned int *)ptr ^= custom_rol32(key ^ len, (len % 13));
|
|
|
|
|
len -= sizeof(key), ptr += sizeof(key);
|
|
|
|
|
}
|
|
|
|
|
// 当剩余长度大于键值长度时,继续执行编码操作
|
|
|
|
|
while (len > sizeof(key)) {
|
|
|
|
|
// 使用异或和循环左移操作对数据进行编码
|
|
|
|
|
*(unsigned int *)ptr ^= custom_rol32(key ^ len, (len % 13));
|
|
|
|
|
// 更新剩余长度和指针位置,准备处理下一部分数据
|
|
|
|
|
len -= sizeof(key), ptr += sizeof(key);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|