攻防世界——easyEZbaby_app

下载完成后是个apk文件,也就是这道题是安卓逆向

需要使用到的工具:

jadx,或者jbe这些都可以在52pojie上面搜到

我用jadx来进行的操作

攻防世界——easyEZbaby_app_第1张图片

这个文件一般是窗口界面,点击

然后中间这个

一般就是主函数(师傅说的)

攻防世界——easyEZbaby_app_第2张图片

然后就到了这个界面

攻防世界——easyEZbaby_app_第3张图片

很明显就锁定到了这个地方

我们可以发现 flag是由obj1和obj2组成

可以发现obj1是用户名,obj2是密码

攻防世界——easyEZbaby_app_第4张图片

在主函数下面紧跟着就是这两个函数

我们先来看用户名部分

 public boolean checkUsername(String str) {
        if (str != null) {
            try {
                if (str.length() != 0 && str != null) {
                    MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                    messageDigest.reset();
                    messageDigest.update("zhishixuebao".getBytes());
                    String hexString = toHexString(messageDigest.digest(), "");
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < hexString.length(); i += 2) {
                        sb.append(hexString.charAt(i));
                    }
                    String sb2 = sb.toString();
                    return (sb2).equals(str);
                }
                return false;
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

很明显的MD5(它说的),然后加密的内容就是“zhishixuebao”

MD5加密

import hashlib
flag='zhishixuebao'
x = hashlib.md5(flag.encode("utf8"))#md5和类似的,就讲sha1更换就行
y = x.hexdigest()
print(y)

得到这个:7da5fec345fecde5fdcd641f68e0b6d1

我们继续观察可以看见,这个是跳着取的

在for循环中,i+=2

一个简单的脚本拿下

p='7da5fec345fecde5fdcd641f68e0b6d1'
flag=''
for i in range(0,len(p),2):
    flag+=p[i]
print(flag)

得到:7afc4fcefc616ebd

我们再来看password

public boolean checkPass(String str) {
        if (str != null) {
            char[] charArray = str.toCharArray();
            if (charArray.length != 15) {
                return false;
            }
            for (int i = 0; i < charArray.length; i++) {
                charArray[i] = (char) ((((255 - i) + 2) - 98) - charArray[i]);
                if (charArray[i] != '0' || i >= 15) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

可以看见长度为15,然后

这是主要的函数

可以知道最后通过这个算法得到的都是'0'(47)

脚本安排:

flag=''
for i in range(15):
    t=((255-i)+2)-98-48
    flag+=chr(t)
print(flag)

得到:onmlkjihgfedcba

那么flag{7afc4fcefc616ebdonmlkjihgfedcba}

攻防世界——easyEZbaby_app_第5张图片

直接拿下!

你可能感兴趣的:(java,android,前端,网络安全)