bugku-re-First_Mobile


直接反编译看mainactivity。监听,把输入的字符串传给encode.check()检查
1.png

跟到encode里

input是接收str转成的数组
b是已经有的数组
temp是空的16位的数组

在经过了运算之后temp[i]=((input[i]+b[i])%61)*2-i
如果temp和str还相等,就返回true,输出correct。

2.png


写个脚本
这个脚本是直接跑的,把每一位依次比较,正确就转成字母输出
这里的80可以往大里改,算是爆破出来的
参见

1
2
3
4
5
str1=[23, 22, 26, 26, 25, 25, 25, 26, 27, 28, 30, 30, 29, 30, 0x20, 0x20]
for i in range(16):
for j in range(80):
if((j+str1[i])%61)*2-i==j:
print(chr(j),end="")

3.png


另一种脚本的写法
也是爆破的,生成了所以的大小写和数字,一位一位爆破。
参见

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import string
b = [ 0x17, 0x16,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1b,0x1c,0x1e,0x1e,0x1d,0x1e,0x20,0x20]
i=0
v6=16
tmp=""
strall=string.ascii_letters+string.digits #生成所有的大小写字符和数字。给下面循环中
while i<v6:
for a in strall:
tmp1 = ord(a)
tmp2 = ((ord(a)+b[i])%(0x3d))*2-i #0x3d=十进制的61
if tmp1==tmp2:
tmp+=a
i+=1
break
else:
continue
print(tmp)

4.png