题目下载地址:
https://wwi.lanzoub.com/b0mc1o6sj
密码:8oiq
压缩密码:52pj
1. 先观察样本信息:
里面有一个jar文件,有点意思

image.png (61.86 KB, 下载次数: 2)
下载附件
2025-10-16 14:09 上传
2. 拖入IDA分析
原来是启动了一个java的进程

image.png (39.02 KB, 下载次数: 2)
下载附件
2025-10-16 14:12 上传
我们需要找到启动的命令行

image.png (37.21 KB, 下载次数: 2)
下载附件
2025-10-16 14:14 上传
3. x64找一下进程
就是把exe当成一个jar执行
java -jar xxx.exe

image.png (103.51 KB, 下载次数: 1)
下载附件
2025-10-16 14:15 上传
4. 分离jar
根据第一步的偏移地址直接从二进制文件中提取jar文件

image.png (15.14 KB, 下载次数: 2)
下载附件
2025-10-16 14:17 上传
5. jadx启动
定位到关键函数

image.png (73.95 KB, 下载次数: 1)
下载附件
2025-10-16 14:19 上传
6. AI启动
AI大法好,直接把源代码仍给AI,编写一个暴力破解代码:
这里需要注意一下,因为代码中使用了java特有的Integer.rotateLeft,在使用python的时候需要特殊处理
AI搞错了好几次
JAVA版本:
[Java] 纯文本查看 复制代码import java.util.Arrays;
public class FlagCracker {
private static final int[] ENC_FLAG = {
87, 107, 28, 196, 205, 202, 197, 108, 158, 219, 94, 237, 119, 242, 101, 9,
161, 166, 16, 132, 96, 104, 183, 187, 163, 103, 121, 195, 27, 193, 141, 245,
226, 2, 177, 177, 99, 182
};
private static int dynamicKey(int index, int round) {
int key = index;
for (int i = 0; i
Python版本:
[Python] 纯文本查看 复制代码# 加密的flag数组
ENC_FLAG = [87, 107, 28, 196, 205, 202, 197, 108, 158, 219, 94, 237, 119, 242, 101, 9,
161, 166, 16, 132, 96, 104, 183, 187, 163, 103, 121, 195, 27, 193, 141, 245,
226, 2, 177, 177, 99, 182]
def java_rotate_left(val, distance):
"""精确模拟Java的Integer.rotateLeft"""
# Java的rotateLeft是循环左移,处理32位整数
distance &= 0x1F # 距离取模32
return ((val > (32 - distance))) & 0xFFFFFFFF
def java_rotate_right(val, distance):
"""精确模拟Java的Integer.rotateRight"""
# Java的rotateRight是循环右移,处理32位整数
distance &= 0x1F # 距离取模32
return (((val & 0xFFFFFFFF) >> distance) | (val
7. 结果如下:

image.png (7.91 KB, 下载次数: 0)
下载附件
2025-10-16 14:27 上传