리버싱 기초

악성코드 및 포렌식|2021. 3. 4. 23:50

1. sysinternals suite 다운

2. 7z 다운

3.practical malware 샘플 다운로드

4.pestudio 다운

5. hxd 다운

 

 

올리디버거 관리자권한 실행

1. option ->add to explorer -> add -> done

2.option -> appearance

 

 

리버싱은

리버싱엔지니어링

역공학 이라고도 한다

 

 

어떤 프로그램의 소스코드로 돌려서 분석하는방법

 

 

c -> 10110 (M.C 머신코드 컴퓨터언어 ) -> 어셈블리

이렇게바꾸는건 컴파일과정 이렇게바꾸는건 디스어셈블

 

 

 

CPU 는 복잡하게 이런식으로돌린다. (어셈블리)

 

c언어에서는 그냥 냉장고를 연다 열었으면 냉장고에 물을 꺼내먹는다

이런느낌이기 때문에 복잡하게돌린다는 것

 

 

 

 

 

 

 

 

 

 

 

02 어셈블리의 명령 포멧

 

IA-32 intel 32bit 를 주로 사용

 

 

기본형태는 명령어(옵코드, opcode) + 인자(오퍼랜드, operand 1~2)

 

 

 

 

쉽게생각해서

 

 

 

 

push 337 337을 넣다는뜻

 

mov 옮긴다. 1eax 에 전달하는데 eaxcpu변수입니다.

 

그래서 operand 2에서 operand 1으로 데이터를 보내는데

 

1-> eax 의 형태로 전달을 한다생각하면된다.

 

 

 

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

 

 

CPU가 연산할때는 레지스터에 넣어놓고 연산을 하게된다.

값을 리턴하는 개념이없기떄문이다.

 

 

 

 

EAX

 

 

mov eax, 3

retn

을 하게되면

 

return 3; 이런식으로 된다고생각하면된다.

리턴값을 저장하기 때문에

 

CPU가 연산할때는 레지스터에 넣어놓고 연산을 하게된다.

 

값을 리턴하는 개념이없고

 

 

 

 

 

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

 

 

edx,ecx,ebx

 

int temp

temp에 아무거나 저장하는것처럼

거기에 넣는다고생각하면된다.

 

 

 

 

 

 

 

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

 

 

 

esi 와 edi는 

 

esiedi

어떤 데이터가 esi가 들어가있으면 +1씩 되면서

데이터를 d -> a -> t->a 로 순차적으로 edi로 옮긴다.

 

그리고 마지막은 null값이 나오고 데이터 복사를 끝냅니다.

 

 

esi edi가 같이나온다면

데이터를 복사하거나 반복데이터를 처리하고나 메모리를 옮기는 여러작업이라고 생각하면됩니다.

 

 

 

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

 

 

 

 

 

 

 

ESP EBP는

 

1->2->3을 아무리 넣어도

소비자가 먹을떄는 마지막에 들어온 3번 부터 꺼낼수 밖에없다고 하면 이해가쉽다

 

 

stack 쌓다

push pop

값을 넣을때는 push 를 사용하고 데이터를 거꾸로 넣게되는데

 

소비자는 거꾸로 꺼내게된다

 

그것을 pop이라 하고

 

 

first in 처음들어간게

last out 마지막에 나온다

 

 

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

 

 

 

 

EBP 는 스팩에 가장 아랫단 1번이라고 생각하면됩니다 케이스의 시작부분

 

ESP 데이터가 차있는 가장윗부분 만약 데이터가 하나더들어오면 다음껄로 올라가서 가르킴

그이유가 가장윗 부분을 가르키니까 들어오면 가장윗부분은 들어온것이기떄문

 

 

ESP EBP 가 나오면 스택을 가르키는부분이구나 라고하면됩니다.

 

 

 

 

 

 

 

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

 

 

 

 

 

EIP는 지시를 내리는 포인터

 

이러한 코드가 있을떄 가장첫번쨰 코드부터 실행이될것입니다

그럼 EIP는 첫번째를 가르키고있게되고

 

CPU 가 다음에 실행시킬(가장먼저 실행시킬) 명령어를 가르킨다

1번을 실행하면 2번을 가르키고

2번실행하면 3번가르키고 그런것

 

 

 

 

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

 

 

 

 

 

32 bit를 먼저배우고  가능하면 많이바뀌지는 않습니다

 

 

EAX 0~31부터여서 32비트

 

64비트에서는 EAX가아니라 VAX 입니다.

 

 

 

댓글()