반응형
Knight CTF 2022 Reversing Droid Flag Wrteup
https://github.com/sajjadium/ctf-archives/tree/main/KnightCTF/2022/rev/DroidFlag
문제파일은 위 링크에서 다운로드하였다.
apk 파일 하나주고 푸는 문제인 것 같다. 먼저 jadx로 디컴파일 진행했고 안드로이드 앱답게 많은 파일이 존재했다.
필자는 먼저 MainActiviy를 찾았다.
MainActivity
package org.knightsquad.droidflag;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
/* loaded from: classes.dex */
public class MainActivity extends AppCompatActivity {
private EditText inputFlagET;
private TextView kctfTitle;
private Button validateButton;
/* JADX INFO: Access modifiers changed from: protected */
@Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.kctf2022Title);
this.kctfTitle = textView;
textView.setText("|| KnightCTF 2022 || Organized by Knight Squad ||");
this.kctfTitle.setSelected(true);
this.inputFlagET = (EditText) findViewById(R.id.inputFlag);
Button button = (Button) findViewById(R.id.checkButton);
this.validateButton = button;
button.setOnClickListener(new View.OnClickListener() { // from class: org.knightsquad.droidflag.MainActivity.1
@Override // android.view.View.OnClickListener
public void onClick(View view) {
String obj = MainActivity.this.inputFlagET.getText().toString();
if (obj.isEmpty()) {
Toast.makeText(MainActivity.this, "Please enter a flag", 0).show();
} else if (obj.length() <= 10) {
Toast.makeText(MainActivity.this, KnightCTF.flag, 0).show();
} else {
StringHandler stringHandler = new StringHandler();
if ((stringHandler.getS1(MainActivity.this) + "{" + stringHandler.getS3(MainActivity.this) + "_" + stringHandler.getS2(MainActivity.this) + "_" + stringHandler.getS4(MainActivity.this) + "}").equals(obj)) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.AlertDialog);
builder.setTitle(MainActivity.this.getResources().getString(R.string.s9));
builder.setMessage(MainActivity.this.getResources().getString(R.string.s10));
builder.show();
return;
}
AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this, R.style.AlertDialog);
builder2.setTitle(MainActivity.this.getResources().getString(R.string.s11));
builder2.setMessage(MainActivity.this.getResources().getString(R.string.s12));
builder2.show();
}
}
});
}
}
onClick(View view) 부분을 보면 아주 의심스러운 코드가 있다.
if ((stringHandler.getS1(MainActivity.this) + "{" + stringHandler.getS3(MainActivity.this) + "_" + stringHandler.getS2(MainActivity.this) + "_" + stringHandler.getS4(MainActivity.this) + "}").equals(obj)) {
보면 flag 형식과 비슷하다. 그래서 stringHandler 코드를 살펴봤다.
StringHandler Class
package org.knightsquad.droidflag;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
/* loaded from: classes.dex */
public class StringHandler extends AppCompatActivity {
public String getS1(Context context) {
return context.getResources().getString(R.string.s5);
}
public String getS2(Context context) {
return new StringBuilder(context.getResources().getString(R.string.s6)).reverse().toString();
}
public String getS3(Context context) {
return new StringBuilder(context.getResources().getString(R.string.s7)).reverse().toString();
}
public String getS4(Context context) {
return new StringBuilder(context.getResources().getString(R.string.s8)).reverse().toString();
}
}
코드를 보면 getString을 통해 string 변수를 가져오고 있었다. 순서를 보면 getS1{getS3_getS2_getS4}로 불러온다.
s5, s6, s7, s8 변수를 가져와서 reverse하고 string으로 바꾼다. 이 과정을 다시 진행하면 되는데 먼저 resource에 저장된 string이 있는지 확인했다.
검색을 통해 resources.arsc -> res -> values -> strings.xml 에 string들이 모여있음을 알았다. 우리가 찾던 변수들이 잘 있었다.
순서대로 맞추면 flag는 다음과 같다.
KCTF{D10RdNa_3LpM1s_3Sr3V3r}
728x90
'Reversing' 카테고리의 다른 글
b01lers CTF padlock Writeup (0) | 2023.03.20 |
---|---|
KnightCTF 2023 Rev - Help Jimmy Writeup (0) | 2023.01.27 |
KnightCTF 2022 Baby Shark writeup (0) | 2023.01.19 |
irisCTF 2023 baby reversing writeup (0) | 2023.01.11 |
NahamCon CTF 2022 babyrev writeup (0) | 2022.11.15 |