【愚公系列】2021年12月 攻防世界-简单题-MOBILE-003(app2)
【摘要】 一、app2题目链接:https://adworld.xctf.org.cn/task/task_list?type=mobile&number=6&grade=0&page=1 二、答题步骤 1.运行app点击登录得到:不能为空的提示 2.jadx反编译apk文件搜索不能为空字符串 3.jadx反编译apk文件搜索不能为空字符串找到MainActivity函数package com.te...
一、app2
题目链接:https://adworld.xctf.org.cn/task/task_list?type=mobile&number=6&grade=0&page=1
二、答题步骤
1.运行app
点击登录得到:不能为空的提示
2.jadx反编译apk文件
搜索不能为空
字符串
3.jadx反编译apk文件
搜索不能为空
字符串
找到MainActivity
函数
package com.tencent.testvuln;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.tencent.testvuln.c.SignatureTool;
@SuppressLint({"ShowToast"})
/* loaded from: classes.dex */
public class MainActivity extends Activity implements View.OnClickListener {
private Button a;
private Handler b = null;
private EditText c;
private EditText d;
@Override // android.app.Activity
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
this.a = (Button) findViewById(R.id.button1);
this.a.setOnClickListener(this);
this.c = (EditText) findViewById(R.id.editText1);
this.d = (EditText) findViewById(R.id.editText2);
SharedPreferences.Editor edit = getSharedPreferences("test", 0).edit();
edit.putLong("ili", System.currentTimeMillis());
edit.commit();
Log.d("hashcode", SignatureTool.getSignature(this) + "");
}
@Override // android.app.Activity
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override // android.app.Activity
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(menuItem);
}
@Override // android.view.View.OnClickListener
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
if (this.c.getText().length() == 0 || this.d.getText().length() == 0) {
Toast.makeText(this, "不能为空", 1).show();
return;
}
String obj = this.c.getText().toString();
String obj2 = this.d.getText().toString();
Log.e("test", obj + " test2 = " + obj2);
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("ili", obj);
intent.putExtra("lil", obj2);
startActivity(intent);
return;
default:
return;
}
}
}
进而保存为ili,lil传入给了SecondActivity,双击进入
发现
因为doRawData为navtive函数,所以打开IDA
3.IDA修改apk逻辑实现破解
先发现有趣的函数,AES,Base64预估用到了AES加密算法
搜索doRawData
只有一个结果,双击跳过去,F5转伪代码,大概看一下
jstring __fastcall doRawData(_JNIEnv *env, int jclass, int context, int string)
{
_JNIEnv *env_1; // r4
void *string_1; // r9
const char *v6; // r6
const char *v7; // r8
jstring result; // r0
jstring (__cdecl *v9)(JNIEnv *, const jchar *, jsize); // r6
char *v10; // r5
size_t v11; // r2
int v12; // [sp+0h] [bp-28h]
int v13; // [sp+18h] [bp-10h]
env_1 = env; // 如果不相等直接返回
string_1 = string;
if ( j_checkSignature(env, jclass, context) != 1
|| (strcpy(&v12, "thisisatestkey=="),
v6 = env_1->functions->GetStringUTFChars(&env_1->functions, string_1, 0),
v7 = j_AES_128_ECB_PKCS5Padding_Encrypt(),
env_1->functions->ReleaseStringUTFChars(&env_1->functions, string_1, v6),
result = env_1->functions->NewStringUTF(&env_1->functions, v7),
_stack_chk_guard != v13) ) // 1.进行签名验证2.将输入字符串与加密后字符比较(这里的key是thisisatestkey==)
{ // j_AES_128_ECB_PKCS5Padding_Encrypt这里出题人估计是故意降低难度的吧
do
{
v9 = env_1->functions->NewString;
v10 = UNSIGNATURE[0];
v11 = strlen(UNSIGNATURE[0]);
}
while ( _stack_chk_guard != v13 );
result = (v9)(env_1, v10, v11);
}
return result;
}
分析,可以发现,应该是对我们传入的数据做了AES加密。
v4应该是我们传入的值,v10则是秘钥。可以看到v14-v10这里组成了个数组。我们将其取出。秘钥即为thisisatestkey==
得到密钥后寻找加密字符串在FileDataActivity中发现9YuQ2dk8CSaCe7DTAmaqAA==
AES解密
在线解密网址:http://tool.chacuo.net/cryptaes
得到flag:Cas3_0f_A_CAK3
总结
- AES
- IDA
- JADX
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)