'Wargame/reversing.kr'에 해당되는 글 21건

실행해보면 간단한 키젠문제다.

 

 

IDA로 동적디버깅 환경을 만들어서 트레이싱하다보면 다음과 같이 입력값에 대해 특정 연산들을 거쳐 각각의 값을 비교하는 루틴이 나온다.

 

 

 

 

루틴자체가 상당히 심플하기 때문에 바로 구해주면된다.

 

 

 

'Wargame > reversing.kr' 카테고리의 다른 글

reversing.kr AutoHotkey1  (0) 2018.06.29
Reversing.kr Twist1  (0) 2018.02.27
Reversing.kr CSHOP  (0) 2018.02.16
Reversing.kr Position  (0) 2018.02.16
Reversing.kr ransomware  (0) 2018.02.16
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

C#으로 만들어진 프로그램이다.

 

.NET reflector로 디컴파일한 후 보면 어떤 버튼을 클릭했을때 요런 값들이 세팅되는걸 볼 수 있었다.

 

 

답인줄 알고 신나게 인증해봤는데 역시나 아니었다. ㅋㅋ

 

침착하고 코드를 좀 더 보다보니까 위에서본 버튼이 실제 프로그램상에서는 size가 0,0으로 세팅되서 보이지 않고 있는걸 알 수 있었다.

 

 

저 사이즈 값을 변경해서 다시 컴파일한 뒤 나타난 버튼을 누르면 될 것 같았다. 근데 막상 요 과정을 진행하려니 귀찮았고 보이지만 않을 뿐 버튼이 존재는 하고 있으니 탭으로 해당 버튼에 포커스가 가도록 조정하면서 엔터를 일일히 눌러보면 이 버튼이 클릭되지 않을까 싶었다.

 

실제로 해보니 정답이 나왔다. C#은 좀 제대로 공부좀 해봐야 할 것 같다.

 

 

'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr Twist1  (0) 2018.02.27
Reversing.kr Easy_ELF  (0) 2018.02.17
Reversing.kr Position  (0) 2018.02.16
Reversing.kr ransomware  (0) 2018.02.16
Reversing.kr Music Player  (0) 2018.02.16
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

정해진 시리얼키에 해당하는 name값을 알아내면 되는 문제다.

 

올리디버거로 좀 보다가 루틴이 생각보다 복잡해서 ida로 까서 분석했다.

 

일단 맨 처음 name값의 길이가 4인지 체크한다.

 

 

그 다음 name값이 모두 알파벳 소문자로 이루어졌는지 확인한다.

 

 

그 다음 name값 중 서로 같은값이 존재하는지 확인한다.

 

 

그 다음 serial값이 11글자이고 6번째 값이 - 인지 확인한다.

 

 

여기까지 모든 조건이 일치하면 이제 입력받은 name값을 통해 특정 연산들을 거쳐 구한 값들과 serial이 일치하는지 확인한다.

 

연산로직은 크게 2가지로 이루어지는데 name의 첫번째 두번째 값을 통해 serial의 앞 5번째 값과 비교하고 name의 세번째 네번째 값을 통해 serial의 뒤 5번째 값과 비교한다.

 

 

 

 

 

이제 위의 코드를 토대로 파이썬으로 스크립트짜서 brute forcing해주면 된다. 이 때 readme 파일에서 name의 마지막 값이 p라고 했으니 이를 토대로 구해주면 된다.

 

serial = [7,6,8,7,6,7,7,7,7,6]

for i in range(ord('a'),ord('z')+1):
for j in range(ord('a'),ord('z')+1):
name_0 = i
name_1 = j
v7 = (name_0 & 1) + 5;
v48 = ((name_0 >> 4) & 1) + 5;
v42 = ((name_0 >> 1) & 1) + 5;
v44 = ((name_0 >> 2) & 1) + 5;
v46 = ((name_0 >> 3) & 1) + 5;
v34 = (name_1 & 1) + 1;
v40 = ((name_1 >> 4) & 1) + 1;
v36 = ((name_1 >> 1) & 1) + 1;
v9 = ((name_1 >> 2) & 1) + 1;
v38 = ((name_1 >> 3) & 1) + 1;

if v7 + v9==serial[0] and v46 + v38==serial[1] and v42 + v40==serial[2] and v44 + v34==serial[3] and v48 + v36==serial[4]:
print "name[0]="+chr(i)+" name[1]"+chr(j)

for i in range(ord('a'),ord('z')+1):
for j in range(ord('a'),ord('z')+1):
name_2 = i
name_3 = j
v21 = (name_2 & 1) + 5;
v49 = ((name_2 >> 4) & 1) + 5;
v43 = ((name_2 >> 1) & 1) + 5;
v45 = ((name_2 >> 2) & 1) + 5;
v47 = ((name_2 >> 3) & 1) + 5;
v35 = (name_3 & 1) + 1;
v41 = ((name_3 >> 4) & 1) + 1;
v37 = ((name_3 >> 1) & 1) + 1;
v23 = ((name_3 >> 2) & 1) + 1;
v39 = ((name_3 >> 3) & 1) + 1;

if v21 + v23==serial[5] and v47 + v39==serial[6] and v43 + v41==serial[7] and v45 + v35==serial[8] and v49 + v37==serial[9]:
if chr(j)=='p':
print "name[2]="+chr(i)+" name[3]"+chr(j)

위 코드를 돌려주면 다음과 같은 값들이 나온다. 뒤의 2자리가 mp이고 앞의 2자리가 4가지 경우의 수가 있으니 name값은 총 4가지가 존재할 수 있다.

 

 

bump
cqmp
ftmp
gpmp

 

위의 값 중 해당문제에선 bump만 정답으로 인증을 하고 있었다. 쨋든 이 값을 넣어줬더니 문제가 풀렸다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr Easy_ELF  (0) 2018.02.17
Reversing.kr CSHOP  (0) 2018.02.16
Reversing.kr ransomware  (0) 2018.02.16
Reversing.kr Music Player  (0) 2018.02.16
Reversing.kr Direct3D FPS  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

전형적인 랜섬웨어 문제다. 그나마 다른점은 보통의 랜섬웨어가 전체파일시스템을 암호화 하는거에 비해 이 문제는 하나의 파일에 대해서만 암호화 과정을 진행한다.

 

일단 프로그램을 실행해보면 키값을 입력하고 이를 토대로 암호화된 파일을 복호화 하는걸로 추측할 수 있다.

 

 

실질적인 복호화 루틴을 확인하기위해 분석을 해본 결과 다음과 같은 핵심로직을 찾을 수 있었다.

 

 

암호화된 파일을 1바이트씩 읽어서 내가 입력한 키의 hex값과 0xff를 순서대로 xor해서 복호화를 진행하고 있었다. 이 때 키 값은 내가 입력한 키를 반복적으로 적용하고 있었다.

즉  암호화된 파일 xor 키 xor 0xff = 복호화된 파일 요런 식으로 정의할 수 있었다.

이 때 키 값과 복호화된 파일 두가지를 모르기 때문에 xor를 통해 뭘 어떻게 할 수 있는 상황이 아니었다. 근데 문제파일중에 README파일을 보면 복호화된 파일이 exe파일이라는 힌트가 적혀있었다. 그렇다면 PE헤더의 DOS HEADER부분을 활용하면 Key값을 구할 수 있을거라고 생각했다.

 

DOS Header에서 0x30만큼의 바이트값을 가져와서 키 = 복호화된 파일 xor 암호화된 파일 xor 0xff 해주는 파이썬 스크립트를 짜서 돌렸더니 다음과 같이 키값으로 반복적인 값이 출력되는 걸 볼 수 있었다.

 

 

 

그렇다면 키 값은 letsplaychess라는걸 알 수 있고 이 값을 키로 입력해주면 파일이 복호화 된다.

복호화된 파일은 exe파일이기때문에 확장자를 변경해서 실행해주면 다음과 같이 flag가 나온다.

 

 

 

 

 

 

 

 

 

 

'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr CSHOP  (0) 2018.02.16
Reversing.kr Position  (0) 2018.02.16
Reversing.kr Music Player  (0) 2018.02.16
Reversing.kr Direct3D FPS  (0) 2018.01.21
Reversing.kr ImagePrc  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

프로그램을 실행시켜보면 노래 듣기 기능을 제공하는데 이 때 1분까지만 듣기가 가능하다.

 

 

보아하니 일단 1분 넘게 노래를 듣도록 해봐야겠다는 생각이 들었다.

 

일단 rtcMsgBox에다 죄다 BP걸고 돌려보니 해당 메시지박스가 뜨는 위치를 찾았고 위쪽을 좀 보다보면 다음과 같이 0EA60과 어떤값을 비교하는 부분이 존재했다.

 

 

비교하는 값을 0EA60보다 크게 만든 후 프로그램을 실행해보면 1분이상 듣기가 가능해지는걸 알 수 있었다.

여기서 끝났구나 했는데 문제가 하나 더 남아있었다. 노래는 1분이상 듣는게 가능한데 다음과 같이 예외가 발생하면서 플래그가 아닌 에러메시지가 나타났다.

 

 

해당 에러메시지가 뜨는 곳을 찾기 위해 rtcMsgBox에 다시 BP를 걸어봤지만 BP가 걸리지가 않았다. 아무래도 해당 에러메시지가 dll쪽에서 발생하는 것 같았다. 그래서 다른 방법이 뭐가 있을까 생각하다가 예외가 발생한 시점의 Call Stack을 확인해봤다.

 

 

예외가 발생하기 전에 4046BF가 리턴주소로 스택에 들어와있는걸 볼 수 있었고 예외가 발생하면서 해당 지점으로 리턴하지 못했을거라고 생각했다. 그래서 일단 4046BF지점을 확인해봤다.

 

 

해당 지점을 확인해보니 바로위의 4046B9 주소에 vbaHresultCheckObj 함수 내에서 예외가 발생하고 있는걸 알 수 있었다. 해당 함수내부로 들어가서 더 분석을 해도 되겠지만 위의 JGE를 패치해서 아예 해당 함수가 호출안되도록 해도 상관없을것 같았다.

 

 

위의 사진처럼 해당 함수를 호출안하고 넘어가도록 코드패치한뒤 진행해보니 요렇게 프로그램 제목에 패스워드 값이 떴다.

 

 

 

 

'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr Position  (0) 2018.02.16
Reversing.kr ransomware  (0) 2018.02.16
Reversing.kr Direct3D FPS  (0) 2018.01.21
Reversing.kr ImagePrc  (0) 2018.01.21
Revering.kr Replace  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

파일을 실행해보면 간단한 총게임이 하나 나오고 펭귄들을 죽일 수 있다.

Ollydbg로 까서 실행한 후에 문자열을 확인해 보니 다음과 같이 성공문자열이 있었고 메시지 박스 내에 이상한 문자들이 박혀있는게 보였다. 이 부분에 하드웨어 BP걸고 돌려봤다.


쭉 트레이싱 하다보니 해당부분에서 멈춰서 분석을 해보니 캐릭터 별로 EAX에 특정 값(0x00~0x32)이 할당되어 있고 이 값을 토대로 계산된 ECX+1199190 주소에 각 캐릭터의 피 값이 담겨있었다. 이 부분이 0이하가 되면 XOR BYTE PTR DS: [EAX+1197028],CL 구문에 의해 성공문자열에 담겨있던 이상한 문자들이 복호화되어 나타나는 것을 확인할 수 있었다.이 때 EAX에는 각 캐릭터의 번호가, CL에서 캐릭터 번호*4의 값이 있는 것을 확인할 수 있었고 이를 토대로 코드를 짜서 돌렸다.

 

잘나온당.


'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr ransomware  (0) 2018.02.16
Reversing.kr Music Player  (0) 2018.02.16
Reversing.kr ImagePrc  (0) 2018.01.21
Revering.kr Replace  (0) 2018.01.21
Reversing.kr Easy Crack me  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

파일을 실행시켜 보면 이미지를 그리라하고 아무거나 그려넘기면 틀렸다고 나온다.

내가 그린 그림의 대한 어떤 값과 해당 파일이 가지고 이름 그림에 대한 값이 비교될 것이고 그 해당값을 알아내면 끝.

위의 루틴을 보면 ECX에 있는 값과 EAX+ECX에 있는 값을 15F90(90000)번 비교한 후 실패메시지로 넘어가는 것을 볼 수 있다.
해당 메모리 주소로 가보면 ECX에는 내가 그린 이미지에 대한 값이, EAX+ECX에는 내가 그린 이미지에 대한 값이 저장되어 있다.
그렇다면 EAX+ECX메모리 주소에서 15E90만큼의 값을 구해오면 된다.
 

맨 처음 EAX+ECX 메모리 주소값인 0047E060에서 15E90을 더한 00493FF0 까지의 값을 구해온 뒤 내가그린 값인 ECX부터 ECX + 15E90까지의 값에 정답 값을 넣어주고 실행시켜봤다.

뭔가 정답이 나올줄 알았는데 틀렸다는 메시지만 안나올뿐 아무런 반응이 없었다. 그렇다면 이 값을 가지고 어떠한 이미지 파일을 만들면 될 것 같았다. 그래서 해당 코드부터 위쪽을 좀 봤더니 요런게 있었다.

CreateCompatibleBitmap이란 함수로 가로 200 세로 150짜리 bitmap 이미지 파일을 생성한 것을 볼 수 있었다. 그렇다면 이 실행파일은 위의 크기의 bitmap파일에 기존에 비교했던 값들을 담고 있었다고 생각해봤다. 그래서 그림판으로 bitmap 파일을 하나 만든 후 hexeditor로 정답값에 대한 binary값을 넣어봤다.

만들어진 bitmap 파일을 열어보니 정답이 나왔당.

 


'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr Music Player  (0) 2018.02.16
Reversing.kr Direct3D FPS  (0) 2018.01.21
Revering.kr Replace  (0) 2018.01.21
Reversing.kr Easy Crack me  (0) 2018.01.21
Reversing.kr Easy Unpack  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

파일 실행 후 아무값이나 넣어보면 Wrong이라는 문자열과 함께 작동이 중지됬다고 나온다.

Ollydbg로 실행해보니 다음 MOV BYTE PTR DS:[EAX],90 이 부분에서 violation이 발생해 더이상 진행이 안되고 있었다. 90(NOP) 값을 넣는 EAX부분이 60160646 이라는 값인걸 보니 존재하지 않는 주소에다 NOP를 박으려고 에러가 났다.
임의의 주소값 아무거나 넣고 트레이싱해보니 요런 루틴으로 넘어왔다.

SetDIgItemTexTA 함수를 통해 어떤 문자열을 세팅하는데 그 위의 JMP구문이 있어서 무조건 이 부분을 지나치게 된다. 요상한 ascii 문자열 값이 담기는데 뭔지 궁금해서 jmp구문 수정해서 일단 해당 부분으로 넘어가게 해봤더니 Correct!란 값이 떳다. 이루틴으로 들어갈 수 있게 해야 될 것 같다.

그렇다면 JMP 구문을 어떻게든 패치를 해야되는데 이전에 에러 발생을 시켰던 특정 주소값에 NOP 코드를 박는 부분을 활용하면 될 것 같다. 일단 테스트 해보자.

 

EAX값에 JMP 코드가 있던 주소값을 박아서 넘기니 실제로 NOP처리가 되서 성공루틴으로 가는걸 볼 수 있었다. 그럼 내가 입력한 값을 통해 이를 가능하게 해야되는데 내가 입력한 값이 EAX값에 어떠한 영향을 주고있는지 테스트해봤다.

 

1넣었을때 601605CC , 2넣었을떄 601605CD가 나온걸로봐선 601605CB라는 base값에 내가 입력한 값을 16진수로 변환해서 더하고있는걸 알 수 있었다.
그렇다면 601605CB + 입력값 = 00401071 요렇게 나와야하기 때문에
100401071 - 601605CB 한 16진수값을 10진수로 바꿔 넘기면 끝이당.


'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr Direct3D FPS  (0) 2018.01.21
Reversing.kr ImagePrc  (0) 2018.01.21
Reversing.kr Easy Crack me  (0) 2018.01.21
Reversing.kr Easy Unpack  (0) 2018.01.21
Revering.kr Easy_keygen  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

파일을 실행해보면 다음과 같이 뜬다.

ollyDbg로 까서 보면 첫번째 비교 루틴을 통해 두번째 값 a(61)인 것을 확인.

두 번째 비교 루틴에서 00401150 함수를 콜해 5y와 입력한 값의 3,4번째 값을 비교한다. 이를 통해 3,4번째 값 5y확인.

세 번째 비교 루틴에서 R3versing과 5번째부터 마지막글자까지 비교한다.

마지막으로 첫 번째 글자가 E(45)인지 비교한 후 성공 문자열 띄운다.

 


'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr Direct3D FPS  (0) 2018.01.21
Reversing.kr ImagePrc  (0) 2018.01.21
Revering.kr Replace  (0) 2018.01.21
Reversing.kr Easy Unpack  (0) 2018.01.21
Revering.kr Easy_keygen  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

해당 문제의 exe파일 다운로드 후 실행하면 다음과 같이 빈화면이 하나 뜨고 아무런 반응이 없다.

peid 열어보니 뭘로 패킹이 되어있는지 알 수가 없다.

Ollydbg로 연 다음 쭉 트레이싱 하다보면 packing 된 프로그램 특성상 unpacking 과정을 거치기 위해 암호화 된 코드들을 풀어주는 복호화 루틴을 거치게 되고 실제로 여러 구간에서 이러한 복호화 작업들이 이루어지고 있다. 최종적으로 복호화가 모두 끝나면 언패킹 된 코드의 OEP로 점프한당.

실제로 가보면 OEP가 나온당.

 

 


'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr Direct3D FPS  (0) 2018.01.21
Reversing.kr ImagePrc  (0) 2018.01.21
Revering.kr Replace  (0) 2018.01.21
Reversing.kr Easy Crack me  (0) 2018.01.21
Revering.kr Easy_keygen  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,