Crackme160 - # 1 산 burn.exe

잡담

최근에 시작 학습 창 학교는 동시에 너무 Crackme160 대상 연습으로, 여전히 얕은, 역, 자신을 기쁘게 할 수 학습을 촉구 학습은 끝이 없다, 그들은 초기의 마음을 잊지 수 있기를 바랍니다.

 

본문

예상

이 연습의 목적은 산 burn.exe Crackme의 첫 번째입니다. 먼저, 직접 프로그램을 열고, 현재의 목표가 무엇을 참조하십시오.

우선 몇 가지 환영 정보 및 저자 정보, 프로그램 팝업을 실행주고, 프로그램의 메인 인터페이스는 OK를 클릭하면 나타납니다

각 버튼의 양쪽을 클릭, 프로그램은 두 부분으로 볼 수있다있다 :

직렬의 첫 번째 부분은 / 이름은 아마도 이름 입력에 의해 자체를 직렬 생성 프로그램을 암호화하여, 각각의 이름과 시리얼을 입력 한 다음 우리는 일련 비교 문자열, 여기에 몇 가지 임의의 값을 입력하고 checkit을 클릭하여 첫 번째 시도는 입력 다음과 같은 오류가 발생합니다 :

직렬 제 2 부분 필요 시리얼 입력 또는 앱 추정 시리얼 입력 문자열을 비교하는 문자열을 생성한다. 아직 여기에 값을 입력하려고하면 다음과 같은 오류 메시지가 나타납니다 :

 

 

갈라진 금

예측은 현재 다음과 같은 목적을 얻을 수있다 :

  • 1. 스킵 프로그램 시작시 NEG 팝 (원활하고, 이것이 주된 목적 아님)

  • 2.serial 섹션이 제대로 표시가하라는 메시지 확인 버튼을 클릭합니다.

  • 3.serial /하는 메시지가 클릭이 그것에게 이름의 일부를 확인 올바른 버튼을 표시합니다.

1. 건너 뛰기 팝업 NEG

    (1) 방법 검색 문자열

프로그램이없는 문자열 암호화를 수행하기 때문에, 당신이 바로에 의해 수 - for- 검색> 해당 문자열을 찾을> 모든 참조 문자열 방법

프로그램 시작이 팝업 문자열 검색의 표시는 다음과 같이 볼 수있는 문자열 내용

더블 - 선택하거나 아래와 같이 호출 지점을 입력하는 키 입력 문자열의 메모리 주소는 매개 변수로 전달

호출 후 MessageBoxA이 그림에서 볼 수있는 호출 아래로 끌어 오기에 입력에서 사실이 그것을 위해가는 두 번째 균열 방식이다.

스택 영역은 함수 호출의 반환 값이 호출이 동일한 입력에 도달 할 수 있음을 알 수있다에서 대지 위의, F2 전화, F9에 중단 점에서,이 실행합니다.

당신이 전화에서 팝업을 생략해야하는 경우 직접적으로 우리가 확인을 누릅니다, 1 일 이후 메시지 박스 mov 인 EAX에 대한 호출을 대체 할 수있는, 죽여도 노트 스택 균형과 반환 값은 반환 값이 EAX해야가합니다 나머지 공간은 NOP로 채워질 수있다.

(2) 내부 메소드 호출 검색

통화가 통화 팝업의 지점을 찾기 위해 검색 할 수 있도록 창, 윈도우 API의 메시지 박스 호출을 나타 일반적으로있다.

마우스 오른쪽 버튼으로 선택한 그리기 메시지 박스 옵션, 모든 통화 사이트에서, 즉 브레이크 포인트에서. 다음 F9 및 다음 단계 및 방법 (1) 동일한에서 계속 실행됩니다.

(3) 일시 확인 적층 방법

아래 그림과 같이 어떠한 경우 중단 점에서, 팝업 팝업 후, 직접 올리 디버그 프로그램의 F11 서스펜션을 프로그램을 실행

이 때, 메인 프로그램은 윈도우 루프, 메시지에 대한 루프 대기에서 실행됩니다. 메시지 박스가 프로그램을 차단하고, 함수 호출 스택 저장해야 중단하지 않고 메시지를 입력 할 수 있기 때문에 다음과 같이 메시지 박스 정보를 찾을 수 있습니다 호출 스택을 거절하므로, 스택 영역을 설정해야합니다 :

상기 방법 및 단계 (1)과 같은 일관성 후.

 

2.serial 부분

임의의 문자열 메시지 박스 호출을 Enter 키를 눌러 위치 checkit 버튼의 위치를 ​​위의 방법 중 하나를 사용

이 위치는 성공적이고 신속한 잘못이 동시에 볼 수있는, 켜져 스택 프레임의 시작 위치에 브레이크 포인트를 히트

push    ebp
mov     ebp, esp

F8 단일 단계 동작은 중국어 다음 분석 될 수있다 스택 영역 정보를 보면서하여도 코멘트. 이 분석에서 프로그램 대상 문자열 안녕하세요 야!.

다음과 같이 프로그램 입력 문자열이 제안 올바른을 구하는 방법

3.serial / 이름 부분

같은 방법은 위치 메시지 박스 호출을 찾을 수 있습니다.

다음과 유사하게 최대, 코드 문자열 비교 점프의 위치를 ​​찾아 보았다 :

여기에서 대상 결과가 생성, 따라서 코드 문자열을 생성 찾아 볼 필요가있다 볼 수 있습니다. 관심 진보적 실행 덤프 스택 영역 중국어 애노테이션 콘텐츠 주석 영역, 즉로서 분석 될 수 있으며, 프로그램은 입력 문자열의 첫 번째 문자 다음 중간체 생성한다 (29)는 함수 파라미터로 곱해지고 제 2 입력 승산을 ​​읽어 세그먼트 시리얼, 다음 문자열 싸움을한다. 또한 분석은 중간 직렬를 생성하는 함수를 입력 한 후 해당 이해할 필요가있다.

일련의 중간에 생성 된도 호, 제 입력 값의 문자 0x29 * 2 * 및 "%의 D"를 찾아 다음 레벨 호출 뷰로 전달 파라미터들을 발견 입력의 결합의 printf 형식 다음 추측의 실험 결과가 올바른 추측을 나타내고 있으므로, 여기 진 후 출력 진수 문자열로 만들어진 입력 추측

여기서 찾으려면이 수준의 호출을 계속하는 의도를 모르는 척합니다. (% 프리앰블가 X %에 따른 추천 D 입력 또는 다른 형식으로 분기 처리, 판독 포함) % (D)의 처리 캐릭터의 동작 기간 후, 코어에 연산 코드 세그먼트 :

다음과 같이 C 언어로 작성 세그먼트 :

#include <cstdio>
#include <cstdint>

int main()
{
	const uint8_t kEcx = 0xA;
	char input_char = 0;
	input_char = getchar();

	uint32_t source;
	source = input_char * 0x29 * 2;
	
	uint32_t mod;

	char result[16] = { 0 };
	uint32_t i = sizeof(result) - 2;//留一个\0
	do{
		mod = source % kEcx;
		source /= kEcx;

		mod += '0'; //add dl,30
		if (mod >= ':')  //cmp dl,3A
		{
			mod += 7;
		}
		result[i--] = mod;
		//putchar(mod);
	} while (source);

	i = 0;
	while (result[i] == 0) ++i;
	printf("%s\n", &result[i]);

	return 0;
}

증가 "CW-"에 따라 상술 한 절차에서는 "-CRACKED"프로그램 문자열 연결은, RI는 절차를 완료합니다. 아래와 같이 다음, 임의의 입력은, RI는 결과를 사용하여 수득 :

이 시점에서, 전체 crackme 끝.

최종 단어

전체 느낌 다운 Crackme 여전히 많은 것을 배울 수있는 더 많은 연습, 필요 필요, 희망은 마스터 탄탄한 지식 기반 및 기술을 낳 후 그것으로 스틱, 따라서 초기의 마음을 잊지 않았다, 짧은에, 지식의 다른 측면의 인식을 제고 할 수있다.

게시 19 개 원래 기사 · 원 찬양 7 · 전망 6933

추천

출처blog.csdn.net/G_METHOD/article/details/104136453