攻防世界-难度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模拟器
jadx
全局搜索username
可以看到验证用户名和密码在onClick函数,这应该是个事件函数,下次也可以试试直接搜索这个函数名称。
到这里有两个思路
- 直接寻找flag
- 通过用户名和密码的校验
用户名密码验证函数
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}
总结
- apk文件格式的了解
- jadx反编译apk
- 弱校验逻辑