블로그 이미지
ludwings

카테고리

분류 전체보기 (130)
WIN API (22)
워게임 (61)
만든것 (2)
메모 (37)
Total18,086
Today0
Yesterday3

'워게임'에 해당되는 글 61건

  1. 2013.11.21 codeengn advance rce l10 풀이
  2. 2013.10.31 섹션 합치기 & 섹션 추가 (2)
  3. 2013.10.31 thisislegal.com application 1,2,3
  4. 2013.10.24 B1ind3r Reversing 2, 3 (2)
  5. 2013.10.23 canyouhack.it crack 1, 2
  6. 2013.10.21 codeengn : basic 03 (2)
  7. 2013.10.15 WINDBG 명령어 정리
  8. 2013.10.15 CodeInjection
  9. 2013.10.14 IAT 후킹..계산기
  10. 2013.10.08 xcz.kr prob 9 , prob 19 ,prob 30 (3)

코드엔진푸는데 10번풀이가없어보이길래 혹시 도움이 될까 써본다

이 문제를 풀면서 조금 답답했던 것은

 

1. 함수로 인자를 넘길때 push 가 아닌 [esp + x] 의 형태로 값을 넘긴것

2. 중간중간에 분석을 어렵게 만드는 필요없는 코드들

 

이 두가지들이다.

첫번째 문제는 의식하고 계속 확인하면 익숙해질수 있었고 사실 두번째가 가장 큰문제 였는데

그냥 name이나 serial 등 이 값을 조작하지 않는 함수들은 그냥 건너뛰고 가장 마지막

"good job~~" 을 출력하기 위해 어떤 조건이 필요한지 뒤에서 부터 천천히 따라갔다.

 

분석결과 이 문제는

 

name값 1개당 serial 3자리와 비교하고,

비교하는 과정은 프로그램내에서 정의한 문자열에서 name 1글자와 serial 1글자를 찾아 2번째 위치를 찾는다. 그리고 두값의 차가 5이하여야 한다.

 

ex)

프로그램내의 문자열이 "ABCDA"고 name의 한글자가 'A' 일때

2번째 위치는 4..

 

이런식으로 모든값들의 차가 5이하면 통과이다..

사진이없어서어렵네..?

 

결국코드는..

#include 
#include 
#include 
#include 

int func(int start, char ch)
{
	int result = -1;

	char str[] = {
		0x41, 0x4A, 0x58, 0x47, 0x52, 0x46, 0x56, 0x36, 0x42, 0x4B, 0x4F, 0x57, 0x33, 0x59, 0x39, 0x54,
		0x4D, 0x34, 0x53, 0x32, 0x5A, 0x55, 0x20, 0x49, 0x37, 0x30, 0x48, 0x35, 0x51, 0x38, 0x31, 0x50,
		0x44, 0x45, 0x43, 0x4C, 0x4E, 0x41, 0x4A, 0x58, 0x47, 0x52, 0x46, 0x56, 0x36, 0x42, 0x4B, 0x4F,
		0x57, 0x33, 0x59, 0x39, 0x54, 0x4D, 0x34, 0x53, 0x32, 0x5A, 0x55, 0x20, 0x49, 0x37, 0x30, 0x48,
		0x35, 0x51, 0x38, 0x31, 0x50, 0x44, 0x45, 0x43, 0x4C, 0x4E, 0x41, 0x4A, 0x58, 0x47, 0x52, 0x46,
		0x56, 0x36, 0x42, 0x4B, 0x4F, 0x57, 0x33, 0x59, 0x39, 0x54, 0x4D, 0x34, 0x53, 0x32, 0x5A, 0x55,
		0x20, 0x49, 0x37, 0x30, 0x48, 0x35, 0x51, 0x38, 0x31, 0x50, 0x44, 0x45, 0x43, 0x4C, 0x4E, 0x00
	};

	for(int i = start ; i < strlen(str) ; i++ )
	{
		if(str[i] == ch)
		{
			result = i;
			break;
		}
	}

	return result;
}

int func2(char ch)
{
	int tmp = func(0, ch);
	int result = func(tmp+1, ch);

	printf("%c : %d 0x%02X\n", ch, result, result);

	return result;
}
int main()
{
	// 43 ~ 48
	// 66 ~ 71
	// 33 ~ 38
	// 36 ~ 41
	int num1=43, num2=48 ;

	int base = func2('R');

	for(int i = 'A' ; i <= 'Z' ; i++)
	{
		int result = base - func2(i);
		if(result >= -5 && result<=5)
			printf("★\n");
	}

	for(int i = '0' ; i <= '9' ; i++)
	{

		int result = base - func2(i);
		if(result >= -5 && result<=5)
			printf("★\n");
	}

	return 0;
}

위 코드와 같이 작성해서 값 찾은 다음에 확인해보았더니 good job~~ 을 출력한다~~ 그럼이제

가장 빠른값을 찾아서 입력하면 되겠다.

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

codeengn advance rce l11 풀이  (0) 2013.11.25
codeengn advance rce l15 풀이  (0) 2013.11.22
codeengn advance rce l10 풀이  (0) 2013.11.21
섹션 합치기 & 섹션 추가  (2) 2013.10.31
thisislegal.com application 1,2,3  (0) 2013.10.31
B1ind3r Reversing 2, 3  (2) 2013.10.24
Posted by ludwings

댓글을 달아 주세요

다른분들 한거보니까 원본을 통째로 다른 섹션에 함호화해서 넣어 두고 실행할때 복호화하면서 꺼내는거 같다... 그럼일단 섹션 합치는거랑 섹션 추가 하는거를 한번 해보자~

 

1. 섹션 추가

섹션을 추가하기 위해서 먼저 NT HEADER 에서 Number of Sections 를 늘려줘야 겠고, Section Header 뒤에 추가하고자하는 Section Header를 정의해주고, Section의 내용을 추가해주면 되겠다.

 

hello_ludwings에 .ludwig 를 추가해 보겠다.

 

number of section을 5에서 6으로 수정했다.

 

 

섹션 헤더를 추가한 모습

1. name 8byte

2. virtual size 100으로 했다 메모리에서 section의 크기

3. RVA( Virtual Address ) 메모리에서의 시작 위치인데 OPTIONAL HEADER의 Section Alignment 가 0x1000이니 이전 섹션에서 0x1000만큼 더해준다 (물론 이전 섹션의 Size가 0x1000을 넘어가면 0x2000을 더해줘야한다)

4. size of raw data

5. pointer to raw data 위 2개와 같은데 파일에서다.

 

6. 그리고 그냥 뒤에 쓸데없는 내용을 0x200 byte를 추가 해준다 (size of raw data 를0x200으로 줫다)

 

그리고 파일을 peview로 확인ㅇ하면 섹션이 정상적으로 추가된걸 확인할수 있는데 이거 실행될줄 알고 실행해보니까 실ㄹ행이안되!!! 왜!!!! 왜안돼!!! 했는데 알고보니까

 

섹션이 추가되면서 파일이나 메모리에서의 크기가 변했으니 sizeof Image 값도 변경해 줘야겠다..  이 size of image 값은 마지막 섹션의 RVA 값 + Vitural Size 이다. 아까 Virtual Size를 0x100으로주고 RVA를 0x6000으로 줬으니까 Size of Image는 0x6100으로 수정하면 되겠ㅅ다.

 

 

이렇게 수정하고 실행하니까 실행이 잘된다!

 

추가끝

합치는거 해보는데 자꾸 블루스크린이 뜬다.... 해결하고 다시정리해서 올리겠다.

 

2. 이제 하나로 합치는 연습

 

 

이렇게 되어있는데 .text .rdata .data를 .text에 다 넣어 보겠다.

 

1. 마찬가지로 number of sections를 수정하고

 

2. section header 에서 섹션의 위치는 바꿀 필요없고 섹션의 크기를 변경해줘야한다. 그리고 .rdata와 .data의 내용을 .text 뒤에 모두 붙이고 헤더내용을 모두 지워준다. 그러면서 .text의 시작위치가 앞으로 당겨졌으니까 중간에 byte를 추가하여 section 시작위치가 file alignment에 맞게 수정해준다.

-->

( 중간의 섹션들이 없어지면서 뒤쪽의 섹션들 또한 앞으로 당겨졌기 때문에

중간에 있는 섹션들의 메모리상의 위치와, 파일에서의 위치를 수정해줘야한다. 수정할때는 File alignment와 memory alignment를 참조하면 된다. 이건 나중에)

 

 

 

 

이사진은 text 내용 뒤에 rdata와 data의 내용들을 붙여 넣은 것인데 앞에서 말햇듯이 text 바로뒤의 섹션 .rsrc가 file alignment에 맞게 있도록 해야한다.

여기서 보면 실제 rsrc 의 시작위치가 0x1400 로 변경되었는데 원본의 section header 에서의 pointer to raw data( 파일에서의 섹션 시작위치) 는 0x1600으로 보이니까 수정해주자 크기는 똑같다. ( 여기서 실수한게 .text의 크기도 0x0970가이 아닌 0x09b0 ,  16이아니라 14 / 18이 아니라 16 이다 ㅋㅋ 잘못저금 ) 

추가로 .text 섹션의 크기도 수정ㅎ ㅐ줘야겟지.. 시작 위치가 0x400 이고 끝나는위치가 0x db0  이니까  크기는 0x 9b0이다

 

 

저장하고 peview로 확인하면 저렇게 나오는데 차이점은 IMAGE_RESOURCE _DIRECTORY와 .rdata의 IAT 등이 표시되지 않는 건데 이 값은 또 수정해 줘야한다.

 

 

 

 실행은 역시 안된다.

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

codeengn advance rce l15 풀이  (0) 2013.11.22
codeengn advance rce l10 풀이  (0) 2013.11.21
섹션 합치기 & 섹션 추가  (2) 2013.10.31
thisislegal.com application 1,2,3  (0) 2013.10.31
B1ind3r Reversing 2, 3  (2) 2013.10.24
canyouhack.it crack 1, 2  (0) 2013.10.23
Posted by ludwings

댓글을 달아 주세요

  1. 2014.01.10 15:44 신고 QBeom  댓글주소  수정/삭제  댓글쓰기

    역시나잼ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

thisislegal 리버싱문제를 풀었다.

 

4번은 무슨 16bit dos 디버거로 해결하는거여서 내비려뒀다

 

1번 그냥 쉽다

올리디버거로 붙인후에, 성공 출력하는 곳으로 가보면

바로위에 어떤 '위치' 에서 실행되면 출력되는것을 확인할수있다.

이걸 위치를 안옮겨주고 그냥 파일을 패치해버리면 정답이 제대로 출력되지 않는다.

 

2번 클릭하면댐!

마우스올리면 disable로 바뀌어버리는 귀요미문제 ㅋㅋㅋㅋ 클릭하라고해놓고는..

이것도 올디로 열어서 mousemove 부분을 그냥 click event 부분으로 점프하게 해버렷더니 답이 쉽게 나왔다. (vb decompiler 도움도 받았다)

 

3번 이것도 1번처럼 성공메세지가서 위의 string을 비교하는 부분을 step into 하면서

stack을 잘보니 내가 입력한 문자열 "1234"와 key값 "어쩌고저쩌고" 가 같이 나와서 풀었당

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

codeengn advance rce l10 풀이  (0) 2013.11.21
섹션 합치기 & 섹션 추가  (2) 2013.10.31
thisislegal.com application 1,2,3  (0) 2013.10.31
B1ind3r Reversing 2, 3  (2) 2013.10.24
canyouhack.it crack 1, 2  (0) 2013.10.23
codeengn : basic 03  (2) 2013.10.21
Posted by ludwings

댓글을 달아 주세요

 

Reversing_2.exe

 

ReverseMe.exe

 

 

4115d1 요기가 핫스팟이다!

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

섹션 합치기 & 섹션 추가  (2) 2013.10.31
thisislegal.com application 1,2,3  (0) 2013.10.31
B1ind3r Reversing 2, 3  (2) 2013.10.24
canyouhack.it crack 1, 2  (0) 2013.10.23
codeengn : basic 03  (2) 2013.10.21
WINDBG 명령어 정리  (0) 2013.10.15
Posted by ludwings

댓글을 달아 주세요

  1. 2013.10.25 12:14 신고 ludwings  댓글주소  수정/삭제  댓글쓰기

    1. 워크 game.dll
    2. 워게임 - bilnd3r reversing 2, 3 풀기
    3. 프로그래밍?
    4. 해킹?
    5. 리버싱핵심원리

  2. 2013.10.25 12:15 신고 ludwings  댓글주소  수정/삭제  댓글쓰기

    6. 농구
    7 .군대

Crack 1번은 그냥 올리디버거로 열어 back to usermode로 쉽게 풀어낼 수 있었고,

2번 은 처음에 Name하고 serial을 입력해야하는데 Name을 뭘입력해야돼는거야 ㅡㅡ! 하다가 그냥 인증되면 메세지 박스로 키값이 출력되는거여서 어이없었따

2번 힌트는 inter call을 봤을때 GetDlgText등의 입력값을 얻어오는 함수가 없으니까

LoadLibrary와 GetProcAddress를 이용해서 함수주소를 얻어올테니

 

이함수들에 break를 걸고 실행한뒤 인증 부분을 그냥 skip시켜도 답이 간단하게 나온다..

 

 

3번 풀어볼려고하는데 진짜 뭐지이건ㅋㅋㅋㅋㅋㅋ..당황....

머지머지? 집가서해바야징

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

thisislegal.com application 1,2,3  (0) 2013.10.31
B1ind3r Reversing 2, 3  (2) 2013.10.24
canyouhack.it crack 1, 2  (0) 2013.10.23
codeengn : basic 03  (2) 2013.10.21
WINDBG 명령어 정리  (0) 2013.10.15
CodeInjection  (0) 2013.10.15
Posted by ludwings

댓글을 달아 주세요

그냥 peid 도 안대고 문자열도 안뽑히고 pe view도 안돼서 그냥 노트패트에 넣어봤더니.. 그냥 막 문자열들 있고 의심가는 애 있어서 그냥 정답에 넣어 보니까 정답..

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

B1ind3r Reversing 2, 3  (2) 2013.10.24
canyouhack.it crack 1, 2  (0) 2013.10.23
codeengn : basic 03  (2) 2013.10.21
WINDBG 명령어 정리  (0) 2013.10.15
CodeInjection  (0) 2013.10.15
IAT 후킹..계산기  (0) 2013.10.14
Posted by ludwings
TAG 3, Codeengn, 풀이

댓글을 달아 주세요

  1. 2013.10.22 21:32  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

출처

http://tiktoor.tistory.com/25


1. 일반 명령

r        - 레지스터 상태보기

d        - 메모리 보기

e        - 메모리 내용 변경 

bp       - 브레이크 포인트 걸기

p, t     - 브레이크 포인트가 걸린 다음 명령들을 한줄씩 수행

2. 메타 명령 (대부분 디버거를 제어) (.으로 시작 ex) .sympath)

3. 확장 명령 온갖 종류의 명령을 포함하고 있지만 윈도우 운영체제에 종속적인 정보를 다루는 명령들이 많다. 특정 정보를 자세히 보여주거나 해석해서 보여줘ㅜ디버깅을 편리하게 도와주는 기능을 가지는 것들도 있다.


확장 명령은 !로 시작하는 이름 형식을 가지고 있고 사용자가 직접 만들 수 있다.


!process 0 0 : 윈도우 운영체제에서 실행중인 모든 프로세스 리스트들을 본다.

!gld             : getlasterror

!error           : 에러 코드를 문자열로 해석해 보여준다

!analyze       : 점프 파일을 열었을 때 자동으로 분석을 하는데 사용하는 명령


출처

http://tiktoor.tistory.com/25

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

canyouhack.it crack 1, 2  (0) 2013.10.23
codeengn : basic 03  (2) 2013.10.21
WINDBG 명령어 정리  (0) 2013.10.15
CodeInjection  (0) 2013.10.15
IAT 후킹..계산기  (0) 2013.10.14
xcz.kr prob 9 , prob 19 ,prob 30  (3) 2013.10.08
Posted by ludwings

댓글을 달아 주세요

저번에 dll injection과는 조금다른건데

dll은 인젝터하고 dll 2개를 준비해서 넣으면 돼는데

 

이건 코드만 넣으면돼서 짱쉬움

 

dll 필요없음 ㅋㅋㅋ 올ㅋ

 

얘도 책보고따라해봄

 

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

codeengn : basic 03  (2) 2013.10.21
WINDBG 명령어 정리  (0) 2013.10.15
CodeInjection  (0) 2013.10.15
IAT 후킹..계산기  (0) 2013.10.14
xcz.kr prob 9 , prob 19 ,prob 30  (3) 2013.10.08
reversing.kr crc1  (1) 2013.09.30
Posted by ludwings

댓글을 달아 주세요

IAT 후킹한번 책보고따라해봤다 ㅋㅋㅋ 재밌네

GetModuleHandle로 메모리로가서

IMAGE_IMPORT_DESCRIPTOR Table 읽은ㄷㅁ에 여기서

dll 찾고~! 그다음에 함수로 검색해서 ㅁ찾고!!

메모리 속성바꾼담에!! 내가 만들어둔걸로 바꾸고!!

 

재밌넹

 

 

 

//소스

 

'워게임 > 리버스엔지니어링' 카테고리의 다른 글

WINDBG 명령어 정리  (0) 2013.10.15
CodeInjection  (0) 2013.10.15
IAT 후킹..계산기  (0) 2013.10.14
xcz.kr prob 9 , prob 19 ,prob 30  (3) 2013.10.08
reversing.kr crc1  (1) 2013.09.30
reversing.kr flashencrpyt  (3) 2013.09.29
Posted by ludwings

댓글을 달아 주세요

xcz.kr 의 리버싱 문제만 해결했다

9번 문제는 너무 쉬워서 딱히 적을게 없고

30번 문제도 마찬가지로 IDA로 열어서 key를 출력하는 부분에서 문자열을 만드는데 이부분만 실수하지 않고 잘따라가다 보면 된다.


19번은 log 파일에서 값을 읽어서 키를 만드는데.. strcmp로 이름을 비교하고 이름이 일치하면

sex 와 type으로 값을 만든다 



'워게임 > 리버스엔지니어링' 카테고리의 다른 글

CodeInjection  (0) 2013.10.15
IAT 후킹..계산기  (0) 2013.10.14
xcz.kr prob 9 , prob 19 ,prob 30  (3) 2013.10.08
reversing.kr crc1  (1) 2013.09.30
reversing.kr flashencrpyt  (3) 2013.09.29
reversing.kr windows kernel  (3) 2013.09.20
Posted by ludwings

댓글을 달아 주세요

  1. 2014.05.23 22:36  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. 2014.06.21 13:31  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

최근에 달린 댓글

최근에 받은 트랙백

글 보관함