안경잡이개발자

728x90
반응형

  코드포스의 경우 다른 사람의 소스코드를 해킹(Hack)할 수 있는 기능이 제공된다. 사실 처음에는 알고리즘 대회인데 해킹 시스템이 왜 있는지 궁금했다. 해킹은 다른 사람의 소스코드를 지적하는 의미가 되기도 하고, 알고리즘 대회 자체가 가지고 있는 채점 데이터 셋의 오류를 지적하는 의미가 되기도 한다.

 

  일단 코드포스에서는 대회 도중에 해킹(Hacking)하는 경우와, 대회가 끝난 뒤에 12시간 동안 오픈 해킹(Open Hacking)을 하는 경우가 있다. 방법은 기본적으로 유사하다. 일단 상대방의 소스코드를 확인한 뒤에 문제가 있다고 판단이 되면, 소스코드에서 제대로 처리하지 못할 입력(Input)을 만들어서 입력하면 된다.

 

  내 코드를 잠금(Lock) 했거나, 오픈 해킹 기간일 때는 다음과 같이 다른 사람들의 소스코드를 확인할 수 있다. 기간 안에는 이러한 소스코드에 해킹을 시도할 수 있다.

 

 

  다른 사람의 소스코드를 확인한 뒤에 [hack it!] 버튼을 눌러서 해킹을 시도하면 된다.

 

 

  해킹을 시도할 때는 입력 문자열을 직접 넣거나, 입력 문자열이 담긴 파일을 업로드해서 제출하면 된다.

 

 

  나는 한 번 자핵을 해보았다. 내가 낸 소스코드에 문제가 있는 것 같아서, 오픈 해킹 기간 때 내 소스코드를 직접 공격해보았다. 아무튼 해킹에는 성공했다.

 

  해킹에 성공한 경우 다음과 같이 "Successful hacking attempt"라는 메시지가 나온다. 해킹에 실패한 경우 "Unsuccessful hacking attempt"라고 나오며, 입력 자체가 잘못된 경우에는 "Invalid input"이라는 메시지가 나온다.

 

 

  해킹에 성공한 경우, 해킹을 당한 쪽은 다음과 같은 메시지가 출력된다.

 

 

  다음과 같이 스탠딩(Standing)에서는 "해킹 성공 횟수 : 해킹 실패 횟수" 정보가 출력된다.

 

 

  해킹 시스템은 상당히 재미있는 것 같다. 해킹 시스템이 있기 때문에, 채점 데이터셋은 더욱 견고해진다. 실제로 간당간당하게 시간 초과나 메모리 초과를 벗어난 코드들은 채점 데이터가 조금 더 추가되면, 운에 따라서 오답 코드로 처리되기도 한다. 나는 최근에 Pypy로 문제를 풀고 있는데, C++에서는 정답 처리가 될 법한 코드가 가끔씩 TLE를 받기도 한다.

 

[ 해킹용 입력 데이터 만드는 예제 코드 ]

 

import random

f = open("test.txt", 'w')
# The number of test cases
f.write('1\n')
# Input: N
f.write('10000\n')
for i in range(10000):
    # Make random data.
    f.write(str(random.randrange(1, 1001)) + ' ')
f.close()
728x90
반응형

Comment +0

728x90
반응형

  Pwn Adventure 3게임 해킹(Game Hacking) 공부를 목표로 하여 만들어진 게임입니다. 일종의 MMORPG 게임인데, 이 게임에서는 모든 것을 해 볼 수 있습니다. 이 게임은 간단한 형태의 매우 많은 취약점을 내장하고 있다는 점에서 하늘 날기(Flying), 돈 버그(Endless Cash), 이외에도 클라이언트 데이터 변조 혹은 네트워크 해킹이 가능합니다.


  물론 이러한 게임 해킹 과정을 통해서 단순히 게임을 불법적으로 즐기는 것이 아니라, 취약점을 찾아서 게임을 개발한 사람에게 알려주겠다는 착한 마인드로 공부를 하셔야 됩니다. 이 게임은 개발자가 놓치기 쉬운 부분들을 누락시켜서, 고의적으로 문제가 있도록 개발이 되어있습니다. 그래서 엔진 자체를 해킹하려는 시도보다는 이 게임을 면밀히 분석해서 해킹하는게 좋습니다.


  ▶ 공식 웹 주소: http://www.pwnadventure.com



  사이트에 접속하면 바로 게임을 다운로드 해볼 수 있습니다.



  자신의 운영체제에 맞게 다운로드를 진행해주세요.



  압축 파일을 압축 해제 해보시면 위와 같이 설치 프로그램이 존재합니다. 이를 실행해서 설치를 진행해봅시다.



  설치를 위해서 외국 서버로부터 데이터를 받아오는데, 외국 서버가 생각보다 많이 느려서 기다리실 필요가 있습니다.



  설치가 완료되면 'Play' 버튼을 눌러서 게임을 시작할 수 있습니다.



  아직 우리는 서버를 설정하지 않았기 때문에 오프라인 플레이(Offline Play)를 눌러봅시다.



  그러면 위와 같이 캐릭터를 선택하여 생성할 수 있습니다.



  간단하게 게임을 실행해보면서 대략적인 게임 방법에 대해 알아보는 시간을 가지시면 됩니다.

728x90
반응형

Comment +0