본문 바로가기

Computer/0x06 리버스엔지니어링

리버스엔지니어링 1화

리버스엔지니어링 1화 



 



리버스 엔지니어링(reverse engineering)

: 리버스 엔지니어링이란 제품 조립순서의 반대로 제품을 하나하나 분해하여 제품의 제조과정 및 성능을 파악하는

기술을 말합니다. 기술적으로 열위에 있는 기업이 특정상품을 모방, 생산하려는 경우 주로 사용 됩니다.



리버스 엔지니어링은 광범위적인 개념이지만 주로, 소프트웨어에서 많이 사용 됩니다. 

C언어 등으로 사용된 프로그램등을 어셈블리어로 변환해주는 Olldbg 같은 툴을 이용하여

역분석 해서 다시 원래소스를 알아내는 고급기술로 사용되곤 합니다.


악성코드분석가에게는 필수기술 이기도 합니다.

이번 시간에는 리버스엔지니어링에 필요한 기초 어셈블리어 문법을 배워보도록 하겠습니다.





 [ Opcode ]   [ Operand ] 


  PUSH           (    )  : 밀어넣는 역할 


* C언어 : abc ( 0 , 0 , 0 ) 

* 어셈블리어:   push 0 <-- 인자갯수  

                   push 0 

                    push 0 

                    call  0  < --- 함수호출  


* POP 0 <=== stack 

: 스택에 있는 것을 끄집어 와라 . 









* FIFO (First In First Out )

* LIFO ( Last In First Out ) 


* 쓰레드 (thread) : 프로세스 안에서 도는 작은 프로세스 

* 쓰레드 쓰는 3가지 용도: 지역변수를 담는 용도, 함수의 인자 , 복귀주소  



쓰레드(thread): 

컴퓨터 프로그램 수행 시 프로세스 내부에 존재하는 수행경로, 즉 일련의 실행코드. 프로세스는 단순한 

껍데기일뿐, 실제 작업은 쓰레드가 담당 합니다




[ 레지스터(Register) ] 


: 컴퓨터의 중앙처리장치에 들어 있는 소규모 데이터

기억장치 입니다. 




[ CPU 구조 ] 


- 사칙연산 수행 ( +,-,* / )

- 논리연산 수행  ( > , < , = ) 

- 분기 ( EIP : 다음 실행할 명령어 주소 ) 






[ 범용 레지스터 ]  EAX , EBX , ECX , EDX 



[ 인덱스 레지스터 ] : ESI , EDI 



[ 스택 포인터 레지스터 ] :  ESP , EBP: 기준점을 설정 



[ EFLAGS ]  ===> 0 : 깃발 내려감 , 1 : 깃발 올라감




* 메인함수가 '메인쓰레드'가 된다. 

* 함수마다 사용하는 '스택영역' 나누어져 있다. 

                               --------

                    StackFrame

                                           ↓

                                   Frame:  뼈대 / 틀




[ 올리디버거 ]



F7 => 실행(점프,함수 호출시 이동)

F8 => 실행(점프,함수 호출시 다시 돌아와서 다음 줄에 멈춘다.)



MOV  0 , 0 

C언어: a = b; 



RETM: 돌아간다. / 리턴 / 함수의 끝 


SUB :       sub a, b  

(빼기)       A = A - B  ( A 에서 B를 빼라 그래서 A에 넣어라. ) 





[ 클릭시 크게 확인 하실 수 있습니다 ]