我尽我所能,但所有代码对我来说都是全新的,我无法弄清楚它做了什么。我最终放弃了它作为一个失败的原因,因为我有其他事情要做。但是,为了知识,我仍然对学习它很感兴趣。任何人都可以帮助我更多地了解这种类型的编程或具体是什么?
我会尝试将其删除并给予我的印象。
这是进行实际加密的部分;从我可以弄清楚,使用XOR加密。它是否正确?我还认为input_2和input_1被错误地切换了。
typedef int int32;
typedef char int8;
void change_it(int8 *output, int8 *input_1, const int8 *input_2, int32 length)
{
int32 i = 0;
for(i=0; i<length; i++)
{
output[i] = (int8)(input_1[i] ^ input_2[i]);
}
return;
}
在这里,他们重载itoa
以使字符串成为十进制或十六进制数字,但出于何种目的我不确定。
void itoa( int32 num, int8 *alpha, int32 radix )
{
if( radix == 10 )
{
sprintf(alpha, "%i", num);
}
else if( radix == 16 )
{
sprintf(alpha, "%X", num);
}
}
这是主要调用的主要运行功能。它做了一些奇怪的按位,然后调用change_it 4次。这是让我感到难过的部分。
int8 *modify_it(int32 modifier, const int8 *input_1, int32 length)
{
int8 leading[3];
int32 i_leading;
int8 * temp_string = NULL;
int8 * ret;
int32 i = 0;
itoa(modifier/2, leading, 10);
i_leading = atoi(leading);
temp_string = (int8 *) malloc(8);
ret = (int8 *) malloc(length);
memset(temp_string, 0, 8);
temp_string[0] = 0;
if( (modifier+1)%2 == 0 ) {
temp_string[0] = (int8)((i_leading<<4) + 8);
}
else {
temp_string[0] = (int8)(i_leading<<4);
}
for(i=0; i<(length>>3); i++)
{
change_it(ret+i*8, temp_string, input_1+i*8, 8);
}
free(temp_string);
return ret;
}
最后但并非最不重要的是,启动它的主要功能。
int main(int argc, char **argv) {
int8 data[32];
memset(data, 0x0A, sizeof(data));
int8 *resp = modify_it(0xFF, data, sizeof(data));
free(resp);
system("PAUSE");
return 0;
}
答案 0 :(得分:5)
这基本上是 - 为了更好的术语 - 混淆了输入。
这是一个非常业余的尝试,因为在保护和存储数据方面都会非常糟糕。
有许多错误,例如清除数组(可能在使用calloc分配期间完成),然后通过“手动”清除部分错误来“确保”再次清除它。这有很多很多错误,这让我想要嘲笑和笑。
如果这不是作业,请扔掉它。不要试图从中吸取教训。这段代码没有任何正确或好处。
答案 1 :(得分:4)
有许多级别可以批评代码。
0xFF
函数的modify_it()
的单个固定字节
加上7个零字节。malloc()
。127
格式化为leading
时,会出现缓冲区溢出。等
总的来说,'忽略此代码'的建议是合理的。但是,发给你的公司可能完全清楚它是垃圾。他们想知道你会提出什么问题,以及如何分析它,如果你提供了补救措施,你会提供什么补救措施。
将其视为一段简单的错误C代码;分析它。如果你有这方面的知识,就要密切注意事物,但即使不了解加密也有很多批评。
Before:
0x0000: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A ................
0x0010: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A ................
After:
0x0000: F2 0A 0A 0A 0A 0A 0A 0A F2 0A 0A 0A 0A 0A 0A 0A ................
0x0010: F2 0A 0A 0A 0A 0A 0A 0A F2 0A 0A 0A 0A 0A 0A 0A ................
Decrypt:
0x0000: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A ................
0x0010: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A ................