본문 바로가기
리버싱

리버싱 6

by 윤라경 2024. 8. 16.

[2024.08.16]

 

[C Code]

 

 

 

[Assem Compile 32Bit]

 

# nasm -f elf32 hello.asm -o hello.o

# gcc -m32 -o hello hello.o

 

#apt-get -y install gcc-multilib
#apt-get -y install nasm

 

 

 

dev c++ 프로그램에서 Hello World를 출력하는 소스 코드를 생성한다

 

 

ollydbg에서도 파일을 열어 Hello World가 나오는 것을 확인하고 Kali Linux로 넘어간다

 

 

hello.c라는 파일을 생성하고

 

 

화면과 같이 입력해 주고 저장한다

 

 

파일명을 hello.asm으로 변경시켜 주고

 

 

필요한 개발 도구를 설치시킨다

 

 

어셈블리어로 작성된 hello.asm 파일을 32비트

ELF(Executable and Linkable Format) 오브젝트 파일로 컴파일하는 명령어다

해당 명령어를 실행시켜 준 다음

 

 

hello.o 오브젝트 파일을 32비트 실행 파일로

링크하여 hello라는 이름의 실행 파일을 생성하는 명령어로

해당 명령어도 실행시켜 준다

 

 

그런 다음 ./hello를 하게 되면 Hello World가 정상적으로 출력되는 것을 볼 수 있다 

 

 

다시 dev c++로 넘어와서 이번에는 if문을 생성한다

값이 30이 나오도록 코드를 생성하고 저장

 

 

ollydbg로 파일 확인 시 401500 라인에서 시작되는 것을 확인할 수 있다

 

 

마찬가지로 실행시키게 되면 30이라는 값이 출력된다

 

 

여기에서 값을 10으로 출력되게끔 만들려면 해당 코드를 조작하여 변경시킬 수 있다

현재 401516 라인에서 0A라고 되어 있는 곳을 1E로 변경시키고 저장한다

 

*현재 체크되어 있는 것을 다 해제시켜야 저장된다  

 

 

그런 다음 나머지도 실행시키면 10이라는 값이 저장되었기 때문에 10이 출력된다

 

 

이번에는 결과값이 10으로 나오도록 if문을 수정시키고 저장 후 확인한다

 

 

ollydbg로 확인하고, 항상 같은 라인에서 시작되는 걸 확인할 수 있다 

 

 

정상적으로 한 번 실행하게 되면 10이라는 결과값을 제대로 나타낸다

 

 

이번에도 코드를 조작하여 30이라는 값으로 변경시킬 수 있는데,

현재 40151B라인에서 JE로 시작하는 점프 구간을 JNE로 변경시키면서 값이 30으로 변경된다

NOT이 들어갔기 때문에 결과값이 10이 될 수는 없다

 

 

변경시킨 후 실행하면 30이라는 결과값을 받을 수 있다

 

 

이번에는 다른 방법으로도 조작이 가능한데

현재 라인에 와서 레지스터의 Zero Flag 값이 0으로 설정되어 있다

 

 

그런 Zero Flag는 CPU의 상태 레지스터(또는 플래그 레지스터)의 일부이며,

CPU가 명령어를 실행한 후 결과가 0인지 아닌지를 나타내는 플래그이다

두 번 클릭하면 1로 설정이 되는데, 그 값을 수동으로 변경함으로

프로그램의 실행 흐름을 조작할 수 있다

 

ex) 예를 들어, 조건문에서 특정 조건이 충족되지 않아도 강제로 그 조건이 충족된 것처럼 만들 수 있다

 

 

그렇게 Zero Flag를 변경하고 실행하면 30이라는 변경된 결과값을 얻을 수 있다

 

 

 

강의 소감

Windows 10에서 dev c++, ollydbg 프로그램만 사용하다가

오랜만에 Kali Linux를 통해 소스 코드의 값을 출력하는 실습을 진행했다

또한, if문을 통해 결과값을 출력하고 그 if문의 코드에서

조작 후 결과값을 변경시키는 것도 연습했다

아직 printf의 경우 헷갈리는 부분이 많지만 계속 실습을 통해 보완해 나가야 될 점이다

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

리버싱 8  (0) 2024.08.20
리버싱 7(수정 예정)  (0) 2024.08.19
리버싱 5  (0) 2024.08.14
리버싱 4  (0) 2024.08.14
리버싱 3  (0) 2024.08.13