软件密码破解-1
放到detectit中查看文件的类型,发现是MFC微软的win32编程,建议od动态调试,放到peid中查询,没有加密函数。
放到ida中只能看到有一堆的函数,winmain也没有足够的信息。字符串中也没有找到有关flag的字符。只能转战od动态调试。
在od中右键中文搜索引擎中的智能搜索有意外的发现。
发现了可能有关flag的地方,在这里下一个断点,然后向上寻找线索。
这时候需要运行然后顺着断点的地方向上找到输入的地方,在这里
解读下上面的汇编,输入的地址放入了ebx中,ptr ds:[ebx]可以调用你输入的字符串,然后把ebx赋给eax,重点是60到67的循环,用ptr ds:[ecx+eax]的字符串放到dl中(查看ptr ds:[eax+ecx]的方法是先把鼠标放到你要查的位置上然后右键数据窗口中跟随,选择内存地址便可以再左下角的内存窗口上查看),然后让dl与ptr ds:[eax]的字符串进行异或,eax刚才被ebx赋值了,也就是说ptr ds:[eax]就是你所输入的字符串,它与系统中的某组字符串进行了异或。再往下有几个cmp的比较,是用你输入的经过异或变换的字符串与所显示的字符串进行比较,这些所显示出来的数字因为是小端序排列的所以,要进行变换顺序才能进行正常比较(写脚本的时候注意)。
脚本如下:
flag=''
a=[0x28,0x57,0x64,0x6b,0x93,0x8f,0x65,0x51,0xe3,0x53,0xe4,0x4e,0x1a,0xff]
b=[0x1b,0x1c,0x17,0x46,0xf4,0xfd,0x20,0x30,0xb7,0xc,0x8e,0x7e,0x78,0xde]
for i in range(len(a)):
flag+=chr(a[i]^b[i])
print(flag)
flag是3Ks-grEaT_j0b!
findkey
这是一个pyc文件是由python语言写成的,直接使用python在线反编译就可以看到源码,由于结构太简单了就不贴了,方法是脚本爆破,直接上脚本就好了:
lookup = [
196,
153,
149,
206,
17,
221,
10,
217,
167,
18,
36,
135,
103,
61,
111,
31,
92,
152,
21,
228,
105,
191,
173,
41,
2,
245,
23,
144,
1,
246,
89,
178,
182,
119,
38,
85,
48,
226,
165,
241,
166,
214,
71,
90,
151,
3,
109,
169,
150,
224,
69,
156,
158,
57,
181,
29,
200,
37,
51,
252,
227,
93,
65,
82,
66,
80,
170,
77,
49,
177,
81,
94,
202,
107,
25,
73,
148,
98,
129,
231,
212,
14,
84,
121,
174,
171,
64,
180,
233,
74,
140,
242,
75,
104,
253,
44,
39,
87,
86,
27,
68,
22,
55,
76,
35,
248,
96,
5,
56,
20,
161,
213,
238,
220,
72,
100,
247,
8,
63,
249,
145,
243,
155,
222,
122,
32,
43,
186,
0,
102,
216,
126,
15,
42,
115,
138,
240,
147,
229,
204,
117,
223,
141,
159,
131,
232,
124,
254,
60,
116,
46,
113,
79,
16,
128,
6,
251,
40,
205,
137,
199,
83,
54,
188,
19,
184,
201,
110,
255,
26,
91,
211,
132,
160,
168,
154,
185,
183,
244,
78,
33,
123,
28,
59,
12,
210,
218,
47,
163,
215,
209,
108,
235,
237,
118,
101,
24,
234,
106,
143,
88,
9,
136,
95,
30,
193,
176,
225,
198,
197,
194,
239,
134,
162,
192,
11,
70,
58,
187,
50,
67,
236,
230,
13,
99,
190,
208,
207,
7,
53,
219,
203,
62,
114,
127,
125,
164,
179,
175,
112,
172,
250,
133,
130,
52,
189,
97,
146,
34,
157,
120,
195,
45,
4,
142,
139]
pwda = [
188,
155,
11,
58,
251,
208,
204,
202,
150,
120,
206,
237,
114,
92,
126,
6,
42]
pwdb = [
53,
222,
230,
35,
67,
248,
226,
216,
17,
209,
32,
2,
181,
200,
171,
60,
108]
flag=''
for i in range(0,17):
for x in range(0,255):
if (x + pwda[i] & 255) == lookup[i+pwdb[i]]:
flag+=chr(x)
flag=flag[::-1]
print(flag)