我正在尝试混淆程序中的字符串。目前,我只有一个简单的字符串反转工作。我希望能够对数据执行XOR加扰,使其更加安全,但是我尝试的方法不起作用。
使用相同的函数和输入类型对字符串进行解码。这对于字符串反转没有问题,因为它只是反转回来,但是使用XORing可以很容易地做到这一点而不会变得太复杂吗?我更希望这个过程只保留一个字符串,就像反转那样。这是我的反转函数。
void reverse_string(unsigned char *buf, int length)
{
int i;
unsigned char temp;
for (i = 0; i < length / 2; i++)
{
temp = buf[i];
buf[i] = buf[length - i - 1];
buf[length - i - 1] = temp;
}
}下面是XOR函数的尝试
void charxor(char * text, int len) {
const unsigned char enc[8]={173,135,131,121,110,119,187,143};
char ch;
int i;
int ind=0;
for (i=0;i<len;i++) {
ch=*text++;
if (ch)
*text = ch ^ enc[ind++];
ind %=8;
}
}有人能帮上忙吗?将不胜感激!
发布于 2012-03-06 03:11:40
你似乎把事情搞得有点复杂了。试着这样做:
void charxor (unsigned char *text, int len) {
const unsigned char enc[8] = {173,135,131,121,110,119,187,143};
int i;
for (i = 0; i < len; i++) {
text[i] ^= enc[i % 8];
}
}请注意,XOR操作可能会将空字符引入字符串中,因此您确实需要跟踪它的长度,而不是仅仅依赖于尾随的空字符的存在。
还要记住,虽然相对来说,这可能比简单地颠倒字符串要“安全得多”,但任何有足够输出样本的相当聪明的人都可能在大约15分钟左右就能找到如何解码它。
发布于 2019-05-27 01:10:27
这是一个pbox,它需要你做一个不重复的整数key - random -与上述块相同的大小。最后一个块将从偏移量开始,它可能只是随机数据。不包括空的终止符,所以决定数据的去向/你对它做什么。您可以重新分配(buff,"A")来使用memmove。从64位的输出中创建3个64位框和16个4位框的子集,这看起来就像是openssl内置的des的一个糟糕的实现。基本优点是能够使用相同的函数/地址空间进行加密/解密。这也可以让你在没有额外缓冲区的情况下就地加密。KSZ是块/key的长度
char
*zecr
(bff, zbf, ky, ze)
char *bff;
char *zbf;
unsigned int ky[];
short ze;
{
/* main encrypt decrypt function */
int i=0;
while( i < KSZ ) {
int dx = ky[i];
if( ze == 1 ) { // encrypt
char c = bff[dx];
sprintf(zbf + i, "%c", c);
} else { // decrypt
char c = bff[i];
char tk[1] = "";
sprintf(tk, "%c", c);
memmove(zbf +dx, tk, 1);
}
i++;
}
return zbf;
}xoring是一种二元运算,它会产生截然不同的结果,这取决于你如何转换它。你得到了使用ocdec的正确想法,但如果你的想法是保持简单,我将假设你实际上并不了解汇编,尽管有请求的引用,坚持使用c调用它更简单,因为你最有可能如何使用数据。
-the女性性高潮,这是个神话。-SUN TZU
https://stackoverflow.com/questions/9572364
复制相似问题