本文地址:https://blog.csdn.net/qq_40785165/article/details/113586501,转载需附上此地址
大家好,我是小黑,一个还没秃头的程序员~~~
命运如同手中的掌纹,无论多曲折,终掌握在自己手中。
攻防世界是一个网络安全答题平台,今天去玩了新手区mobile篇第一题App1,觉得还是蛮有意思的,所以认真记录一下第一次玩这种游戏
进去mobile新手区选择App1,只有个附件可以下载
下载附件后是一个apk,安装到手机后运行了一下,发现只有个编辑框和按钮,根据不同的输入会有不同的反馈,效果如下图
看来只有输入正确的值才能通过,也就是解出flag,这就要知道这些反馈的来源了,把apk扔进jadx-gui中反编译后,搜索那些提示语,找到MainActivity代码,如下图所示:
图中有两个关键的参数,即versionCode和versionName(源码中好像故意把值写反了),点击APPLICATION_ID到BuildConfig文件,得到这两个参数的值,如下图所示:
看代码得知,需要用输入的字符串每一位与一个值相等才能成功,那个值就是一个异或的值,看到这里就很清楚了,写段代码拼接一下这些异或的值就行了,代码如下:
public class App1 {
public static String versionCode = "X<cP[?PHNB<P?aj";
public static int versionName = 15;
public static void main(String[] args) {
String flag = "";
for (int i = 0; i < versionCode.length(); i++) {
flag += (char) (versionCode.charAt(i) ^versionName );
}
System.out.println(flag);
}
}
输出flag=W3l_T0_GAM3_0ne,闯关成功!