版权声明:本文为博主原创,未经博主允许不得转载。 https://blog.csdn.net/one_of_a_kind/article/details/83757843
basic
Baby’s Crack
程序大概就是打开一个命令行输入的 file,然后打开一个 tmp,对 file 加密写入 tmp,将 file 删除,将 tmp 重命名为 file。
直接在 ida 中 F5,关键的代码就是:
while (feof(*(_QWORD *)&argc, argv, v8, v16) == 0) {
v17 = fgetc(*(_QWORD *)&argc, argv, v9, v16);
if (v17 != -1 && v17) {
if (v17 > 47 && v17 <= 96) {
v17 += 53;
}
else if (v17 <= 46) {
v17 += v17 % 11;
}
else {
v17 -= v17 % 61;
}
fputc(*(_QWORD *)&argc, argv, v15, (unsigned int)v17);
}
我们用 python 对所有 ascii 字符进行加密,然后对照这个密码表,对密文进行解密就行了:
s = "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
for i in range(len(s)):
o = ord(s[i])
if o > 47 and o <= 96:
o += 53
elif o <= 46:
o += o % 11
else:
o -= o % 61
print( s[i] + " " + chr(o))
部分输出是这样的:
......
- .
. 0
/
0 e
1 f
2 g
3 h
4 i
5 j
6 k
7 l
8 m
9 n
: o
; p
< q
= r
> s
? t
@ u
A v
B w
C x
D y
E z
F {
G |
H }
I ~
J
K €
L
M ‚
.....
对照这个密码表,对密文进行解密即可,然后得到的十六进制转换为字符就行了
Easy RSA
推荐看看这个 https://www.anquanke.com/post/id/84632
这里给出一般化脚本,egcd 是拓展欧几里得算法,modinv 是求逆元。
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
temp = a % b
a = b
b = temp
return a
def egcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, y, x = egcd(b % a, a)
return (g, x - (b // a) * y, y)
def modinv(a, m):
g, x, y = egcd(a, m)
if g != 1:
raise Exception('modular inverse does not exist')
else:
return x % m
n = ****
p = ****
q = ****
print((p-1)*(q-1))
e = ****
#d = modinv(e, (p-1)*(q-1))
#print(d)
print(hex(pow(c, d, n)))
Secret
在响应报文里的头部里有个 Secret
veryeasyRSA
同样使用 easy rsa 的那个脚本即可
段子
baidu 吧
USS
Ubiquitous System Security Lab
base64?
base32解码 http://tomeko.net/online_tools/base32.php?lang=en
然后 hex to ascii