【攻防世界】Mobile系列之app1
使用jadx反汇编该app,查看MainActivity类,逻辑判断代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| public class MainActivity extends AppCompatActivity { Button btn; public final String pName = BuildConfig.APPLICATION_ID; EditText text;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.btn = (Button) findViewById(R.id.checBtn); this.text = (EditText) findViewById(R.id.input); this.btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { try { String inputString = MainActivity.this.text.getText().toString(); PackageInfo pinfo = MainActivity.this.getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, 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(MainActivity.this, "再接再厉,加油~", 1).show(); return; } i++; } if (inputString.length() == versionCode.length()) { Toast.makeText(MainActivity.this, "恭喜开启闯关之门!", 1).show(); return; } } catch (PackageManager.NameNotFoundException e) { } Toast.makeText(MainActivity.this, "年轻人不要耍小聪明噢", 1).show(); } }); } }
|
上述代码中只要使得输入的字符串长度和versionCode.length()相等时,即弹窗成功。根据代码分析可推出versionCode字段对应的字符串保存在BuildConfig中
可以得出versionCode字符串为**”X<cP[?PHNB<P?aj”**,versionName为15
我们这里需要对字符串进行变化处理,可以看到代码中的一行判断语句
1
| if (inputString.charAt(i) != (versionCode.charAt(i) ^ versionName))
|
这是对字符串和15进行了异或处理
代码逆向
1 2 3 4 5 6
| versioncode = 15 versionName = 'X<cP[?PHNB<P?aj' result = '' for i in versionName: result +=chr( ord(i) ^ versioncode) print(result)
|
得出结果为W3l_T0_GAM3_0ne