First_Mobile(xman)

下载打开是一个安卓文件,那么直接拿去模拟器看看

接着分析源码:

package com.example.xman.easymobile;

public class encode {
    private static byte[] b;

    static {
        encode.b = new byte[]{23, 22, 26, 26, 25, 25, 25, 26, 27, 28, 30, 30, 29, 30, 32, 32};      ###静态变量的内容
    }

    public encode() {
        super();
    }

    public static boolean check(String arg7) {
        int v6 = 16;
        byte[] v1 = arg7.getBytes();        ##返回字符的ascii码值赋值给v1数组,将用户输入给v1
        byte[] v3 = new byte[v6];          ###将v3数组设置长度为16
        int v0;
        for(v0 = 0; v0 < v6; ++v0) {
            v3[v0] = ((byte)((v1[v0] + encode.b[v0]) % 61));      ###encode.b[v0]解密0号下标+用户输入返回字符的ascii码值数组的0号下标数值再跟61取余给v3
        }

        for(v0 = 0; v0 < v6; ++v0) {
            v3[v0] = ((byte)(v3[v0] * 2 - v0));      ###v3的0号下标数值*2再减去下标号            46*2=92
        }

        return new String(v3).equals(arg7) ;      ###返回是否v3等于arg7,也就是说arg7是用户输入
    }
}

此时,根据源代码,arg7=((encode.b[i]+arg7[i])%64)2-i,当encode.b[i]=23,i=0第一轮的时候;x=((23+x)%61)2-0手解方程v1=76,这就是这串check代码的逻辑了
我们现在写下脚本就行了,python脚本:

byte = [23, 22, 26, 26, 25, 25, 25, 26, 27, 28, 30, 30, 29, 30, 0x20, 0x20]
for i in range(16):
    for v1 in range(127):        ###因为ascii码,有效的范围到127
        if ((v1+byte[i])%61)*2-i == v1 :    
            print(chr(v1),end="")

posted @ 2021-03-01 16:14  网抑云黑胶SVIP用户  阅读(259)  评论(0编辑  收藏  举报