리버스 엔지니어링이란 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하여

원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 작업.

   

리버싱 방법

   

1.정적 분석

파일의 겉모습을 관찰하여 분석하는 방법. 정적 분석의 단계에서는 파일을 실행하지 않고 종류, 크기, 헤더정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등의 다양한 내용을 확인하는 것. 그리고 디스어셈블러를 이용하여 내부 코드와 그 구조를 확인하는 것.

2.동적 분석

파일을 직접 실행시켜 행위를 분석하고, 디버깅을 통하여 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법. 파일, 레지스트리, 네트워크 등을 관찰하면서 프로그램의 행위를 분석. 또한 디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석.

   

가지 방법을 활용하면 프로그램을 리버싱할 시간을 많이 단축시킬 있고, 효과적인 분석이 가능.

   

 

함수 호출 규약

   

caller - 함수를 호출하는

callee - 호출 받는쪽

   

1.cdecl

함수를 호출한 쪽이 stack 정리

2.stdcall

호출을 당한 쪽이 stack 정리

3.fastcall

   

 

   

참고 - http://www.slideshare.net/H4C/ss-59722847

   

 

   

 

   

   

'리버싱' 카테고리의 다른 글

패킹  (0) 2016.09.23
어셈블리 정리  (1) 2016.09.20

CMP TEST 다른

   

CMP 첫번째 operand에서 번째 Operand 뺀다. 연산의 결과는 operand 값이 변경되지 않고 EFLAGS 레지스터만 변경된다. ( operand 값이 동일하다면 SUB 결과는 0이고 ZF=1. SUB 명령과 동일하나 SUB operand 값이 변경됨.)

   

TEST 번째 operand 번째 operand AND연산 시킨다. 연산의 결과는 ZF에만 영향을 미치고 operand에는 영향을 미치지 않는다.

   

개의 다른 점은 operand 비교하는 방식이다. CMP 숫자를 빼서 비교하고, TEST AND연산을 시켜서 비교한다. 이로 인해 CMP operand 완전히 같은지 비교할 있고 TEST operand 모두 0인지 아닌지 판단할 있다. TEST 경우 operand 0 아닌 경우를 제외하고 서로 다른 값일지라도 연산 결과가 0 나올 있으므로 TEST eax,eax 같이 대상의 값이 0 아닌지 확인하는 용도로 사용된다.

   

   

mov lea 다른

   

mov 좌변에 우변의 값을 대입한다.

   

lea 좌변(레지스터만 가능) 우변의 주소값을 대입한다.

   

   

조건 점프문

   

   

   

PUSHAD - 8개의 범용 레지스터의 값을 스택에 저장하는 명령

   

POPAD - PUSHAD 명령에 의해서 스택에 저장된 값을 다시 레지스터들에게 입력하는 명령

'리버싱' 카테고리의 다른 글

패킹  (0) 2016.09.23
개요  (0) 2016.09.20

다음과 같이 나와서 페이지 소스를 먼저 보았다.

   

   

unlock 계산한 10 나눈 것이 정답이다.

   

콘솔을 통해 계산해 주자.

   

   

이것을 10으로 나눈 999780930.7 답이다.

   

다음과 같이 문제가 풀렸다.

   

'워게임 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 26번  (0) 2016.09.01
webhacking.kr 6번  (0) 2016.09.01
webhacking.kr 14번  (0) 2016.09.01
webhacking.kr 18번  (1) 2016.09.01
webhacking.kr 16번  (0) 2016.09.01

+ Recent posts