이번 문제는 지렁이 키우기 게임!
문제 제목은 뱀이지만 지렁이 키우기라 하겠음.
먹이를 하나씩 먹으면서 지렁이를 키워야 하는데 손으로 게임을 이기기엔 시간이 부족할듯?
지렁이 게임을 시작해서 함수를 타고타고 가다보면 스테이지랑 점수로 연산을 하는 부분이 나온다.
print_snake에 a1은 지렁이 머리인것 같지만 중요하지 않으니까 무시하고 넘어가고, sub_4011a5로 들어가보면 첫번째 연산 과정이 나온다.
여기서 스테이지 수에 따라 연산해주고
지렁이 길이가 304이상이면 두 번째 연산과정으로 넘어간다.
v15는 이 전짜기는 0이라 while문 안으로 안 들어가고 원래 v15가 1일 때 game_over, 2일 때 game_clear로 가는데 마지막 과정으로 가기 위해 임시로 바꿔놨다.
죽으면 v15가 1이에요!!
게임을 모두 클리어했다 치고 game_clear로 가보면
또 연산 과정이 나온다. 앞에서 만든 arr배열과 byte_6040e0을 xor하는 작업이다.
이렇게 모두 연산을 하면 키값이 나올 줄 알았는데 이상한 바이트 값들이 나와서 당황... 도대체 이걸 어떻게 return하겠다는건지 모르겠어서 그냥 여기로 오게 위에서 v15비교문을 수정하고 qword_6040180을 리턴 직전에 손으로 일일이 넣어주면 게임 클리어 화면과 함께 키 값이 출력된다.
byte_6040e0=[0x53,0x4A,0x8D,0xED,0x4A,0xBE,0x6E,0x67,0x51,0x63,0x78,0x3E,0x57,0x0E,0x41,0xAD,0x73,0x66,0x33,0x6B,0x4D,0x72,0x62,0x75,0x56,0xA0,0x43,0x57,0x73,0x70,0x7D,0x07,0x6F,0x63,0x47,0xAF,0x75,0x52,0x43,0x6A,0x60,0x61,0x25,0x44,0x12,0xA5,0x36,0x45,0x1E,0x43,0xE0,0x1F,0xCC,0x61,0xE9,0x86,0xFC,0x70,0xFE,0x14,0x90,0x55,0xB8,0x06,0x5D,0x56,0x5E,0x66,0x41,0x61,0x45,0x10,0xAF,0x14,0x17,0x63,0x19,0x39,0x92,0x99,0xA2,0x8C,0x1F,0x9B,0x21,0x11,0x22,0xB7,0x25,0xC5,0x28,0xD6,0x91,0xDD,0x2B,0x77,0x00,0x48,0x31,0xFF,0x0F,0x05]
score=0
pscore=0
stage=1
arr=[0 for i in range(102)]
qword_604180=[0x00 for i in range(102)]
for slength in range(4,305):
score+=stage
if(10*stage+pscore-7<=score):
if(stage&1):
arr[stage-1]+=stage^7
arr[stage+31]=arr[stage+31]+score-pscore+(-3)*stage
arr[stage+63]+=stage+12
else:
arr[stage-1]+=(stage^2)+2
arr[stage+31]+=(2*stage^7)+2
arr[stage+63]+=score-pscore+(-3)*stage+15
stage+=1
pscore=score
if(stage&1):
arr[stage-1]=arr[stage-1]+((stage-score+2*pscore)^0xe)-77
v8=arr[stage+31]
arr[stage+31]=v8+(-20)*(score^2*stage)
arr[stage+63]+=(stage-31304)>>2
else:
arr[stage-1]+=stage+56
v8=score-pscore
arr[stage+31]=arr[stage+31]+score-pscore-123
arr[stage+63]=arr[stage+63]+4*(score-pscore)-9
for i in range(102):
qword_604180[i]=(arr[i]^byte_6040e0[i])&0xff
for i in xrange(102):
print hex(qword_604180[i]),
'Write Up > CTF' 카테고리의 다른 글
welcome to droid (0) | 2018.02.05 |
---|---|
Wandere bits write up (0) | 2018.01.29 |
[CTF]encrypt (0) | 2018.01.14 |
[CODEGATE2017]HelloProtector (0) | 2018.01.07 |
[CODEGATE2017]RamG (0) | 2018.01.07 |