题目

CSDN免积分下载

查壳

先查壳(PKiD等),有壳脱壳,没壳用AndroidKiller等反编译工具打开查看JAVA代码
无壳APK

Java Decompiler - MainActivity-onCreate

image.png

答案

W3l_T0_GAM3_0ne

Writeup

解题

运行

image.png

解题思路

搜索字符串

使用反编译工具的字符串搜索功能,搜索运行后失败的提示字符串(转化为Unicode)“再接再厉”:
image.png
在Java Decompiler中,找到该class文件查看代码。

MainActivity

搜不出来或者没有思路时,应该先看Android程序的入口——也就是MainActivity函数。

代码逻辑

MainActivity

  1. public void onClick(View paramAnonymousView)
  2. {
  3. for (;;)
  4. {
  5. try
  6. {
  7. str1 = MainActivity.this.text.getText().toString();
  8. paramAnonymousView = MainActivity.this.getPackageManager().getPackageInfo("com.example.yaphetshan.tencentgreat", 16384);
  9. str2 = paramAnonymousView.versionName;
  10. int i = paramAnonymousView.versionCode;
  11. j = 0;
  12. if ((j >= str1.length()) || (j >= str2.length()))
  13. {
  14. continue;
  15. }
  16. if (str1.charAt(j) != (str2.charAt(j) ^ i))
  17. {
  18. Toast.makeText(MainActivity.this, "再接再厉,加油~", 1).show();
  19. return;
  20. }
  21. }
  22. catch (PackageManager.NameNotFoundException paramAnonymousView)
  23. {
  24. String str1;
  25. String str2;
  26. int j;
  27. Toast.makeText(MainActivity.this, "年轻人不要耍小聪明噢", 1).show();
  28. continue;
  29. }
  30. j++;
  31. continue;
  32. if (str1.length() != str2.length())
  33. {
  34. continue;
  35. }
  36. Toast.makeText(MainActivity.this, "恭喜开启闯关之门!", 1).show();
  37. }
  38. };

核心逻辑为:

if (str1.charAt(j) != (str2.charAt(j) ^ i))

str2为密文,i为密钥,赋值代码为:

paramAnonymousView = MainActivity.this.getPackageManager().getPackageInfo("com.example.yaphetshan.tencentgreat", 16384);
str2 = paramAnonymousView.versionName;
int i = paramAnonymousView.versionCode;

packageManager.getPackageInfo

值被藏在的包信息(PackageInfo)中,通过“getPackageManager().getPackageInfo”获取包信息结构体,而后获取其中的“versionName”=“Ximage.png

解题方法

【🐷偷懒高效推荐💤】在线编码转化

  1. 使用CyberChef的XOR异或功能
  2. Key的类型选十进制的Decimal,填“15”(默认选Hex,填F)
  3. 得flag&input=WDxjUFs/UEhOQjxQP2Fq):

image.png

【👩‍💻练Python推荐⌨】Python脚本🐍

def Xor(str):
    key = 15
    strXOR = ""
    for i in range(len(str)):
        strXOR += chr(ord(str[i]) ^ key)
    return strXOR

strEncode ="X<cP[?PHNB<P?aj"
flag = Xor(strEncode)

print("Flag:" + flag)

💯恭喜开启闯关之门!💯

image.png