Wargame | CTF/Reversing

    CodeEngn Advance08 풀이

    후 너무 오랜만에 리버싱 포스팅을 하네요. 키값이 저거일때, Name을 구하라고 합니다. 패킹은 되어있지않네요. 일단 프로그램의 메인을 가주고, 문제에서는 Name이 2글자라고 했으므로, 글자수를 비교하는부분을 찾아서 2글자로도 통과되도록 패치해주었구요. 암호화 루틴도 발견했습니다. 사용자가 Name에 입력한 값을 한글자씩 받아와서 키값을 만듭니다. 사실 키 제너레이트 과정따라서 코드짜서... 0-9 a-z 브루트포싱 해보면되는데.. 너무 길어요ㅋㅋㅋㅋ 귀찮아졌습니다. 딱히 분석해도 시간낭비일것 같네요.

    CodeEngn Malware08 풀이

    이번문제도 역시 악성코드 Flow를 보고 푸는문제입니다. 다른 악성코드를 실행하여 추가감염을 일으키는 함수의 주소를 찾으라는군요. Flow를 한번살펴보겠습니다. 마지막 문제답게 조금 복잡합니다. 다른 악성코드를 실행한다는 말을 생각해보면, 분기문을 사용하여 악성코드 부분으로 점프하거나, 악성코드를 실행하는 함수로 들어가는 call 부분이 될것입니다. flow의 위쪽부분입니다. 두개의 분기문으로 나누어서 져서 갈리는데, 그래프를 쭉 따라가다보면 false쪽으로는 길이 없고 결국엔 true쪽으로 가야합니다.True쪽 바로밑의 또다른 분기문입니다. 여기도 길이 한쪽밖에없습니다. 따라가다보면 결국엔 false쪽으로 가게 되어 있습니다. false쪽을 중점적으로 보겠습니다.False쪽 flow입니다. 004025..

    CodeEngn Malware07 풀이

    이번문제도 6번문제와 같이 Flow를 보고 분석하는 문제입니다. 특정사이트에 접속을 시도하고있고, 몇초단위로 재접속 하는지 알아내는 문제입니다. 6번문제와 동일한 Flow입니다. 이 Flow에대한 상세 분석은 6번 풀이를 참고하시면 되겠습니다. Loc_401950의 함수에 파라미터로 URL을 전달해 주고있으므로 이 함수가 특정URL 접속함수라 할 수 있습니다. 그리고 그 함수에서 분기하는 부분을보면 96000h 만큼 대기한후 다시 URL접속함수를 호출하고 있습니다. 0x96000 는 10진수로 644000 이므로 답은 644000ms가 되겠네요.

    CodeEngn Malware06 풀이

    6번문제입니다. 악성코드의 Flow(디버거에서 볼 수 있는 graph) 의 일부분을 보고 이 프로그램의 Thread Mutex가 무엇인지 알아내는 문제입니다. Thread Mutex란 무엇일까요? 쓰레드는 말그대로 쓰레드이고 Mutex란 Mutual Exclusion 의 합성어로써 번역하면 상호배제라는 뜻입니다. Critical Section을 가진 Thread들의 running time이 서로 겹치지 않게, 각각 단독으로 실행되게 하는 기술입니다. * Critical Section : 프로그램 상에서 동시에 실행될 경우 문제을 일으킬 수 있는 부분. 그럼 문제로 돌아와서 이 흐름그래프에서 여러 쓰레드가 공유자원을 접근하는 부분이 있을것이고, 그부분을 제어하는 Thread Mutex를 찾는문제 같은데요 ..

    CodeEngn Malware05 풀이

    5번문제입니다. 악성코드의 일부분이 주어지고 무슨일을 하는 함수인지 알아내는 문제입니다. 코드를 살펴보면 이 함수는 3개의 파라미터를 인자로 받고 있습니다. 아마도 데이터가 들어있는 버퍼, 그리고 함수에서 어떤동작을 한뒤에 결과물을 받을 Output버퍼주소 그리고 데이터의 사이즈. 이걸로 유추해 보았을 때, 데이터를 받고 어떤 알고리즘을 거친뒤에 기존데이터를 어떤 문자값으로 바꾼후 종료해주는 것 같습니다. 인터넷을 찾아보니 전형적인 base64 인코딩 방식이라고 합니다. Base64 인코딩방식을 한번 알아보겠습니다. 문자열은 알파벳 대소문자와 숫자, 그리고 "+", "/" 기호 64개로 이루어지며, "="는 끝을 알리는 코드로 쓰인다 베이스64의 정확한 규격은 RFC 1421, RFC 2045에 정의된다..

    CodeEngn Malware04 풀이

    4번문제입니다. APM환경에서 SQL Injection을 막기위한 PHP설정파일 옵션 설정방법을 묻고 있습니다. 먼저 문제에 나온 용어들을 알아보도록 하겠습니다. 먼저 APM이란 Apache + PHP + MySQL 의 줄임말입니다. APM 소프트웨어가 존재하는 것이 아니라, 이 3가지가 연동되어 운영되도록 만든 환경을 APM이라고 합니다. Apache와 MySQL이 PHP와 호환성이 좋기 때문에 주로 세 프로그램을 묶어 패키지 형태로 사용합니다 Apache란 정식 명칭은 Apache HTTP server로 웹 서버 프로그램입니다. 웹 서버란 웹 서비스를 제공해주는 서버인데, 예를 들어 사용자가 사이트에 접속하면 웹 서버에게 HTML 파일을 요청합니다. 요청을 받은 웹 서버는 클라이언트 컴퓨터에 HTML..

    CodeEngn Malware03 풀이

    3번도 마찬가지로 어떤 악성코드 소스를 분석하는 문제입니다. 이번 문제는 매우 간단합니다. 어떤 함수인데 데이터랑 그 데이터를 길이를 받고 있습니다. 해당 데이터를 접근하여 해당 값들을 하나씩 value 변수에 중첩시키고 있습니다. 그리고 함수를 리턴할 때 그 중첩된 값 들을 비트반전시켜 리턴해주고 있습니다. 아마도 체크썸함수를 계산해주는 함수로 통신시에 체크섬값을 만들어서 데이터의 무결성을 판단하는 체크썸을 만들어서 공격자가 의도한 악성코드를 전송하는데 사용할 것 같습니다.

    CodeEngn Malware02 풀이

    2번문제입니다. 역시나 악성코드 소스분석입니다. 일단 또 한줄씩 살펴보겠습니다.첫부분을 보면 body라는 배열안에 xml헤더 같은 문자열을 정의하는 부분이 보입니다. 일반적인 xml 정의 코드와는 다르게 DAV라는 문자가 있네요. 그래서 검색을 해보았습니다. 해당 xml코드는 WebDAV라는 프로토콜을 사용하기 위한 정의 방법이였습니다. 여기서 WebDAV 프로토콜은 웹을 읽고 쓰기가 가능한 매개체로 만들고, 사용자가 서버(일반적으로 웹 서버나 웹 공유) 의 문서를 만들고 변경하고 이동할 수 있는 프레임워크를 제공한다고 합니다.일반적인 WebDAV 정의방법입니다. 해당코드와 매우 유사합니다. WebDAV를 사용하는걸 확실히 알 수 있습니다. 여기선 sql문이 보이는것으로 보아서 어떤 쿼리문을 실행시키는 ..

    CodeEngn Malware01 풀이

    악성코드소스를 분석하여 현재 이 악성코드의 공격방법을 알아 내는 것이 목표입니다. 소스코드를 열고 한줄한줄 분석해 보았습니다.현 악성코드의 앞쪽 부분입니다. 단순히 TCP/IP의 헤더를 참조하여 헤더의 값을 세팅하고 있습니다. TCP/IP 에 대하여 좀더 알아보면.. IP는 OSI 7계층 중에서 3계층에 속하는 프로토콜로 Network 계층을 의미합니다. 이 계층은 여러개의 노드를 거칠때마다 경로를 찾아줍니다. 그리고 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그과정에서 전송계층(Transport Layer)이 요구하는 서비스 품질을 제공하기 위한 기능적, 절차적 수단을 제공합니다. IP 헤더의 모습입니다. 코드에서도 해당 구조체 멤버들에게 직접 값을 넣어주는 것을 볼 수 있습니다. 다음은 TC..

    CodeEngn Advance07 풀이

    시리얼을 찾아내는 문제같네요. 프로그램을 확인해보니 C#프로그램이였습니다. 처음에 ExeInfo로 파일부터 확인하는 습관을 들여야겠네요..처음에 아무생각없이 바로 디버거로 열었다가 뻘짓만했네요..C#프로그램에대해 간단하게 설명하면 CLI 인프라스트럭쳐 안에 CIL 이라는 중간언어를 CLR이라는 가상환경에서 돌리고 CLR이 CIL(공통중간언어)를 실행시킵니다.(바이트형태) 이 특징때문에 dotPeek 같은프로그램을 사용하면 코드가 그대로 드러납니다.(패킹,난독화 안되있을시) dotPeek으로 열어보았습니다.이프문을 통과해야지 밑의 성공메세지를 띄웁니다. 프로그램분석을 힘들게하기위해 변수명같은걸 아무 의미없는 문자로 해놓은거같네요.dotPeek에서 프로젝트를 export한뒤 비쥬얼스튜디오로 열어주고, Bru..

    CodeEngn Advance06 풀이

    띠용... 문제가 남은 군생활 구하는 문제입니다.. 무슨 프로그램인지 궁금하네요 ㅋㅋㅋ실행하면 이런 메세지가뜨고 확인을누르면 숫자가 1씩 계속증가합니다.아마도 어떤특정한 값이되면 프로그램이 종료될거같네요. 메세지박스를 출력하는부분입니다. 프로그램종료를위해 값을비교하는부분이 밑에있겠다라고 예상해볼수있습니다.트레이싱하다보니 메세지박스의 내용안에 값을세팅하는 부분이있었습니다.이값은 eax값을 받아와서 출력을위해 숫자값을 아스키코드값으로 변경 시켜주고 있었는데요. 아마 프로그램종료를 위해 eax값이랑 어떤부분을 비교하겠죠? 그럼 eax값이 어디서 세팅되는지 알아보아야된다는 생각에 치트엔진을 써보았습니다.치트엔진이 생각외로좋더라구요 특정주소에 쓰거나 접근하는 주소를 찾는데는 참 편리합니다. 메세지박스의 내용부분의..

    CodeEngn Advance05 풀이

    시리얼을 구하는 문제입니다.음 혹시나 문자열 비교함수가 있는가해서 가보니 딱하나있네요.. 너무나 쉽게 발견해버림..제가 임의로 입력한값인 123 하고 실제 시리얼값을 비교하고있습니다. 시리얼값은 677345 입니다. 풀이완료!

    CodeEngn Advance04 풀이

    이문제도 역시 이름이 CodeEngn 일때 시리얼을 구하는 문제입니다. xor로 코드가 패킹되어있습니다. 시작부분에서 풀어줍니다. xor 연산후에 string이 보이는군요 실패메세지 쪽으로 가줍니다. 값을 받아오는 부분에 bp를 걸고 임의의값인 123을 넣어줍니다.값을 비교하는 부분입니다. 시리얼은 403104주소에있는 LOD-59919-A0024900 입니다.풀이완료!

    CodeEngn Advance03 풀이

    이름이 CodeEngn 일때 시리얼을 구하는 문제입니다. 실패시 이런 메세지가 뜨게되네요음 일단 실패메세지가 뜨니까 실패메세지 뜨는곳에 bp를 걸어줍니다. 두곳이 있으니 두곳다 보내줍니다.실패메세지가 있는쪽에 시리얼이랑 비교하는 부분이 있을거라 예상됩니다.음?? 너무 쉽게 시리얼이 나오네요 아마 출제자는 키젠을 만들라는 의도같네요.. 일단 CodeEngn에 대한 시리얼은 3265754874 풀이완료 !

    CodeEngn Advance02 풀이

    어드벤스드 2번문제입니다. 아무 설명없이 정답을 구하라고 하네요음 ;; 파일이 깨져있네요 EXCEPTION_ACCESS_VIOLATION 예외가 발생합니다.. 혹시 원본파일 가지고 계신분 .... 주시면 감사하겠습니다 ㅠㅠ