本帖最后由 正己 于 2020-11-21 14:16 编辑
前言:
软件不难,只是简单地做个笔记。
软件链接:飞机票
过程:
首先打开软件,康康有什么提醒
接着根据关键字进行字符串搜索(MT用习惯了,大佬勿喷)
然后找到对应的类转JAVA看一下
package com.example.yaphetshan.tencentgreat;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.view.View;
import android.widget.Toast;
class MainActivity$1 implements View.OnClickListener {
final /* synthetic */ MainActivity this$0;
MainActivity$1(MainActivity this$02) {
this.this$0 = this$02;
}
//关键方法
public void onClick(View v) {
try {
String inputString = this.this$0.text.getText().toString(); //获取输入的值
PackageInfo pinfo = this.this$0.getPackageManager().getPackageInfo("com.example.yaphetshan.tencentgreat", 16384); //获取包名信息
String versionCode = pinfo.versionName; //获取获取版本名
int versionName = pinfo.versionCode; //获取获取版本号
int i = 0;
while (i < inputString.length() && i < versionCode.length()) {//判断输入的长度跟版本名长度是否相同
if (inputString.charAt(i) != (versionCode.charAt(i) ^ versionName)) { //判断输入的字符串的每一个字符是否都等于版本名与版本号的异或值相等
Toast.makeText(this.this$0, "再接再厉,加油~", 1).show();
return;
}
i++;
}
if (inputString.length() == versionCode.length()) {
Toast.makeText(this.this$0, "恭喜开启闯关之门!", 1).show();
return;
}
} catch (PackageManager.NameNotFoundException e) {
}
Toast.makeText(this.this$0, "年轻人不要耍小聪明噢", 1).show();
}
}
由此可知,我们要的flag就是版本名和版本号异或的值。
打开idle,写一个异或的计算,代码如下:
str = "X<cP[?PHNB<P?aj" #传入版本名
for i in str: #对版本名进行循环
sum = ord(i)^15 #sum接收i的每个字符串转ASCII数值并与版本号进行异或的值
print(chr(sum),end='') #把sum的值转字符串并拼接
然后我们看一下输出的值
最后:
在app输入我们计算出来的值,很明显我们的思路是对的。
|