这个polar的re感觉质量好低,不是太简单就是太恶心,写了5道不想写了QAQ

test

用apktool解包,在assets文件中把zip文件名改成png得到flag

1
flag{money_is_nothing}

这题被坑了一个晚上,因为一开始尝试静态分析一关一关过,结果解包之后flag在图片里面,之后看到这种可以逆出资源的可以先尝试把资源找出来,说不定就是flag,建议把这道题放到misc

老八小冒险

这个题挺简单的,甚至都是原始工程文件,没有打包也不用解包

直接用rpgmaker vx ace打开,直接看事件就好了

jbkjckjsdsfdsfjbkjckj的md5

1
flag{60b6cd0848639100c68c04d4884db1e8}

逢七必变

第一次见到aspack壳,尝试搜索工具脱壳,找到了,那么就直接使用,结果工具有问题,看来还是要一步一步调

打开之后,里面的代码好像很奇怪,代码看不懂,一开始call然后又返回,不理解,esp定律一开始也不好使/

好吧,因为这个特征不一样,这个aspack壳的特点是一开始popad,然后call,最后popad,然后ret,在popad完对esp下断点然后点击运行,可以直接到ret的位置,之后f7一下,应该可以到一个call加jmp的位置,这里就是oep

image-20240304193949183

在这个位置dump,然后打开dump的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int __cdecl main(int argc, const char **argv, const char **envp)
{
signed int len; // kr00_4
signed int i; // [esp+14h] [ebp-110h]
char v6[256]; // [esp+20h] [ebp-104h] BYREF

strcpy(v6, "akf`|7fda1005c?1b253bc17346b5c77bab?0z");
memset(&v6[39], 0, 0xD9u);
len = strlen(v6);
for ( i = 0; i < len; ++i )
v6[i] ^= 7u;
sub_5F1040("You got it!!!");
return 0;
}

然后有手就行了

1
flag{0acf6772d86e524ed60431e2d00efe87}

高卢战记

直接ida打开obj文件,看main函数

1
6f759f8f7:deg::796486<8<8edf9:73

只有一个这个然后就输出了这个

一开始看不懂

结果。。因为《高卢战记》是凯撒写的,书里面用的3的位移,所以要用-3

这样接出来就是flag

1
flag{3c426c5c47abd774631539595bac6740}

真恶心,为什么不是misc

最短路

直接得到最短26

画图或者ai(比ai还快)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from prism import *


import heapq

def dijkstra(graph, start, end):
heap = [(0, start)]
distances = {node: float('infinity') for node in graph}
distances[start] = 0
paths = {start: []}

while heap:
(dist, current) = heapq.heappop(heap)
if dist > distances[current]:
continue
for neighbor, neighbor_dist in graph[current].items():
old_dist = distances[neighbor]
new_dist = dist + neighbor_dist
if new_dist < old_dist:
distances[neighbor] = new_dist
paths[neighbor] = paths[current] + [neighbor]
heapq.heappush(heap, (new_dist, neighbor))
return distances[end], paths[end]

# 定义图的边和权重
graph = {
1: {2: 2, 3: 3},
2: {3: 5, 4: 3, 10: 20},
3: {5: 6, 8: 5},
4: {5: 7},
5: {9: 4, 8: 1},
6: {7: 3},
7: {14: 6},
8: {11: 5, 15: 21},
9: {12: 5},
10: {},
11: {15: 13},
12: {15: 9},
14: {15: 7},
15: {}
}

# 执行Dijkstra算法
distance, path = dijkstra(graph, 1, 15)

# 输出结果
print(f"最短距离: {distance}")
print(f"路径: {' -> '.join(map(str, path))}")
pmd5("1381115")
1
flag{4991ce1781b53409a7a84e2baf9431d6}