티스토리 뷰

CTF/App

[CodeEngn] SmartApp 02

Notchicken 2017. 4. 20. 22:46

[CodeEngn] SmartApp 02


apk를 설치하면 서명이 되어있지 않아 설치할 수 없다고 뜬다.



apksign을 이용하여 apk에 서명을 추가해주었다.




서명을 추가한 apk를 다시 설치하면 정상적으로 설치가 된다.






설치된 app을 실행하면 key값을 볼 수 있었던 SmartApp 01 과 달리 FindKey :) 라는 문구만 볼 수 있다.




androidKiller로 apk를 디컴파일하여 소스코드를 보았다.

MainActivity.class의 소스코드를 보니, 현재 시각이 2013-11-02-12:35:03 이고 볼륨이 53일 때, keyString()을 생성하여 출력해주는 것을 볼 수 있었다.

package com.namdaehyeon.findkey2;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Date;

@SuppressLint({"SimpleDateFormat"})
public class MainActivity
  extends Activity
{
  TextView aView;

  public int Volume()
  {
    return 33;
  }

  public String keyString()
  {
    return Security.DecryptStr("-1c776f3a2fa678cae27879e87a74553c61009eefb037bbe2abdbd5e4314407e60000000000000000");
  }

  public String makeDate()
  {
    Date localDate = new Date();
    return new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss").format(localDate);
  }

  protected void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(2130903040);
    this.aView = ((TextView)findViewById(2131230720));
    if ((makeDate() == "2013-11-02-12:35:03") && (Volume() == 53)) {
      this.aView.setText(keyString());
    }
  }

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


그래서, 해당부분의 smali 코드를 수정하여 키 값을 보기로 했다.

    .line 29
    invoke-virtual {p0}, Lcom/namdaehyeon/findkey2/MainActivity;->makeDate()Ljava/lang/String;

    move-result-object v0

    const-string v1, "2013-11-02-12:35:03"

    if-ne v0, v1, :cond_0  // 같지 않을 경우 keyString을 생성하지 않고 점프

    .line 30
    invoke-virtual {p0}, Lcom/namdaehyeon/findkey2/MainActivity;->Volume()I

    move-result v0

    const/16 v1, 0x35

    if-ne v0, v1, :cond_0  // 같지 않을 경우 keyString을 생성하지 않고 점프
 
    .line 31
    iget-object v0, p0, Lcom/namdaehyeon/findkey2/MainActivity;->aView:Landroid/widget/TextView;

    invoke-virtual {p0}, Lcom/namdaehyeon/findkey2/MainActivity;->keyString()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V


현재 시각이 2013-11-02-12:35:03, 볼륨이 53이 아니면 keyString을 생성하지 않고 바로 리턴부분으로 점프하는 분기문을
같을 때 점프하도록 수정하여 같지 않아도 keyString을 생성하도록 바꿔주었다.

    .line 29
    invoke-virtual {p0}, Lcom/namdaehyeon/findkey2/MainActivity;->makeDate()Ljava/lang/String;

    move-result-object v0

    const-string v1, "2013-11-02-12:35:03"

    if-eq v0, v1, :cond_0  // 같을 경우 점프하도록 수정하여, 비교값과 같지 않아도 keyString을 생성하도록 함.

    .line 30
    invoke-virtual {p0}, Lcom/namdaehyeon/findkey2/MainActivity;->Volume()I

    move-result v0

    const/16 v1, 0x35

    if-eq v0, v1, :cond_0  // 같을 경우 점프하도록 수정하여, 비교값과 같지 않아도 keyString을 생성하도록 함.
 
    .line 31
    iget-object v0, p0, Lcom/namdaehyeon/findkey2/MainActivity;->aView:Landroid/widget/TextView;

    invoke-virtual {p0}, Lcom/namdaehyeon/findkey2/MainActivity;->keyString()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V


리컴파일한 apk를 설치하여 실행하면 키값을 볼 수 있다.


key: November Rain





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

[CodeEngn] SmartApp 03  (0) 2017.04.22
[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