buu-java-xor WriteUp


JAVA

一开始使用IDA查看,栈内操作比较复杂,再加上Optimized-out的东西较多,看不出来。 后来使用JD-GUI,得到代码。

public static void Encrypt(char[] arr) {
  ArrayList<Integer> Resultlist = new ArrayList<>();
  for (int i = 0; i < arr.length; i++) {
    int result = arr[i] + 64 ^ 0x20;
    Resultlist.add(Integer.valueOf(result));
  } 
对字符串进行了加密操作。 一开始想当然的写出原文生成代码
#include <iostream>
#include <cstring>
#include <string>
#include <iomanip>

using namespace std;

int s[] = {
	180, 136, 137, 147, 191, 137, 147, 191, 148, 136,
	133, 191, 134, 140, 129, 135, 191, 65
};

int main()
{
	for (int i = 0; i <= end(s) - begin(s); i++)
		cout << (char)(s[i] - 64 ^ 0x20);
	return 0;
}

朴素地认为,把加号改成减号就好, #### 这样做可以得到正确的答案,但是思路是绝对错误的 但是此题通过之后才发现+ -的优先级比异或的高 就代表: 在位运算下, 成立

c的那位会来回翻转,没有系数的话 偶数XOR 操作就可,再用

约束“撞”位操作即可。

(这里可以把XOR理解为不会影响其他位的加法溢出) 但需要说明的是需要括号内的条件防止操作进位破坏其他高位数据。


文章作者: sfc9982
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 sfc9982 !
  目录