'리버싱'에 해당되는 글 3건

  1. 2020.02.27 abex' crackme #2 암호해독
  2. 2020.02.25 abex' crackme #1 크랙
  3. 2020.02.25 레지스터와 스택
반응형

나는 처음부터 일정한 숫자나 알파벡의 배열으르넣어서 규칙에 쉽게 접근이 가능했다.

abcdef  = C5C6C7C8

abcd     = C5C6C7C8

 

4바이트만 잘라내는 구간을 찾앗었는데 BP르 걸지않음.... 결과 어디있지...

어쨋든 암호화 하는 구간을 찾았지만 시저암호와 동일하여 그냥 키테이블을 한번 제작해봄

 

 

여기 까지는 가능

대충 생각해보면 패턴이 이렇다

대충...  0을 기준으로 보면 94 가 16진법이니까 HEX 코드에 94 만큼 더하믄 된다.

 

조금 쉬었다가 키젠을 만들고 책을 보면서 풀이를 하겠다.

반응형

'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글

함수 호출 규약(Calling convention)  (0) 2020.02.28
abex' crackme #2 책 풀이  (0) 2020.02.27
abex' crackme #2  (0) 2020.02.27
스택 프레임  (0) 2020.02.26
abex' crackme #1 크랙  (0) 2020.02.25
Posted by 53C
,
반응형

위 파일은 소스폴더에 존재하지 않아서 비슷한 예제를 가져왔다.

 

 

 

 

abex' crackme #1.exe
0.01MB

내 백신 프로그램은 예제 파일 안에 계속 트로이 목마(바이러스)가 있다고 다운이 안되서 백신을 끄고 실습을 진행했다.

실행화면이다. 시작하기전 악성코드로 인식이 되어 가상환경에서 실습을 하려 했으나 가상환경이 느려서 그냥 진행

 

확인을 누르면 이런 문구가 뜬다.

이문제는 많이 풀어봤다... 하도 리버싱을 입문하다 실폐를 해서...

첫번째 메세지가 드는 부분에 BP를 걸어두었다.

첫번째 메세지가 떳다. 즉 main 함수 내부로 들어왔다고 나는 해석이 된다.

두 메모리 EDI와 ESI에 매모리 값을 저장

TEST 연산을 한다.

TEST연산은 첫번쨰 오퍼랜트와 두번째 오퍼랜트를 AND 연산을 하여 플래그세트를 반환한다.

다르기 때문에 0을 반환하는데  AF가 변화했다.

JNE는 거짓일경우 점프한다는 문장이다.

 

모르겠다.

ida por 소환

 

 

여기서 분기가 시작된다.

CMP 는 EAX AND ESI

 

일단 함수 안까지 실행

찾았다 개색기야

이렇게 가도록 만들면 됨

 

JE 분기가 참이 되어야하는데

참이되게 하기는 힘들것 같음

거짓일때 점프하도록 패치

 

응 풀렸어 ㅋㅋ

도구의 단축키나 실행시킬때 끝까지 실행시키는 법을 몰라서 F9를 연타한다. 도구 사용법좀 배우고 싶은데... 마땅한 정보가 없다...

일단 내방식으로 크랙

이번엔 책의 내용을 살펴보겠다.

===================================================

 

나 같은 경우 EP 코드가 꽤 길다... 내컴퓨터가 이상한것 같다. main에 도착하면 코드가 매우 간결해진다.. 이유는 어셈블리언어로 제작해서 그렇다고 한다.

분기시 EAX와 ESI를 분기하는데 아무리 봐도 너무 차이가 난다.... 

이부분은 나중에 알게되면 포스팅을 하고 책에서는 더 자세히 들어간다.

 

 

함수를 넘기는 파라미터가 역순으로 넘어간다. 그택의 구조가 FILO 를 취하고 있기 때문이다.

 

마지막으로 덤프창에 메세지가 깨져서 나온다. 올리디버거와 같은 문제점인데 이부분은 이해하기 어려웠다.

반응형

'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글

abex' crackme #2  (0) 2020.02.27
스택 프레임  (0) 2020.02.26
레지스터와 스택  (0) 2020.02.25
빅 엔디언/ 리틀 엔디언  (0) 2020.02.24
2. 메인함수를 빨리 찾는 4가지 방법과 나의 접근방법  (0) 2020.02.21
Posted by 53C
,
반응형

나도 처음 리버싱을 접할때 어셈블리어에 대해서 조금 학습을 하고 공부를 시작했는데 이해하기 힘들엇던 부분이 아마 레지스터와 관련된 부분이라고 생각을 한다.

레지스터는 CPU 안에 다목적 저장공간을 뜻한다.

처음에는 EAX 등등 그냥 변수를 저장하는 공간이라고 생각했지만 공부를 해보니 정말 많은 정보들을 내포하고 있었다.

 

초급 리버싱에서는 Basic program execution register 에 대해서 알아야 한다.

하위그룸에서 4가지로 분류가 가능하다.

General Purpost registere(32bit - 8)

Segment Register(16bit - 6)

Program Status and Control Register(32bit - 1)

Instruction Pointer(32 bit - 1) 

 

범용 레지스터는 다양하게 사용이된다.

EAX

EBX

ECX

EDX

가 있는데 

EBX,EDX 는 주로 산술연산과 변수 저장등의 일을 한다.

ECX는 반복문(loop)에서 카운트 하는 역활을 담당하고

EAX는 함수의 리턴값을 저장한후 리턴하는 역활을 한다.

 

EBP:스택 프레임

ESI :메모리 복사

EDI :메모리 복사

ESP : 스택 메모리주소 = 스택 포인터 

 

스택프레임이란 함수가 호출되었을떄 ESP에 주소를 저장하고 함수를 리턴할때 주소로 돌려주어 스택이 깨지지 않게 해주는 역활을 담당한다. 이 글을 읽으면 이해가 매우 쉽다. 특히 ESP 같은 경우 매우 자주 나와서 알아두면 디버깅시에 매우 편하다.(http://blog.naver.com/PostView.nhn?blogId=hermet&logNo=56227646)

 

세그먼트 레지스터는 메모리 관리 모델에서 나온 말이라고 한다.

이부분은 설명이 짧게 되어있고 고급 리버싱에서 자세히 다룬다고 한다. 한번 구글링을 해봤는데 아직 접근할 영역은 아닌듯하다...

 

EFLAGS

플래그 레지스터는 각 비트마다 1은 on/True 0은 off/False 를 나타낸다. 오버플로등 다양하게 사용은 되는데... 사실 아직 감이 잡히는 부분은 아니다.

 

EIP

cpu가 처리할 명령어의 주소를 가르킨다.

값을 직접 변경할수 없다.

이 2가지 특징을 가진다.

 

스택은 메모리를 저장하는 방법중 하나이며 프로세스에서 스택 메모리의 역활은

1. 함수 내의 로컬변수 임시 저장

2. 함수 호출 시 파라미터 전달

3. 복귀 주소(return address)저장

 

 

스택은 크게 두가지 특징을 가진다.

스택에 값을 입력하면 스택포인터는 감소하고 반대로 스택에 값을 꺼내면 스택 포인터는 증가하낟.

스택포이터의 초기 값은 스택 메모리 아래쪽에 있다.

 

 

반응형
Posted by 53C
,