본문 바로가기
Write Up/CTF

[CODEGATE2017]HelloProtector

by wlgpdnjs 2018. 1. 7.

실행하면 아무것도 안 뜨는 창이 하나 생기는데 ida로 까보려 하니까 패킹되어 있다고 한다.

내가 갖고 있던 PEiD로 볼 때는 아무것도 없다고 떠서 다른 프로그램으로 확인해봤더니 themida 2.x로 패킹됐다고 뜬다.

올리디버거로 언팩한 다음 열어서 문자열을 보면은 어떤 문자열이랑 c0nGr47uRaTioN!_Y0u_F0uNd_A_k3y!이랑 비교한다.


str1을 사용하는 곳을 찾아보니 sub_4011A0에서 연산한 값이 str1에 들어가는 걸 확인할 수 있다.




여기서 str1[i]^str1[i+1]^str2[i]^str2[i+1]연산을 반복하는데 str1(v3)에는 내 드라이브 이름이 들어가고 str2에는 16진수 값들이 32개가 들어있다. 여기서 xor연산을 한 값이 c0nGr47uRaTioN!_Y0u_F0uNd_A_k3y!가 나오게 되는 드라이브 이름이 키 값일 거라 생각함



드라이브 이름과 16진수 값 가져오는 부분


드라이브 이름은 16진수 값들과 축하한다는 문자열을 xor해서 얻을 수 있다.



str1="c0nGr47uRaTioN!_Y0u_F0uNd_A_k3y!"
str2=[0x37,0x06,0x10,0x66,0x3A,0x38,0x50,0x4D,0x02,0x01,0x63,0x01,0x36,0x63,0x53,0x7F,0x4A,0x62,0x4B,0x2D,0x4D,0x64,0x76,0x7D,0x25,0x75,0x5E,0x6E,0x74,0x0C,0x7C,0x18]

flag=chr(ord(str1[0])^str2[0])
for i in range(1,len(str1)):
	flag+=chr(ord(str1[i-1])^str2[i-1]^ord(str1[i])^str2[i])

print flag


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

이 문제는 분석보다는 언패킹이 더 어려웠다.

올리디버거와 플러그인 몇 개, themida 언패킹 스크립트를 이용해 풀 수 있는데

여기서 사용하는 플러그인 중 하나가 64bit에서는 실행이 안된다는 에러 메시지가 자꾸 떠서 windows 7 32bit환경에서 풀어줬다.

언패킹 동영상이 있으니까 따라하면 금방 할 수 있다.

언패킹 : https://www.youtube.com/watch?v=CB7o7W604SI

사용된 툴 : ollydbg110, ARImpRec, OdbgScript, PhantOm, StrongOD, Thmida - Winlicense Ultra Unpacker 1.4

'Write Up > CTF' 카테고리의 다른 글

[Secuinside2017]snake  (0) 2018.01.14
[CTF]encrypt  (0) 2018.01.14
[CODEGATE2017]RamG  (0) 2018.01.07
Defcon CTF 2017 Witchcraft  (0) 2017.07.08
Defcon CTF 2017 Alchemy  (0) 2017.07.08