━━━━ ◇ ━━━━
해킹/SuNiNaTaS 모의해킹

24. 써니나타스 (Suninatas) 24번 문제풀이 Write-up

728x90
반응형

써니나타스 모의해킹 사이트

https://suninatas.com/challenges

 

써니나타스

웹해킹, 포렌식, 리버싱, 암호학, 해킹 워게임 제공.

www.suninatas.com


써니나타스 24번은 시스템과 관련된 문제다. Download 버튼이 있고, 개발자도구를 확인했지만 아무 힌트도 없었다. 

 

다운로드 받으니 zip파일이었고 압축해제를 했다. sunintas24라는 파일이 생겼다. 

 

 

출처: http://forensic-proof.com/archives/300   (파일시그니처모음)

일단 HxD로 어떤 파일인지 분석해봤다. 시그니처 50 4B 03 04를 보고 PK가 어떤 확장자인지 검색해봤더니 압축파일(zip)이었다. 

 

 

suninatas 파일의 확장자를 .zip으로 변경한 뒤에 압축을 풀어봤다. 예전에 갤럭시 사용할 때 apk파일을 받아서 테마도 고쳐보고 이것저것 해봤었는데 보자마자 익숙했다. 많이 봤던 구조다. 역시 apk파일. 

일단 classes.dex파일을 dex2jar을 이용해서 jar 파일로 디컴파일 해줘야 한다. 

 


dex2jar 디컴파일

 

https://sourceforge.net/projects/dex2jar/

 

dex2jar

Download dex2jar for free. Tools to work with android .dex and java .class files. Mirrors: * https://bitbucket.org/pxb1988/dex2jar * https://github.com/pxb1988/dex2jar dex2jar contains following compment * dex-reader is designed to read the Dalvik Executab

sourceforge.net

1. dex2jar을 다운로드 한 다음 압축을 풀어준다. 

 

 

2. 압축을 푼 dex2jar-2.0 폴더에 classes.dex파일을 넣는다. 

 

 

3. window cmd창을 열어서 dex2jar-2.0 폴더의 경로로 이동한다.

4. d2j-dex2jar.bat classes.dex 명령어로 classes.dex파일을 디컴파일 해준다.

※ 참고: 윈도우 → .bat 
             그 외 OS → .sh

 

그런데,, error????

디컴파일 이 후에 classes-error.zip이라는 압축파일이 생성됐고 에러 정보가 여기 저장되어 있다고 했다. 열어보니 txt파일로 에러들이 정리되어 있었다. 

 

 

해결방법
https://github.com/pxb1988/dex2jar/releases/tag/v2.1

 

Release v2.1 · pxb1988/dex2jar

set version to 2.1

github.com

크게 해결방법이랄건 없지만 처음 받았던 dex2jar 버전이 낮은 이유 같았다. 구글링을 통해서 비슷한 에러를 찾았고 dex2jar-2.1 버전을 받을 수 있는 github 링크를 알아냈다. 

 

 

다운로드 후 dex2jar-2.1을 압축해제 해주고 위와 같은 방법으로 다시

1. 압축을 푼 dex2jar-2.0 폴더에 classes.dex파일을 넣는다. 

2. window cmd창을 열어서 dex2jar-2.0 폴더의 경로로 이동한다.

3. d2j-dex2jar.bat classes.dex 명령어로 classes.dex파일을 디컴파일 해준다.

이번에는 이상없이 classes-dex2jar.jar 파일이 잘 생성됐다. 

 

 

 


http://java-decompiler.github.io/#jd-gui-download

 

 

Java Decompiler

The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions. JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reco

java-decompiler.github.io

이제 jar파일 내부의 class들을 java코드로 읽을 수 있어야하는데 그러기 위해서는 자바 디컴파일러인 JD-GUI라는 프로그램을 먼저 다운로드 받아야한다. 

 

다운로드를 받고 압축해제를 한 뒤 jd-gui.exe파일을 실행시킨다. 그 다음 classes-dex2jar.jar 파일을 드래그앤드롭 해주면 위와 같은 창이 출력된다. 

 

MainActivity.class를 확인해보니 내가 찾고있던 코드들이 보였다. 

 

public class MainActivity extends Activity {
  public void onCreate(Bundle paramBundle) {
    super.onCreate(paramBundle);
    setContentView(2131296284);
    ((Button)findViewById(2131165218)).setOnClickListener(new View.OnClickListener() {
          public void onClick(View param1View) {
            EditText editText1 = (EditText)MainActivity.this.findViewById(2131165258);
            EditText editText2 = (EditText)MainActivity.this.findViewById(2131165257);
            Editable editable1 = ((EditText)MainActivity.this.findViewById(2131165256)).getText();
            Editable editable2 = editText1.getText();
            Editable editable3 = editText2.getText();
            if (editable3.toString().equals("https://www.youtube.com/channel/UCuPOkAy1x5eZhUda-aZXUlg")) {
              MainActivity mainActivity = MainActivity.this;
              StringBuilder stringBuilder = new StringBuilder();
              stringBuilder.append("http://www.suninatas.com/challenge/web24/chk_key.asp?id=");
              stringBuilder.append(editable1.toString());
              stringBuilder.append("&pw=");
              stringBuilder.append(editable2.toString());
              stringBuilder.append("&key=");
              stringBuilder.append(editable3.toString());
              mainActivity.startActivity(new Intent("android.intent.action.VIEW", Uri.parse(stringBuilder.toString())));
              return;
            } 
            (new AlertDialog.Builder((Context)MainActivity.this)).setMessage("Wrong!").setNeutralButton("Close", new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface param2DialogInterface, int param2Int) {
                    param2DialogInterface.dismiss();
                  }
                }).show();
          }
        });
  }
  
  public boolean onCreateOptionsMenu(Menu paramMenu) {
    getMenuInflater().inflate(2131361792, paramMenu);
    return true;

코드를 자세히 살펴보면

if (editable3.toString().equals("https://www.youtube.com/channel/UCuPOkAy1x5eZhUda-aZXUlg")) {

이 부분에서 editable3가 https://www.youtube.com/channel/UCuPOkAy1x5eZhUda-aZXUlg와 같아야 하는 것을 알 수 있었다. 

stringBuilder.append("&key=");
              stringBuilder.append(editable3.toString());

즉 editable3는 위 코드에서 알 수 있듯이 바로 key 값이었다. 

 

 

http://www.suninatas.com/challenge/web24/chk_key.asp?id=

그럼 위 주소와 같이 id=, pw=, key= 이런식으로 입력을 하면 된다는 건데, id와 pw는 내 써니나타스 계정 정보를 입력하면 될거고 key에는 아까 YouTube 주소를 입력하면 되겠다는 생각을 했다. 

그런데 웹에서는 실행이 안된다..

 


안드로이드 환경에 apk파일 설치로 진행하기

준비물: 안드로이드폰 또는 녹스, LDplayer 등등

먼저 안드로이드 환경이 필요하다. 나는 아이폰 유저라,, 녹스나 다른 프로그램 설치하기가 번거로워서 전에 아버지께서 쓰시던 갤럭시j7 공기계를 주섬주섬 가져와서 진행했다. 

 

먼저 suninatas24를 apk파일로 만들어줘야하는데 방금까지 우리가 다뤘던건 suninatas24 폴더였다. 가장 쉬운방법은 압축 풀기 전의 zip파일의 확장자를 단순히 apk로 바꿔주는 것이다. 

 

그런 다음 apk파일을 폰으로 옮겨주면 끝이다. 

 

스마트폰 마다 다르겠지만 내 기억엔 갤럭시는 보통 출처를 알 수 없는 앱 허용/비허용 옵션이 있었던거 같은데, 일단 내가 이 문제에 사용한 폰은 출처를 알 수 없는 앱 설치 방지 설정이 되어 있었다. 그래서 출처를 허용해주고 설치를 진행했다. 

 

 

apk파일 설치가 끝나고나서 앱을 실행시키면 위와 같은 화면을 볼 수 있다. 이제 내 써니나타스 ID와 비밀번호를 입력하고 앞서 알아냈던 key를 입력해준 뒤 SEND!!! 버튼을 누르면!

 

 

인터넷 창이 열리고 인증키를 얻을 수 있었다. 

 

 

시스템 쪽 문제가 내가 스스로 느끼기에 이해가 쉽고 좀 더 흥미가 생기는 것 같다. 

 

문제 24번

 

성공

728x90
반응형
COMMENT