• [Flare-on 2019] Memecat Battlestation Write-up

    2020. 1. 9.

    by. ugonfor

    .NET 파일 분석

    2019-12-28 유효곤 작성


    문제설명

    특정 코드를 입력받아서, 입력받은 값이 맞으면 통과한다.

    즉, 특정 조건을 만족시키는 코드를 찾아야 한다.

    필요한 툴

    dnSpy (.NET형식 파일 분석, decompile 툴)


    Solution

    이 파일이 .net 형식이라는 것은 IDA에 넣어 봤을 때, .net형식이라는 것을 통해서 알 수 있었다.

    그래서 dnSpy를 통해서 파일을 분석해보고자 한다.

    파일을 dnSpy에 넣었을 때, 보이는 목록들은 다음과 같다. header나, references 쪽은 볼게 없고, 우리가 보아야 하는 것은 MemeCatBattlestation 쪽이었다.

    Main()에서 볼 수 있는 것은 Run함수가 있는 데, 매개변수로 LogoForm, stage1Form, stage2Form, VictoryForm이 차례로 있는 것이다. 이는 순서대로 로고창이 보이고, 스테이지1이 보여지며, 코드를 제대로 입력하면 스테이지2가 보여지고, 두번째 코드도 잘 입력하면 victory가 나오는 것일거라 생각된다.

    그래서 스테이지 1을 보았다. 이때, 함수들을 살펴보니 FireButton_click에 있을 거라 예상됬다. (코드를 입력하고나서 firebutton을 누루기 때문.)

    실제로 보니 첫번째 weapon code를 찾을 수 있었다.

    두번째 스테이지도 같은 방식으로 FireButton 함수를 보았다.

    확인해 보니, isValidWeaponCode라는 함수를 통해서 따로 코드를 확인하는 과정이 존재했다.

    스테이지2는 한번 꼬아놓았는 데 어렵지 않게 코드를 찾을 수 있었다.

    매개변수로, 위 사진을 보면 codeTextBox에 있는 것을 받는 다. 아래 사진에서는 이 값을 받아서 각 문자를 'A'와 xor하는 과정을 한번 거친다음, 그 값들이 unicode로 특정 값들과 같은 지 확인하는 과정을 거친다.

    이는 단순 xor과정이기에 주어진 값들에 'A'를 xor해보면, Bagel_Cannon 이 나온다.

    Flag : Kitteh_save_galixy@flare-on.com


    +)

    .NET 파일 분석을 처음해보아서, 가장 어려웠던 점은 pwnable에서 접할 수 있었던 것과는 다르게 구조가 복잡하게 짜여있는 것이었다. pwnable 파일의 경우에는 바로 main function을 볼 수 있었고, start가 있는 것에 비해, .net파일은 복잡하게 짜여있어 어떤 것이 주가 되는 코드인지 아는 데도 오래 걸렸다.

    +)

    사실 victoryform 함수를 보면, utf-8인코딩 되기전 flag값들이 다 있는 데, 이 부분만 봐도 flag를 구할 수 있는 듯

    1번스러운 문제였음

    'Writeup > Wargame_Writeup' 카테고리의 다른 글

    [Flare-on 2019] Snake  (0) 2020.01.21
    [Flare-on 2019] Demo  (0) 2020.01.21
    [Flare-on 2019] DnsChess  (0) 2020.01.21
    [pwnable.kr] flag  (0) 2020.01.12
    [Flare-on 2019] Flarebear  (0) 2020.01.09

    댓글