악성코드를 분석할 때, 소스코드를 모르는 상태에서 분석해야하는 것이 대부분입니다.
리버싱 또한, 소스와 결과물 없이 분석을 해야합니다.
앞으로 우리는 디셈블 코드를 주로 보게 될겁니다.
그런데 이 디셈블 코드도 없이!
오직 헥사코드로만 분석을 해야하는 경우가 있습니다.
바이트 오더링: 컴퓨터에서 메모리에 데이터를 저장하는 방식입니다.
두가지의 방법이 있는데, Big Endian과 Little Endian이 있습니다.
Big Endian- 순서대로 표기
Little Endian- 역순으로 표기
여기서 우리가 주목해야할 방법은 Little Endian 이 되겠습니다.
리틀에디언 방식은 윈도우계열에서 사용이 되기때문에 알아두어야겠죠?
우선 예제 코드를 보겠습니다.
#include "windows.h"
BYTE b = 0x12;
WORD w = 0x1234;
DWORD dw = 0x12345678;
char str[] = "hxxyxxn";
int main(int argc, char *argv[])
{
BYTE lb = b;
WORD lw = w;
DWORD ldw = dw;
char* lstr = str;
return 0;
}
해당 코드를 입력하고 exe파일을 올리디버거로 엽니다.
PEviewer로 확인한 결과,
시작 주소는 00400000+ 00001287이 나와야합니다.
시작주소가 맞게 나왔으니, 이제 메인을 찾아가겠습니다.
F7, F8키로 메인을 찾아갈 수도 있지만
중요한 코드들은 대부분 첫 시작에서 스크롤을 올려서 보이는 부분에 나온다고 합니다.
코드를 따라가다보면 우리가 메인에 넣은 BYTE, WORD, DWORD가 보이고,
문자열을 넣은 것도 comment창에 보이는 것으로 확인 가능합니다.
아래 덤프윈도우 부분에서 해당 주소로 이동해보겠습니다.
ctrl+G 로 바이트가 들어간 403018 주소로 검색해서 보면,
코드에서 넣은 BYTE b = 0x12; 에 해당하는 12가 들어가 있습니다.
WORD w = 0x1234; 에 해당하는 코드가 들어가 있는데,
리틀엔디안은 역순으로 입력이 되기 때문에 34 12로 들어가 있음을 확인 가능합니다.
DWORD dw = 0x12345678; 에 해당하는 부분.
역시나 리틀 엔디안표기법으로 인해 역순으로 들어가 있습니다.
그리고 문자열을 넣은 부분, 이 부분은 헥사코드로 변경하였을 때의 숫자들이 들어가 있습니다.
마지막에 널문자 까지 포함!
* 문자열은 리틀엔디안, 빅 엔디안 모두 방향이 같습니다.
이렇게 리틀엔디안 예제를 마치겠습니다.
'study > 악성코드분석&리버싱' 카테고리의 다른 글
악성코드 분석- 기초 정적 분석, PE 파일 (0) | 2020.04.09 |
---|---|
Reversing Theory- abex' crackme #1 (2) | 2020.04.02 |
Reversing Basic- helloworld.exe (2) | 2020.03.27 |
Reversing Basic- ollydbg 기본 명령어 (2) | 2020.03.26 |
Reversing Basic- ollydbg install+ setting (1) | 2020.03.26 |