找到mainactivity函数
1. 用户名和密码的检查
2. 密码的加密然后 - 1 的操作
for (int i = 0; i < bArr.length; i++) {
bArr[i] = (byte) (bArr[i] - 1);
}
这段代码通过遍历字节数组中的每个元素,将每个元素的值减去 1,并更新数组。这里的 byte
强制转换确保处理后的值仍然在字节的范围内(-128 到 127)。
找字符段strings.xml之类的
密文:3lkHi9iZNK87qw0p6U391t92qlC5rwn5iFqyMFDl1t92qUnL6FQjqln76l-P
passwd:c232666f1410b3f5010dc51cec341f58
package com.company;
public class HexByteManipulation {
public static void main(String[] args) {
// 定义原始的十六进制字符串
String hexString = "c232666f1410b3f5010dc51cec341f58";
// 将十六进制字符串转换为字节数组
byte[] bArr = hexStringToByteArray(hexString);
// 对每个字节执行加 1 操作
for (int i = 0; i < bArr.length; i++) {
bArr[i] = (byte) (bArr[i] + 1);
}
// 将修改后的字节数组转换回十六进制字符串
String resultHexString = byteArrayToHexString(bArr);
// 输出结果
System.out.println("原始十六进制字符串: " + hexString);
System.out.println("处理后的十六进制字符串: " + resultHexString);
}
// 将十六进制字符串转换为字节数组
public static byte[] hexStringToByteArray(String hexString) {
int len = hexString.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
+ Character.digit(hexString.charAt(i+1), 16));
}
return data;
}
// 将字节数组转换为十六进制字符串
public static String byteArrayToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}
转换完的passwd:c33367701511b4f6020ec61d35f259
密码为654321
nc 一下
换表base64
import base64
import string
string = "3lkHi9iZNK87qw0p6U391t92qlC5rwn5iFqyMFDl1t92qUnL6FQjqln76l-P"
tableBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
tableNew= "TGtUnkaJD0frq61uCQYw3-FxMiRvNOB/EWjgVcpKSzbs8yHZ257X9LldIeh4APom"
flag = base64.b64decode(string.translate(str.maketrans(tableNew, tableBase64)))
print (flag)
//{212f4548-03d1-11ec-ab68-00155db3a27e}