binary
코드게이트에 출제된 윈도우 리버싱 문제이다.
다른 팀의 풀이를 보고 한숨 나왔다... 내가 삽질 한거구나.. -_-
프로그램은 자신을 400번이나 재 실행하는 프로그램이다.
프로그램을 분석해보면 재 실행 하는 과정 중 다음 복제할 프로그램의 인자를 생성하고 받은 인자로 키배열로 추정되는 배열을 연산시킨다.
ag1 = 0xA8276BFA
ag2 = 0x92F837ED
ror=lambda x, y: ((x & 0xFFFFFFFF) >> y) | (x << (32-y2)) & 0xFFFFFFFF
rol=lambda x, y: (x << y) & 0xFFFFFFFF | ((x & 0xFFFFFFFF) >> (32-y2))
def ROR(x, y):
x=bin(x & 0xFFFFFFFF)[2:].zfill(32)
start=x[:-y]
end=x[-y:]
return eval('0b' end start)
def ROL(x, y):
x=bin(x & 0xFFFFFFFF)[2:].zfill(32)
start=x[:y]
end=x[y:]
return eval('0b' end start)
def f_401280(a1, a2):
v4 = 1
i = 0
for i in range(0, a2):
v4 *= a1
return v4&0xffffffff
def wtf(str, a1, a2):
v3 = len(str) 1;
v6 = ""
for i in range(0, v3-1, 2):
v6 = chr(int(a1 & 0xff) ^ ord(str[i]))
a1 = ROL(a1, 5) ^ 0x2f
if str[i 1] == "":
break
v6 = chr(int(a2 & 0xff) ^ ord(str[i 1]))
a2 = (a1&0xff) ^ ROL(a2, 11)
return v6
if __name__ == '__main__':
ag3 = 1
flag = 0
key = "\x0F\x8E\x9E\x39\x3D\x5E\x3F\xA8\x7A\x68\x0C\x3D\x8B\xAD\xC5\xD0\x7B\x09\x34\xB6\xA3\xA0\x3E\x67\x5D\xD6"
newag1 = 0
newag2 = 0
newag3 = 1
f = open("result_last.txt", "wb")
for i in range(0, 400):
if i != 0:
ag1 = newag1
ag2 = newag2
ag3 = newag3
result = wtf(key, ag1, ag2)
ag1 = ag1 ^ 0xb72af098
tempag2 = ag1
ag1 *= ag2
ag1 ^= ag2
temp_ag1= ag1 & 0xffffffff
ag1 &= 0xffffffff
ag2 = tempag2
r2 = ""
f.write(result "\n")
ag1 = (29 * ag2 7 * f_401280(ag2, 2)) & 0xffffffff
ag2 = f_401280(ag1 ^ temp_ag1, ag1 % 2 5) & 0xffffffff
ttemp_ag2 = 0
exitcode = 0
if tempag2 >= 0xd0000000:
exitcode = 13 * (ag1 / 27) ^ 0x1f2a990d
ag1 = exitcode
ag2 = newag2
if flag == 0:
ag2 = f_401280(exitcode ^ ag2, exitcode % 30)
ag2 = 0
flag = 1
else:
ag2 = f_401280(newag2 ^ exitcode, exitcode % 30)
ttemp_ag2 = ag2
ag3 = 1
newag1 = ag1
newag2 = ag2
newag3 = ag3
f.close()
코드가 상당히 더러운편인데 그 만큼 멘붕을 했다는 뜻이다.
다른 풀이방법을 생각해보면 함수를 코드패치 해서 messagebox를 띄우는 방법이 있는 등 다른 좋은 방법이 많을 것이다.
대회 당시에도 생각을 하긴 햇지만 이미 코드는 반이상 짜둔터라 그냥 진행 하기로 했었다. [에휴]
Codegate 2015 Bookstore Write-Up [Exploit] (0) | 2015.04.17 |
---|---|
CodeGate 2014 PreQual WeirdShark, dodoCrackme (2) | 2014.02.25 |
CodeGate 2014 PreQual 120 Write Up (0) | 2014.02.25 |
CodeGate 2014 PreQual Angry Doraemon (3) | 2014.02.25 |
CodaGate 2014 PreQual WebProxy write-up (0) | 2014.02.25 |