首页 > 其他分享 >攻防世界-难度1- easyEZbaby_app

攻防世界-难度1- easyEZbaby_app

时间:2024-04-26 18:34:22浏览次数:21  
标签:攻防 false app Java charArray easyEZbaby str sb return

攻防世界-难度1-easyEZbaby_app

文件格式

文件格式(APK, JAR, WAR, RAR)在不同的技术领域和应用场景中有着各自的作用和特点:

APK

  • 全称:Android Package
  • 用途:APK文件是Android平台上的应用程序包格式。它是一种压缩格式,包含了Android应用运行所需的所有文件,包括代码、资源、资产、证书等。
  • 使用场景:APK文件用于Android操作系统的应用分发和安装。开发者开发完Android应用后,会将其打包成APK文件,然后可以通过Google Play商店、其他Android应用市场或直接通过APK文件进行安装。

JAR

  • 全称:Java ARchive
  • 用途:JAR文件是Java平台的归档文件格式,用于打包Java类文件和应用程序所需的资源文件(如文本、图片等)。它基于ZIP文件格式。
  • 使用场景:JAR文件用于简化Java类的分发和部署。它们使得开发者可以将Java应用程序或库的所有组件打包在一个单独的文件中,便于运行和传输。JAR文件广泛用于Java桌面应用、工具库的分发等。

WAR

  • 全称:Web Application Archive
  • 用途:WAR文件是一种用于分发Java Web应用程序的文件格式。它是JAR文件的一种特殊形式,专门用于封装Web应用程序,包括JSP、Servlet、Java类、XML文件、静态Web页面(HTML、CSS、JavaScript等)和其他资源。
  • 使用场景:WAR文件主要用于Java EE(现在称为Jakarta EE)平台,用于部署到支持Java的Web服务器和应用服务器(如Apache Tomcat、JBoss等)。它提供了一种标准方式来打包Web应用程序,便于在服务器上部署和运行。

RAR

  • 全称:Roshal Archive
  • 用途:RAR是一种压缩文件格式,提供了高效的文件压缩和管理。它支持多卷压缩、密码保护等特性。
  • 使用场景:RAR文件用于数据压缩和归档,广泛应用于文件存储、传输和备份。与其他压缩格式(如ZIP)相比,RAR通常提供更高的压缩率和更强的加密功能。它适用于需要压缩大量数据或需要额外安全性的场合。

总结

这些文件格式各自服务于不同的技术领域和需求。
APK和WAR专注于特定平台(Android和Java Web平台)的应用分发和部署,而JAR提供了一种通用的Java应用和库的打包和分发机制。
RAR则是一个更通用的数据压缩和归档格式,适用于各种文件的压缩和传输需求。

mumu模拟器

image.png

jadx

全局搜索username
image.png
可以看到验证用户名和密码在onClick函数,这应该是个事件函数,下次也可以试试直接搜索这个函数名称。
到这里有两个思路

  1. 直接寻找flag
  2. 通过用户名和密码的校验

用户名密码验证函数

public boolean checkUsername(String str) {
    if (str != null) {
        try {
            if (str.length() != 0 && str != null) {
                MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                messageDigest.reset();
                messageDigest.update("zhishixuebao".getBytes());
                String hexString = toHexString(messageDigest.digest(), "");
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hexString.length(); i += 2) {
                    sb.append(hexString.charAt(i));
                }
                return (sb.toString()).equals(str);
            }
            return false;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
    return false;
}

checkUsername方法首先检查输入的字符串是否为null。如果不为null,它会尝试执行一系列操作。
首先,检查字符串是否为空,如果不为空,它会创建一个MessageDigest对象,用于计算字符串"zhishixuebao"的MD5哈希值。
然后,它将哈希值转换为十六进制字符串,并从中提取出每两个字符的第一个字符,将这些字符拼接成一个新的字符串。
最后,它将这个新的字符串与输入的字符串进行比较,如果相等,返回true,否则返回false。

public boolean checkPass(String str) {
    if (str == null) {
        return false;
    }
    char[] charArray = str.toCharArray();
    if (charArray.length != 15) {
        return false;
    }
    for (int i = 0; i < charArray.length; i++) {
        charArray[i] = (char) ((((255 - i) + 2) - 98) - charArray[i]);
        if (charArray[i] != '0' || i >= 15) {
            return false;
        }
    }
    return true;
}

checkPass方法首先检查输入的字符串是否为null。如果为null,返回false。
然后,它将输入字符串转换为字符数组,检查数组的长度是否为15。如果长度不为15,返回false。
接着,它遍历字符数组,对每个字符进行一系列的运算,然后检查运算结果是否为字符'0'。如果不是,或者数组的长度大于等于15,返回false。如果所有的字符都满足条件,返回true。

通过用户名和密码校验就可以了

题解

package com.ctf;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class Main {
    public static void main(String[] args) {
        checkUsername("zhishixuebao");
        for(int i=111; i>=97; i--){
            System.out.print((char) i);
        }
    }


    public static boolean checkUsername(String str) {
        if (str != null) {
            try {
                if (str.length() != 0 && str != null) {
                    MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                    messageDigest.reset();
                    messageDigest.update("zhishixuebao".getBytes());
                    String hexString = toHexString(messageDigest.digest(), "");
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < hexString.length(); i += 2) {
                        sb.append(hexString.charAt(i));
                    }
                    System.out.println(sb.toString());  //直接打印用户名
                    return (sb.toString()).equals(str);
                }
                return false;
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    public static boolean checkPass(String str) {
        if (str == null) {
            return false;
        }
        char[] charArray = str.toCharArray();
        if (charArray.length != 15) {
            return false;
        }
        for (int i = 0; i < charArray.length; i++) {
            charArray[i] = (char) ((((255 - i) + 2) - 98) - charArray[i]);
            if (charArray[i] != '0' || i >= 15) {
                return false;
            }
        }
        return true;
    }


    private static String toHexString(byte[] bArr, String str) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bArr) {
            String hexString = Integer.toHexString(b & 255);
            if (hexString.length() == 1) {
                sb.append('0');
            }
            sb.append(hexString);
            sb.append(str);
        }
        return sb.toString();
    }

}

flag{7afc4fcefc616ebdonmlkjihgfedcba}

总结

  1. apk文件格式的了解
  2. jadx反编译apk
  3. 弱校验逻辑

标签:攻防,false,app,Java,charArray,easyEZbaby,str,sb,return
From: https://www.cnblogs.com/Rainy-Day/p/18160653

相关文章

  • APP性能测试工具-prefdog
    APP性能测试的基本原理:在不同用户操作场景下通过监控APP的各项指标来识别和发现APP存在的代码质量问题并对程序进行修正和优化。 APP性能测试指标主要包括:响应、内存、CPU、FPS、GPU渲染、耗电、耗流等 冷启动:启动APP,后台无该APP进程热启动:启动APP,后台已经运行了该应用......
  • 什么是uniapp----分包
    前言还是同样的需求(uniapp的主包要求大小不得大于2MB),但是就算将能封装的都封装了还是会超过2MB,本文将介绍第二个优化点:分包开发一、什么是分包开发?有很多小伙伴一听分包开发认为就是多建几个文件夹,到时候引用就行了,说对对,但也不对,慢慢看下去就知道原因了:首先是官网的介绍:可......
  • 超实用的电脑桌面便签+待办清单app
    对于上班族来说,桌面便签加待办清单软件是提升工作效率的得力助手。想象一下,在繁忙的工作中,你能够快速记录重要事项,设置待办任务提醒,一切都能有条不紊地进行。这种便捷性,尤其在处理多项任务和紧急事务时,显得尤为重要。目前支持界面悬浮在桌面上显示,并且兼具便签记事、待办清单记录......
  • RocketMQLog:WARN No appenders could be found for logger (io.netty.channel.nio.Ni
    springBoot集成rocketMq启动的时候报RocketMQLog:WARNNoappenderscouldbefoundforlogger(io.netty.channel.nio.NioEventLoop). RocketMQLog:WARNPleaseinitializetheloggersystemproperly. 原因是pom中的rocket的依赖版本太高了。<dependency><groupI......
  • 攻防世界-难度1- toddler_regs
    攻防世界-难度1toddler_regs.zip运行ida静态分析shift+f12搜索字符串点过去F5先搞定g_team_idx,一路跟过去F5g_team_idx=23;还需要两个数组内容:team[]和teamjnu[],点过去就行了。只需要提取其中的内容就行了。注意字符串末尾是'\0',编写脚本时要注意这点team=......
  • uni-app的POST请求和GET请求
    uni-app就像一个盗版的Vue,和Vue很想,又不完全像//微信小程序post请求uni.request({url:'http://127.0.0.1:8000/api/test_post/',//Django后端API地址method:'POST',//指定请求类型(POST还是GET)data:{//数据都要放在这里,以键值对的方式......
  • 攻防世界-难度1- toddler_regs
    攻防世界-难度1toddler_regs.zip运行idashift+f12搜索字符串点过去F5先搞定g_team_idx,一路跟过去F5g_team_idx=23;还需要两个数组内容:team[]和teamjnu[],点过去就行了。只需要提取其中的内容就行了。注意字符串末尾是'\0',编写脚本时要注意这点team="""......
  • uniapp u-picker操作
    <textclass="font-28font-bold"><u-pickerv-model="date_show"mode="time":default-time='date_value':params="date_params"@confirm="date_confirm"></u-picker><......
  • 火山引擎VeDI:如何高效使用A/B实验,优化APP推荐系统
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群在移动互联网飞速发展的时代,用户规模和网络信息量呈现出爆炸式增长,信息过载加大了用户选择的难度,这样的背景下,推荐系统应运而生,为用户提供个性化的内容推荐。推荐系统在不断迭代中,其算法、策......
  • 攻防世界逆向-难度1- easyre-xctf
    攻防世界-难度1easyre-xctf.zipUpx壳这里先直接用工具脱壳,后面学会手动脱壳再回来补充。工具下载地址:https://down.52pojie.cn/?query=upxupx.exe-deasyre.exe再查一次,避免多重壳。逆向分析ida搜索字符串,shift+F12是flag的第2部分,现在查找第一部分。打开反汇编子......