boomshakalaka

public class FirstTest extends Cocos2dxActivity {
    static {
        System.loadLibrary("cocos2dcpp");
    }

    public FirstTest() {
        super();
    }

    protected void onCreate(Bundle arg5) {
        super.onCreate(arg5);
        new a(((Context)this), "flag").d("YmF6aW5nYWFhYQ==");
        new a(((Context)this), "Cocos2dxPrefsFile").d("N0");
    }

    public Cocos2dxGLSurfaceView onCreateView() {
        Cocos2dxGLSurfaceView v0 = new Cocos2dxGLSurfaceView(((Context)this));
        new a(((Context)this), "Cocos2dxPrefsFile").d("MG");
        v0.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
        return v0;
    }
}


public class a {
    private SharedPreferences editor;

    public a(Context arg2, String arg3) {
        super();
        this.editor = null;
        this.editor = arg2.getSharedPreferences(arg3, 0);
    }

    public void b() {
        this.editor.edit().putString("DATA", "").commit();
    }

    public String c() {
        return this.editor.getString("DATA", "");
    }

    public void d(String arg5) {
        this.editor.edit().putString("DATA", String.valueOf(String.valueOf(this.c())) + arg5).commit();
    }
}

a类:sharePreferences是android的一种数据存储机制,它会在/data/data/com.example.plane/下生成一个xml文件,并将数据存储在其中。

getSharedPreferences有两个参数 
第一个参数getSharedPreferences(第一个参数,第二个参数);
第一个参数是存储时的名称,第二个参数则是文件的打开方式~
两个参数,第一个参数是preferece的名称(比如:MyPref),第二个参数是打开的方式(一般选择private方式)

可以用Android studio打开/data/data/com.example.plane/,也可以用MT管理器
在这里插入图片描述
在这里插入图片描述
base64进行解码
得到0ctf{C0coS2d_AnDro1gs�
在这里插入图片描述

在这里插入图片描述
JAVA层中刚好有对应的字符串YmF6aW5nYWFhYQ==
IDA中so层分析一下,查找关键函数名
在这里插入图片描述
对应的不同的case事件是达到不同的分数,会得到不同的base64编码,连起来再去进行解码MWRfRzBtRv9Zb1VfS24wT

1d_G0mE YoU_Kn0
strcpy(v32, "data");
  v2 = 0;
  v34 = 0;
  v18 = this;
  v33 = 0;
  do
  {
    *((_BYTE *)&v33 + v2) = v32[v2] ^ 0x20;
    ++v2;
  }
  while ( v2 != 4 );
  if ( (unsigned int)a2 <= 0x3B9ACA00 )
  {
    v4 = cocos2d::CCUserDefault::sharedUserDefault(this);
    sub_3A34D8(&v21, &byte_3F92A0, v19);
    cocos2d::CCUserDefault::getStringForKey(&v20, v4, &v33, &v21);
    v5 = (cocos2d::CCUserDefault *)sub_3A1DDC(&v21);
    switch ( a2 )
    {
      case 100:
        v6 = cocos2d::CCUserDefault::sharedUserDefault(v5);
        std::operator+<char>(v22, &v20, "MW");
        cocos2d::CCUserDefault::setStringForKey(v6, &v33, v22);
        v7 = v22;
        break;
      case 600:
        v8 = cocos2d::CCUserDefault::sharedUserDefault(v5);
        std::operator+<char>(v23, &v20, "Rf");
        cocos2d::CCUserDefault::setStringForKey(v8, &v33, v23);
        v7 = v23;
        break;
      case 700:
        v9 = cocos2d::CCUserDefault::sharedUserDefault(v5);
        std::operator+<char>(v24, &v20, "Rz");
        cocos2d::CCUserDefault::setStringForKey(v9, &v33, v24);
        v7 = v24;
        break;
      default:
        if ( (unsigned __int32 *)a2 == &stru_BB4.st_value )
        {
          v10 = cocos2d::CCUserDefault::sharedUserDefault(v5);
          std::operator+<char>(v25, &v20, "Bt");
          cocos2d::CCUserDefault::setStringForKey(v10, &v33, v25);
          v7 = v25;
        }
        else if ( a2 == 5600 )
        {
          v11 = cocos2d::CCUserDefault::sharedUserDefault(v5);
          std::operator+<char>(v26, &v20, "RV");
          cocos2d::CCUserDefault::setStringForKey(v11, &v33, v26);
          v7 = v26;
        }
        else if ( (unsigned __int32 *)a2 == &stru_26A4.st_size )
        {
          v12 = cocos2d::CCUserDefault::sharedUserDefault(v5);
          std::operator+<char>(v27, &v20, "9Z");
          cocos2d::CCUserDefault::setStringForKey(v12, &v33, v27);
          v7 = v27;
        }
        else if ( (unsigned __int8 *)a2 == &stru_4644.st_info )
        {
          v13 = cocos2d::CCUserDefault::sharedUserDefault(v5);
          std::operator+<char>(v28, &v20, "b1");
          cocos2d::CCUserDefault::setStringForKey(v13, &v33, v28);
          v7 = v28;
        }
        else if ( (unsigned __int8 *)a2 == &stru_15AD4.st_info )
        {
          v14 = cocos2d::CCUserDefault::sharedUserDefault(v5);
          std::operator+<char>(v29, &v20, "Vf");
          cocos2d::CCUserDefault::setStringForKey(v14, &v33, v29);
          v7 = v29;
        }
        else if ( (unsigned __int8 *)a2 == &stru_18694.st_info )
        {
          v15 = cocos2d::CCUserDefault::sharedUserDefault(v5);
          std::operator+<char>(v30, &v20, "S2");
          cocos2d::CCUserDefault::setStringForKey(v15, &v33, v30);
          v7 = v30;
        }
        else
        {
          if ( a2 != 1000000000 )
          {

连起来0ctf{C0coS2d_AnDro1d_G0mE_YoU_Kn0w?}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值