首页
社区
课程
招聘
[原创]2019看雪CTF 晋级赛Q2 第4题-丛林的秘密
发表于: 2019-6-25 09:21 7012

[原创]2019看雪CTF 晋级赛Q2 第4题-丛林的秘密

2019-6-25 09:21
7012
    protected void onCreate(Bundle arg3) {
        class  implements View$OnClickListener {
            (MainActivity arg1) {
                MainActivity.this = arg1;
                super();
            }
            public void onClick(View arg2) {
                if(gogogoJNI.check_key(MainActivity.this.eText1.getText().toString()) == 1) {
                    MainActivity.this.txView1.setText("Congratulations!");
                }
                else {
                    MainActivity.this.txView1.setText("Not Correct!");
                }
            }
        }

        super.onCreate(arg3);
        this.setContentView(2131296284);
        this.eText1 = this.findViewById(2131165238);
        this.txView1 = this.findViewById(2131165322);
        this.findViewById(2131165318).loadUrl(this.u);
        this.findViewById(2131165318).getSettings().setJavaScriptEnabled(true);
        this.button1 = this.findViewById(2131165218);
        this.button1.setOnClickListener(new (this));
    }
}
onCreate处理中中有个loadUrl(),url地址如下:
    protected void onCreate(Bundle arg3) {
        class  implements View$OnClickListener {
            (MainActivity arg1) {
                MainActivity.this = arg1;
                super();
            }
            public void onClick(View arg2) {
                if(gogogoJNI.check_key(MainActivity.this.eText1.getText().toString()) == 1) {
                    MainActivity.this.txView1.setText("Congratulations!");
                }
                else {
                    MainActivity.this.txView1.setText("Not Correct!");
                }
            }
        }

        super.onCreate(arg3);
        this.setContentView(2131296284);
        this.eText1 = this.findViewById(2131165238);
        this.txView1 = this.findViewById(2131165322);
        this.findViewById(2131165318).loadUrl(this.u);
        this.findViewById(2131165318).getSettings().setJavaScriptEnabled(true);
        this.button1 = this.findViewById(2131165218);
        this.button1.setOnClickListener(new (this));
    }
}
onCreate处理中中有个loadUrl(),url地址如下:
int __fastcall Java_com_example_assemgogogo_gogogoJNI_sayHello(int a1)
{
  int v1; // r11
  int v2; // r4
  int i; // r0
  int v5; // [sp+0h] [bp-98h]
  char v6; // [sp+15h] [bp-83h]
  int v7; // [sp+88h] [bp-10h]

  v7 = v1;
  v2 = a1;
  _aeabi_memclr8(&v5, 128);
  for ( i = 0; i != 21; ++i )
    *((_BYTE *)&v5 + i) = byte_2D28[i] ^ 0x66;
  v6 = 0;
  return (*(int (__fastcall **)(int, int *))(*(_DWORD *)v2 + 668))(v2, &v5);
}
在JNI_OnLoad中的inti_proc()有socket操作,在函数开始有一段解密操作。
int __fastcall Java_com_example_assemgogogo_gogogoJNI_sayHello(int a1)
{
  int v1; // r11
  int v2; // r4
  int i; // r0
  int v5; // [sp+0h] [bp-98h]
  char v6; // [sp+15h] [bp-83h]
  int v7; // [sp+88h] [bp-10h]

  v7 = v1;
  v2 = a1;
  _aeabi_memclr8(&v5, 128);
  for ( i = 0; i != 21; ++i )
    *((_BYTE *)&v5 + i) = byte_2D28[i] ^ 0x66;
  v6 = 0;
  return (*(int (__fastcall **)(int, int *))(*(_DWORD *)v2 + 668))(v2, &v5);
}
在JNI_OnLoad中的inti_proc()有socket操作,在函数开始有一段解密操作。
  v0 = &mm0;
  v1 = 34291;
  v9 = 1;
  while ( v1 )
  {
    --v1;
    *v0 ^= 0x67u;
    ++v0;
  }
还原这段数据我们可以得到对应的html
  v0 = &mm0;
  v1 = 34291;
  v9 = 1;
  while ( v1 )
  {
    --v1;
    *v0 ^= 0x67u;
    ++v0;
  }
还原这段数据我们可以得到对应的html
`.trim().split(/[\s\r\n]+/g).map(str => parseInt(str, 16))
)).then(module => {
  new WebAssembly.instantiate(module).then(results => {
  instance = results;
}).catch(console.error);})
function check_flag(){
  var value = document.getElementById("key_value").value;
  if(value.length != 32)
  {
  document.getElementById("tips").innerHTML = "Not Correct!";
	return;
  }
  instance.exports.set_input_flag_len(value.length);
  for(var ii=0;ii<value.length;ii++){
      instance.exports.set_input_flag(value[ii].charCodeAt(),ii);
  }
  var ret =  instance.exports.check_key();

  if (ret == 1){
   document.getElementById("tips").innerHTML = "Congratulations!"
  }
  else{
    document.getElementById("tips").innerHTML = "Not Correct!"
  }
}
这是一道关于 WebAssembly的题。
`.trim().split(/[\s\r\n]+/g).map(str => parseInt(str, 16))
)).then(module => {
  new WebAssembly.instantiate(module).then(results => {
  instance = results;
}).catch(console.error);})
function check_flag(){
  var value = document.getElementById("key_value").value;
  if(value.length != 32)
  {
  document.getElementById("tips").innerHTML = "Not Correct!";
	return;
  }
  instance.exports.set_input_flag_len(value.length);
  for(var ii=0;ii<value.length;ii++){
      instance.exports.set_input_flag(value[ii].charCodeAt(),ii);
  }
  var ret =  instance.exports.check_key();

  if (ret == 1){
   document.getElementById("tips").innerHTML = "Congratulations!"
  }
  else{
    document.getElementById("tips").innerHTML = "Not Correct!"
  }
}
这是一道关于 WebAssembly的题。
使用wasm2c反编译成c(wasm),这个C比较难看,使用gcc重新编译生成.o后,再使用IDA分析,舒服多了。
check_key()函数如下:

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 277
活跃值: (3363)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
cipy.linalg 这。。
2019-6-26 17:38
0
游客
登录 | 注册 方可回帖
返回
//