실행파일을 실행하면 이렇게 됩니다. Ollydbg로 디버깅 해보겠습니다. 이 부분은 문자열을 MessageBOX() 에 넘겨주는 부분입니다.저기 MB_OK는 MessageBOX() 창에서 OK 버튼 하나만 출력해 주는 거라고 합니다 잘못 캡처했는데 여기가 MessageBoxA를 호출하고, GetDriveTypeA 도 호출하는 부분입니다.여기서 리턴값(EAX)는 3(DRIVE_FIXED) 입니다 즉 EAX = 3 이거죠그리고 ESI를 MessageBoxA()에서 FFFFFF. 즉, -1로 세팅합니다 INC 는 1 증가, DEC는 1 감소 입니다.ESI와 EAX를 INC, DEC 하면서 마지막에 EAX,ESI를 비교하는데 이 두 값이 같으면 0040103D로 분기하고, 아니면 밑의 문장을 실행 합니다. 바로..
Cpu 레지스터란? 레지스터(Register)란 Cpu 내부에 존재하는 다목적 저장공간이다. 다른 저장공간(SSD,RAM,HDD) 등과는 다르게 레지스터는 Cpu 내부에 위치해있어 연산속도가 빠르다. 리버싱을 하는데 레지스터를 알아야 하는 이유? 디버깅을 하려면 디버거가 어셈블리어로 해석을 해주기 때문에 어셈블리어를 잘 알아야 한다. 그런데 이 어셈블리어 명령어의 대부분은 레지스터를 조작하고 내용을 검사하는 것이기 때문에 레지스터를 잘 알아야 한다. IA32(Intel Architecture 32bit)란 인텔의 32비트 Cpu에서 사용하는 명령 아키텍쳐이다. IA32의 구조 ALU : 전기적인 신호를 흘려보내서 연산을 하는 회로I/O Unit : 입/출력을 할 때 데이터의 통로(키보드나 마이크등) 입/..
리버싱 이란 무엇일까?흔히 역공학, 프로그램 분석을 역으로 분석하는 과정이라고 불린다. 프로그램이 제작되는 과정.c -> [complie] -> .obj -> [link](linking) -> .exe 프로그램은 위와같은 과정을 통해 만들어진다. 위와같은 과정을 통해 생성된 .exe(실행파일)을 .c파일로 복구해 내는 과정을디컴파일이라 한다. 디스어셈블을 할 수 있는 도구를 우리는 디버거 라고 한다. 디버거에는 ollydbg, IDA 등이 있다. 나는 ollydbg를 사용한다. 무료이기 때문이다.