티스토리 뷰

CTF/App

[CodeEngn] SmartApp 03

Notchicken 2017. 4. 22. 23:50
[CodeEngn] SmartApp 03





SmartApp03 도 마찬가지로 서명을 추가하고, apk를 설치해준다.



app을 실행하면 랜덤값으로 남은 계단이 주어지고,  버튼을 클릭하면 현재위치가 1씩 증가한다.
아무래도 주어진 계단수만큼 버튼을 클릭해야 키 값이 주어지는 것 같다.

AndroidKiller를 이용하여 apk를 분석해보기로 했다.


package com.namdaehyeon.findkey3;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;

public class MainActivity
  extends Activity
{
  TextView aView;
  TextView bView;
  ImageButton button;
  TextView cView;

  public void addListenerOnButton()
  {
    this.button = ((ImageButton)findViewById(2131230726));
    this.aView = ((TextView)findViewById(2131230724));
    this.bView = ((TextView)findViewById(2131230725));
    this.cView = ((TextView)findViewById(2131230727));
    this.aView.setText(String.format("%d", new Object[] { Integer.valueOf(randomRange(44444)) }));
    this.bView.setText("0");
    this.cView.setText(myString());
    this.button.setOnClickListener(new View.OnClickListener()
    {
      Integer myStairs = Integer.valueOf(Integer.parseInt(MainActivity.this.bView.getText())); // 현재 계단
      Integer stairs = Integer.valueOf(Integer.parseInt(MainActivity.this.aView.getText())); // 남은 계단

      public void onClick(View paramAnonymousView)
      {
        if (this.stairs.intValue() - 1 != this.myStairs.intValue()) // 클릭이벤트가 발생했을 때, 현재 계단수가 남은 계단수 -1 과 같으면 키값을 출력해줌.
       {
          this.myStairs = Integer.valueOf(this.myStairs.intValue() + 1);
          MainActivity.this.bView.setText(this.myStairs.toString());
          return;
        }
        MainActivity.this.aView.setText(Security.DecryptStr("2736f6055dbad2d42f6d5b0135395cb29e0d086b67e1fa266a0a0d277f151e5b00000000000000000000")); // 키값으로 추정
        MainActivity.this.bView.setText("0");
      }
    });
  }

  public String myString()
  {
    return "c0de3ngn.com";
  }

  protected void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(2130903040);
    addListenerOnButton();
  }

  public boolean onCreateOptionsMenu(Menu paramMenu)
  {
    getMenuInflater().inflate(2131165184, paramMenu);
    return true;
  }

  public int randomRange(int paramInt)
  {
    return (int)(Math.random() * 10000.0D) * (paramInt << 2);
  }
}



MainActivity 소스코드를 보면
버튼을 클릭했을 때 현재 계단수 = 남은 계단수 - 1 이면 키를 출력해주고
그렇지 않으면 현재 계단수에 +1을 해주는 것을 알 수 있었다.

그래서 분기문을 수정하여 버튼을 클릭했을 때 키값이 나오도록 해보았다.


    .line 71
    iget-object v0, p0, Lcom/namdaehyeon/findkey3/MainActivity$1;->stairs:Ljava/lang/Integer;

    invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I

    move-result v0

    add-int/lit8 v0, v0, -0x1

    iget-object v1, p0, Lcom/namdaehyeon/findkey3/MainActivity$1;->myStairs:Ljava/lang/Integer;

    invoke-virtual {v1}, Ljava/lang/Integer;->intValue()I

    move-result v1

    if-ne v0, v1, :cond_0 // if-eq v0, v1, : cond_0 을 if-ne 로 수정

분기문을 if-ne 로 수정하여, 현재 계단수 = 남은 계단수 -1 이 아닐 때 키값이 나오도록 수정하고
버튼을 클릭하였더니 키값을 볼 수 있었다.




key : CodeEngn_4_Ever



'CTF > App' 카테고리의 다른 글

[CodeEngn] SmartApp 02  (0) 2017.04.20
[CodeEngn] SmartApp 01  (0) 2017.04.20
[2016 SECCON] Rock Paper Scissors  (0) 2017.04.11
[2016 HolyShield] SoundMeter  (0) 2017.04.11
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday