BUUCTF Re部分wp (java/apk特别篇)

先推荐一下GDAhttps://bbs.pediy.com/thread-220111.htm

Java逆向解密

class,找了个在线网站:http://javare.cn

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 Resultlist = new ArrayList();

      for(int KEY = 0; KEY < arr.length; ++KEY) {
         int KEYList = arr[KEY] + 64 ^ 32;
         Resultlist.add(Integer.valueOf(KEYList));
      }

      int[] var5 = new int[]{180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65};
      ArrayList var6 = new ArrayList();

      for(int j = 0; j < var5.length; ++j) {
         var6.add(Integer.valueOf(var5[j]));
      }

      System.out.println("Result:");
      if(Resultlist.equals(var6)) {
         System.out.println("Congratulations锛�");
      } else {
         System.err.println("Error锛�");
      }

   }
}
a=[180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
b=[]
for i in range(len(a)):
    b.append(a[i]-64^32)
for i in b:
    print(chr(i),end="")

findit

apk,使用GDA打开,找到mainactivity

有两个数组,找到

 

 变形的凯撒密码

a=[0x0054,0x0068,0x0069,0x0073,0x0049,0x0073,0x0054,0x0068,0x0065,0x0046,0x006c,0x0061,0x0067,0x0048,0x006f,0x006d,0x0065]
x=""
b=[0x0070,0x0076,0x006b,0x0071,0x007b,0x006d,0x0031,0x0036,0x0034,0x0036,0x0037,0x0035,0x0032,0x0036,0x0032,0x0030,0x0033,0x0033,0x006c,0x0034,0x006d,0x0034,0x0039,0x006c,0x006e,0x0070,0x0037,0x0070,0x0039,0x006d,0x006e,0x006b,0x0032,0x0038,0x006b,0x0037,0x0035,0x007d]
for i in range(len(a)):
    x+=chr(a[i])
print(x)
x=""
for i in range(len(b)):
    if(chr(b[i]).isalpha()):
        x+=chr(b[i]-10)
    else:
        x+=chr(b[i])
print(x)

简单注册器

GDA打开

a="dd2940c04462b4dd7c450528835cca15"
x=[]
for i in a:
    x.append(i)
x[2]=chr(ord(x[2])+ord(x[3])-50);
x[4]=chr(ord(x[2])+ord(x[5])-48);
x[30]=chr(ord(x[31])+ord(x[9])-48);
x[14]=chr(ord(x[27])+ord(x[28])-97);
print(x)
for i in range(31,-1,-1):
    print(x[i],end="")

相册

apk病毒,要求找到邮箱,拖进GDA

Malscan看看

 没找到邮箱相关,但从类里找到一个Mail类

 按x查看交叉引用找到

 去c2看看

NativeMethod,要去so里找找base64密文

[SCTF2019]Strange apk

拖进GDA

 这里对一个名为data的文件进行了操作

public byte[] c.__(String fileName)    //method@3ebd
{
   InputStream in = in.open(fileName);
   int lenght = in.available();
   byte[] buffer = new byte[lenght];
   in.read(buffer);
   return buffer;
}

private void c._(byte[] apkdata)    //method@3ebb
{
   apkdata = this._0_(apkdata);
   File file = new File(this.apkFileName);
   FileOutputStream localFileOutputStream = new FileOutputStream(file);
   localFileOutputStream.write(apkdata);
   localFileOutputStream.close();
   return;
}

private byte[] c._0_(byte[] srcdata)    //method@3ebc
{
   String src = "syclover";
   for (int i = 0;i < srcdata.length();i++) {    
      srcdata[i]=(byte)(src.charAt((i%src.length()))^srcdata[i]);
   }    
   return srcdata;
}

在assets里找到data文件

x=b"syclover"
with open(r"data","rb") as f:
    f=f.read()
with open(r"data_","wb") as F:
    for i in range(len(f)):
        F.write((f[i]^x[i%len(x)]).to_bytes(length=1, byteorder='big'))

得到文件为zip,后缀改为apk拖进GDA

有两处加密

 

 找到调用的位置

出题者大概是写错了%,只要把“8”去除就行了

[BSidesSF2019]blink

拖进GDA,main中没看到什么,在函数列表上翻翻

有个图片,解得flag

原文地址:https://www.cnblogs.com/harmonica11/p/13126647.html