'분류 전체보기'에 해당되는 글 128건

  1. 2020.02.27 abex' crackme #2
  2. 2020.02.26 스택 프레임
  3. 2020.02.25 abex' crackme #1 크랙
  4. 2020.02.25 레지스터와 스택
  5. 2020.02.24 카이사르 암호/시저암호
반응형

역시나 그역시나 시작부터 책과는 완전 달랐다.

프로그램이 비주얼 베이직 어디선가 들어본 그언어로 제작이 되었다.

윈도우 상에서 실행이 안되서 힘들었다.

어쨌든

이거는 꼭봐주고 그리고 창 뜨는거 다른 창에 뜨도록 해야겠다. 자꾸 작업창에 뜨다...

 

문자열을 검색할 생각을 하지못했다.

바로 메세지가 드는 분기점을 찾아서 접근을 시도했는데 잘못된 접근이었다.. 이유는

위에 분기가 성공을 했다 생각하면

다시 이런 구간이 나온다 두 구간 모두 분석을 했으나 찾기는 어려웠다.

책의 내용과도 정말 많은 내용이 달랐다.

그래도 책이 도움을 준부분은 문자열을 탐색하는 것이었다.

책에서는 아래의 우리가 본 문장을 찾아 가길 원한다.가 아니다. 내가 책을 잘못봤다.. ㅅㅂ

어쨋든 나는 안된다는걸 집감하고 참문장에서 분기문을 찾았다. (책에서도 이렇게 하라고 하는데 원래 실습한 후에 책을 보는 나쁜 버릇)

분기 2라고 적어놓고 실습을 진행했다.

앞서 말했듯이 나는 시도하고 책을 본다.

지속적으로 저 분기문을 바꿔도 봤지만 시리얼 코드를 얻는것이 우선이라 생각했다. 그래서 책을 봤는데 찾는 과정이 나와는 완전 달랐다. 그래서 계속 어떻하지 고민을 했다.

 

가장 이상한 부분은 스택메모리 부분이 매우 이상하다고 생각을 했다.

나는 스택 메모리에는 패스워드 아이디 순으로 들어가는게 맡다. 그런데 아이디는 들어가지만 패스워드가 암호화 되서 들어갔다... 그리고 패스워드는 한번도 들어오지 않았다...

그런데 이상한 점 2는 패스워드와 암호문이 너무 달랐다. 오히려 암호문이 아이디와 닮았다...

B5A9B6B8

이문장이 주석에 엄청 달렸다,

심지어 스택에도 자주 등장을 했다.

그래서 넣어보니 답이더라

 

그리고 책을 보니 암호였다고 말을 하고 이제부터 암호문을 풀어볼까?(웃음)

그래서 암호문 해독은 매우 중요해서 내일하기로 했다.

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

음.. 책을 먼저 읽고 완벽히 안후에 실습을 하는게 속도는 빠르다...

그런데 나는 책을 안읽고 하는게 더 재미있더라 그리고 성질상 일단 덤비는 스타일

반응형

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

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
레지스터와 스택  (0) 2020.02.25
Posted by 53C
,
반응형

함수가 호출되고 복귀조소로 가는과정을 스택프레임이라는 기법을 이용해서 안정화 시킨것이다.

esp 는 함수가 호출되면 함수의 주소를 저장하는 레지스터다

그리고이 값을 ebp에 저장한하.esp는 지속적으로 변화하기 때문에 저정하는 역활을 한다.

 

문제는...

이 엄청난 함수들은 ep코드다. 내컴퓨터는 시발 ep가 저엉말 너무 많다.

x32dp로 분석은 가능하나 심지어 이 메인 함수도 매우 복잡하게 숨어있다... 객체지향이어서 그런가..

ida로 ep값을 걸러내지 않으면 쉽게 메인 함수에 도달하기 힘들다. ep코드가 너무 많아서 동적 분석을 매우 힘들게 한다.  동적분석을 하는데 아무리 찾아도 메인 근처에는 다가가기 힘들다. ep값을 아무리 건너뛰어도 main이 나올려면 엄청 눌러야 됨다...

 

그리고 책과 내 프로그램과 매우 다르다... 프로그램에 대해서 찾아봐도 제대로 된 내용을 찾기는 어려웠다...

스택이 어떻게 저장이디고 연산되는지는 나도 분석을 해봤다...

오늘 나의 코드로 설명을 진행하고 싶으나... 너무 복잡해서

 

일단

프로그램을 기준으로

더해주는 함수와 변수를 저장하고 함수를 호출하는 구간이 존재한다.

그래서 처음 함수 구간에서 변수의 크기만큼 스택을 확보하여 함수를 제작하고 main 함수에 가게 된다.

main 함수에서는 또다시 스택에 값을 저장하고 더하기 함수를 호출한후 값을 옮기고 더하기 한다.

그리고 그 값을 리턴하고 프로그램을 종료시킨다. 끝

 

 

반응형

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

abex' crackme #2 암호해독  (0) 2020.02.27
abex' crackme #2  (0) 2020.02.27
abex' crackme #1 크랙  (0) 2020.02.25
레지스터와 스택  (0) 2020.02.25
빅 엔디언/ 리틀 엔디언  (0) 2020.02.24
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
,
반응형

카이사르 암호는 로마의 황제 율리우스 카이사르가 만들었다.

우리에게는 치환암호 도는 시저암호라고 많이 알고 있는 암호다.

 

특징은 알파벳의 자리를 일정한 크기만큼 이동시킨것이 특징이다.

 

아마 정보보호 영재원에서 암호학 강의를 들을때 가장 어려웠던 부분은 기호이다.

 

평문 = M,P

암호문 = C

암호알고리즘 = E

복호 알고리즘 = D

키 = k

인데 들어오는 문자열의 갯수를 max로 잡고 연산식을 만들어 보았다.

성공적으로 완성을 했고 카이사 암호의 취약점은 대칭키 암호라는 부분에서 많은 취약점을 가지고 있다.

카이사 암호를 개조하여 보았다.

 

독일의 에니그마에서 아이디어를 받아와서 제작을 했다.

한문자를 암호화 한후에는 k값이 일정하게 변하도록 설정했다. 기존의 시저암호보다 암호문이 더 복잡해진것을 알수 있다.

 

암호학은 지루할때 또는 오늘 뭘할지 모르겠을때 한강씩 해볼 계획이다.

요즘 리눅스 서버대문에 골치가 아프다...

반응형
Posted by 53C
,