【re】BUUCTF Java逆向解密

题目:BUUCTF Java逆向解密


没壳,是java文件(大概)
ida打开看不懂,找了网页上的java反编译
Decompiler.com
没用过java啊…暂且用sublime打开
还好还挺好懂的

import java.util.ArrayList;
import java.util.Scanner;

public class Reverse {
   public static void main(String[] args) {
      Scanner s = new Scanner(System.in);
      System.out.println("Please input the flag :");
      String str = s.next();
      System.out.println("Your input is :");
      System.out.println(str);
      char[] stringArr = str.toCharArray();//大概是输入的字符串转字符数组?
      Encrypt(stringArr);
   }

   public static void Encrypt(char[] arr) {
      ArrayList<Integer> Resultlist = new ArrayList();

      for(int i = 0; i < arr.length; ++i) {
         int result = arr[i] + 64 ^ 32;
         Resultlist.add(result);
      }

      int[] KEY = new int[]{180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};
      ArrayList<Integer> KEYList = new ArrayList();

      for(int j = 0; j < KEY.length; ++j) {
         KEYList.add(KEY[j]);
      }
      //KEYList和KEY的元素完全相同,就是一个是ArrayList<Integer>一个是int数组(?

      System.out.println("Result:");
      if (Resultlist.equals(KEYList)) {//Resultlist和KEYList相同
         System.out.println("Congratulations!");
      } else {
         System.err.println("Error!");
      }

   }
}

唯一有的说的就是那句

int result = arr[i] + 64 ^ 32;

注意加优先级比异或高,逆推得到

arr[i] = (result ^ 32) - 64

写代码!

int a[] = {180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};
    for (int i = 0; i < sizeof(a) / sizeof(int); i++)
		cout << char((a[i] ^ 32) - 64); 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值