Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带_字节和_C_Ida - Fatal编程技术网

C 带_字节和

C 带_字节和,c,ida,C,Ida,我用IDA反编译了一个函数和一个程序,我不知道这段代码到底是怎么工作的 flag[i] ^= *((_BYTE *)&v2 + (signed int)i % 4); 这是如何工作的?这可以用于使用4字节密钥的xor“解密”(或加密,操作是对称的)缓冲区。请参阅以下代码,与反编译器输出相比,其可读性可能更好一些 char flag[SIZE]; char key[4]; for (int i = 0; i < SIZE; i++) { flag[i] = flag[i]

我用IDA反编译了一个函数和一个程序,我不知道这段代码到底是怎么工作的

flag[i] ^= *((_BYTE *)&v2 + (signed int)i % 4);

这是如何工作的?

这可以用于使用4字节密钥的xor“解密”(或加密,操作是对称的)缓冲区。请参阅以下代码,与反编译器输出相比,其可读性可能更好一些

char flag[SIZE];
char key[4];

for (int i = 0; i < SIZE; i++) {
    flag[i] = flag[i] ^ key[i%4];
}
char标志[SIZE];
字符键[4];
对于(int i=0;i
因此,如果您的数据是“ZGUIHUOHJIOJOPIJMXAR”,并且您的密钥是“akey”,那么代码片段基本上就是这样

  ZGUIHUOHJIOJOPIJMXA
^ akeyakeyakeyakeyake
=====================
  yourplaintextresult (<- not really the result here, but you get the idea)
zguihoohjiojopijmxa
^Akeyakeyakeyakeyakeyake
=====================

yourplaintextresult(这可用于xor—“解密”(或加密,操作是对称的)一个具有4字节密钥的缓冲区。请参阅以下代码,该代码可能比反编译器输出可读性更好

char flag[SIZE];
char key[4];

for (int i = 0; i < SIZE; i++) {
    flag[i] = flag[i] ^ key[i%4];
}
char标志[SIZE];
字符键[4];
对于(int i=0;i
因此,如果您的数据是“ZGUIHUOHJIOJOPIJMXAR”,并且您的密钥是“akey”,那么代码片段基本上就是这样

  ZGUIHUOHJIOJOPIJMXA
^ akeyakeyakeyakeyake
=====================
  yourplaintextresult (<- not really the result here, but you get the idea)
zguihoohjiojopijmxa
^Akeyakeyakeyakeyakeyake
=====================
你的明文结果(
这表示
v2
的地址应该是byte类型变量的地址

(signed int)i % 4
这表示整数
i
的余数除以4(i可能是一个循环计数器)

这表示
v2
指向它的地址应该增加(i%4)

这是为了在位置
(v2+i%4)

这表示
标志
数组的
第i个
元素应与
(v2+i%4)

这表示
v2
的地址应该是byte类型变量的地址

(signed int)i % 4
这表示整数
i
的余数除以4(i可能是一个循环计数器)

这表示
v2
指向它的地址应该增加(i%4)

这是为了在位置
(v2+i%4)

这表示
标志
数组的
第i个
元素应与位于
(v2+i%4)

位置的内存内容的结果异或
flag[i] ^= *((_BYTE *)&v2 + (signed int)i % 4);