Peach Pit 파일은 피치 퍼저가 퍼징을 수행할 때 필요한 파일로써 xml문법을 따른다(확장자도 당연히 xml).

사실 피치 퍼저에서 Pit이 가장 중요하다. 어지간한 것들은 피치와 MSEC이 해주지만 Pit 파일은 본인이 직접 만들어야하기 때문이다.

물론 인터넷에 자료가 좀 있지만 정말 모든 것을 찾아봤다고 생각할 정도로 찾아본 결과 제대로 된 피치 3의 Pit 파일은 인터넷에 몇 정도 밖에 없다.


이곳은 피치 Pit을 작성하는데 도움을 받을 수 있는 일종의 매뉴얼 사이트이다.

Pit 문법을 공부할 수 있다. 피치 3 버전 외에도 피치 2버전의 문법도 나와있다.

http://community.peachfuzzer.com/v3/PeachPit.html


그리고 이곳은 아마 가장 많은 사람들이 읽은 것으로 여겨지는 글이다.

참고로 피치 2.3 버전에 관한 글이고 오타가 몇 개 있다. 추후에 찾아서 수정 가능하므로.

http://www.flinkd.org/2011/07/fuzzing-with-peach-part-1/

http://www.flinkd.org/2011/11/fuzzing-with-peach-part-2-fixups-2/


그 외에도 한글로도 몇몇 블로그에서 설명해놓은 것들이 존재하지만 이 모든 것들은 피치 2를 기반으로 한 것들이다.

물론 피치 2.3을 설치하면 되겠지만 나는 3을 공부하였으므로 3을 기반으로 글을 쓰겠다.

그리고 위의 글들만 보아도 기본적인 내용들은 알게될 것이고 2와 3이 약간 다르다는 것도 인지하게 될 것이다.

하지만 수많은 삽질을 하게 될 것이므로 여기서 기본적인 내용을 쓰겠다.



아래는 Pit 파일의 내용이다. 따로 xml 편집기를 사용해도 되지만 귀찮으면 그냥 메모장으로 편집해도 된다.

(xml의 주석은 저렇게 <!--과 --> 사이에 있는 글이다.)

https://www.youtube.com/watch?v=u5JB7-K3j6Y&list=PLY81Xq8dvFR6282jX47OeBFs20tbNPmGb&index=4

위의 유튜브 링크에 나온 pit이다.



---------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>

<Peach version="1.0">


  <DataModel name="TheDataModel">

      <String name="header1" value="M3U\n" mutable="false"/>

      <String name="header2" value="#EXTM3U\n" mutable="false"/>

      <String name="header3" value="#EXTINF:123, Sample artist - Sample title\n" mutable="false"/>

      <String name="header4" value="C:\" mutable="false"/>

      <String name="header5" value="hello" mutable="true"/>

  </DataModel>


  

  <StateModel name="TheState" initialState="Initial">

    <State name="Initial">

      <Action type="output">

        <DataModel ref="TheDataModel"/>

        <!-- 이 ref에 위 DataModel의 name을 쓰면 된다.-->

      </Action>

      <Action type="close"/>

      <Action type="call" method="LaunchViewer" publisher="Peach.Agent"/>

    </State>

  </StateModel>


  

  <Agent name="WinAgent">

    <Monitor class="WindowsDebugger">

      <Param name="CommandLine" value="C:\Program Files\VUPlayer\VUPlayer.exe fuzzed.m3u"/>

      <!-- 여기서는 명령 프롬프트의 내용을 쓴다. 즉, 곰오디오로 저 생성된 fuzzed.m3u 파일을 실행한다는 것.-->

      <Param name="WinDbgPath" value="C:\Program Files\Debugging Tools for Windows (x86)\" />

      <!-- 여기는 당신의 Windbg 경로를 쓰면 된다.-->

      <Param name="StartOnCall" value="LaunchViewer"/>

      <Param name="CpuKill" value="ture"/>

    </Monitor>

    <Monitor class="PageHeap">

      <Param name="Executable" value="VUPlayer.exe"/>

      <!-- VUPlayer의 실행파일 명-->

      <Param name="WinDbgPath" value="C:\Program Files\Debugging Tools for Windows (x86)\" />

    </Monitor>

  </Agent>



  <Test name="Default">

    <Agent ref="WinAgent" platform="windows"/>

    <StateModel ref="TheState"/>

    <!-- StateModel의 name을 쓴다.-->

    <Publisher class="File">

      <Param name="FileName" value="fuzzed.m3u" />

      <!-- 피치가 생성한 파일 이름-->

    </Publisher>

    <Logger class="File">

      <Param name="Path" value="logs"/>

      <!-- 이러면 피치 폴더 안에 logs 파일이 생성되고 그 안에서 처리될 것이다.-->

    </Logger>

  </Test>


</Peach>

---------------------------------------------------------------------------------------------


간단히 설명해 보겠다. 위 내용은 m3u.xml 이라는 파일로 저장하고 peach.exe가 존재하는 폴더에 넣는다.

먼저 크게 DataModel, StateModel, Agent, Test 이렇게 4 부분으로 나뉜다.

DataModel은 특정 확장자의 포맷을 위의 형태로 생성한다. m3u는 간단한 확장자이기 때문에 위 처럼 간단하게 사용할 수 있다.

StateModel은 그냥 기본적으로 저렇게 사용하면 될테고 자세한 것은 첫 번째 글의 링크들을 보면서 잘 찾아보면 된다.

Agent를 보면 알겠지만 당신이 VUPlayer를 대상으로 m3u 파일에 대한 퍼징을 수행하는 경우이다. 저렇게 경로를 쓰면 된다.

피치 폴더에는 peach.exe가 존재하며 또한 m3u.xml도 존재한다. 그리고 퍼징 시 마다 변이되서 생성되는 fuzzed.m3u라는 파일도 그 폴더에 생성된다.

대상 프로그램(VUPlayer)은 당연히 전체 경로를 써줘야 할 테고 Windbg도 마찬가지이다.

Test를 보면 아랫 부분에 logs라고 써져 있는데 이것은 피치 폴더 내에 logs라는 폴더가 생성되고 이 폴더 안에 퍼징의 결과 즉 리포트 등이 저장된다.


DataModel에 대해서 약간 더 설명이 필요한 것 같은데 header1~4까지는 mutable이 false이므로 매 fuzzed.m3u마다 이 값은 똑같지만,

마지막 header5는 mutable이 true이므로 fuzzed.m3u 파일(퍼징 수행 시마다 만들어지는) 마다 그 크기와 값이 달라진다.


추후 부터는 DataModel 부분만 퍼징할 파일에 맞춰서 설정해 주면 된다. 그리고 대상 프로그램은 경로만 설정해주면 되므로 편하다.

물론 파일 포맷을 이해하고 DataModel을 직접 만드는건 그렇게 쉬운 일은 아니다.


혹시 제대로된 프로세스를 모를까봐 다시 한 번 정리해 보겠다.

피치 폴더 안에 위의 m3u.xml 파일을 집어 넣고 피치를 실행시킨다면 피치는 xml의 DataModel에 따른 포맷을 사용해서 fuzzed.m3u이라는 파일을 만들게 되고 이후에는 저 명령 프롬프트 명령 처럼 VUPlayer로 이 fuzzed.m3u를 실행한다.

그리고 크래시가 발생한다면 내부에 존재하는 MSEC라는 크래시 분석 도구를 사용해 분석한 결과를 따로 저장한다.


사실 VUPlayer는 크래시가 기본적으로 발생할 수 밖에 없는 구조이다. 내부에서 크기 입력을 제한하지 않아서 저 header5가 많은 내용을 갖게 되면 자동으로 버퍼 오버플로우가 발생한다.

실제 사용하는 것은 다음 글에서 다루도록 하겠지만 문제는 이 부분이 가장 중요하다는 것이다.

즉, pit 파일을 만드는 것이 가장 중요한데 인터넷에는 제대로 된 글이 거의 존재하지 않는다.

물론 본인이 직접 만들어야 겠지만 연습을 위해서라도 볼 필요가 있을텐데 말이다.

다음은 인터넷을 통해 찾을 수 있는 pit 파일들이다. 물론 올릴 수는 없으므로 잘 구글링해보길 바란다. 참고로 영어로.

(그리고 DataModel만 참고한다. 아랫 부분은 대부분 피치 2.3을 위한 설정들이다.)


m3u : 이 글 윗 부분의 링크.

docx : http://stackoverflow.com/questions/36120204/peach-fuzzer-create-docx-and-fuzzing-ms-word (잘 될지 모르겠지만 수정해가면서 해보길)

gif : http://puzzor.blogspot.kr/2013/09/peach-pits-of-gif-model.html

wav : https://codegists.com/search/mplayer/1 (피치 3에서는 몇 몇 부분 때문에 오류 뜸)

mp4, zip, asf, avi, cab : www.flinkd.org/projects/peach-pits/



블로그 이미지

SanseoLab

,