easy200(LCTF)BugKu逆向

这是一道apk,安卓方面的题,使用手机下载下来,点击运行,要输入东西,输入后但是找不到提交键,只有右下角点击就会直接退出,不知道是设计的问题还是专门来考我们的。。。。
在这里插入图片描述
接着我就直接用JADX进行反编译,一共有五个Java模块,一个一个的看发觉有用的有三个。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
分别是MainActivity、Check、Format
MainActivity是主函数:
先是从onCreate开始,其中有button(可以估计是出题人忘了添加按键),这个函数操作我觉得没用(实际不影响结果)
然后就是跳转到onClick,判断你输入的数不能小于35大于39,然后就是调用Format模块中的Form截取下标(5,38),接下来还判断不能小于32
要是要得到正确答案,又要调用Check模块中的check,其实当中是反复调用,几乎都使用了一遍Check,要返回true。
最后感觉只是规定长度,总长度在(0,35-39),因为去掉flag{},刚好就是(5,38),长度还要大于32,就只能是38
没有信息了,然后就使用IDA打开so文件进行分析(要用apktool反编译,so在生成的文件夹/lib/选择你的IDA对应版本文件的so打开)
在这里插入图片描述在这里插入图片描述
找到一长串显眼的字符串,可以明显得到第二个字符串是base64加密,调用同一函数,那第一个字符串估计也是base64加密
1.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;
2.base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号);
3.等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
然后分析得到字符串还进行了反转,终于得到全部的信息,于是
我们可以在线base64解密,然后倒着输入得到flag
在这里插入图片描述
我们也可以直接编程得到最后flag。
注意:要把最后一个点改成等于。
在这里插入图片描述

import java.util.Base64;

public class WantAShell {
	
	public static String s="dHR0dGlldmFodG5vZGllc3VhY2VibGxlaHNhdG5hd2k=";
//  	//String to byte
//		byte[] s=s.getBytes();
//		//byte to String
//  	String s = new String(bytes);
	
	//加密
//	public static byte[] encoder() {
//	    //String to byte
//		byte[] s1=s.getBytes();
//		s1=Base64.getEncoder().encode(s1);
//		return s1;
//	}
	
	//解密
	public static byte[] decoder() {
		//String to byte
		byte[] s1=s.getBytes();
		s1=Base64.getDecoder().decode(s1);
		return s1;
	}
	
	public static void main(String[] args) {
		//byte to String
		String s2=new String(decoder());
		char[] chars = s2.toCharArray();
	    String result = "";
		int size=s2.length();
		for(int i=size-1;i>=0 ;i--) {
			result += chars[i];
		}
		
		System.out.println(s2);
		System.out.println(result);
	}
}

Flag为flag{iwantashellbecauseidonthaveitttt}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值