본문 바로가기
리버싱

리버싱 10

by 윤라경 2024. 8. 23.

[2024.08.22]

 

 

Windows에서는 기본적으로 강한 악성코드의 경우 계속 삭제되는 경우가 있어

레지스트리 편집기에서 설정을 진행해야 된다

HKEY_LOCAL_MACHINE > SOFTWARE > Policies > Microsoft > Windows Defender로 접속한다

 

 

다음으로는 빈 화면에서 새로 만들기 > DWORD(32비트) 값(D)를 선택한다

 

 

이름을 DisableAntiSpyware로 설정하고, 값 데이터를 1로 지정한다

 

 

그렇게 되면 악성코드를 다운로드받을 때도 그대로 계속을 눌러 다운로드를 진행할 수 있게 된다

 

 

레지스트리 편집기로도 설정 시에도 윈도우에 의해 파일이 계속 사라지는 경우가 있다

그럴 때는 추가 설정을 할 수 있는데 이번에는 로컬 그룹 정책 편집기에 들어가서

관리 템플릿 > Windows 구성 요소 > 바이러스 백신으로 들어간 다음 바이러스 백신 사용 안 함을 선택한다

 

 

처음 선택하게 되면 구성되지 않음으로 설정되어 있어

'사용'으로 변경시켜 적용시킨다

 

 

다음으로 실시간 보호에서도 설정할 게 남아 있다 

 

 

실시간 보호 끄기에서도 구성되지 않음을 사용으로 변경시켜 적용한다

 

 

그렇게 되면 파일들이 삭제되지 않고 그대로 유지된다

 

 

실습 진행을 위해 crackme1 파일을 ollydbg로 실행시켰다

실행시킨 후 F9을 눌러 실행시키면 제일 처음 나오는 화면이 해당 화면이다

경고창 같은 화면에 나오며 Make me think your HD is a CD-Rom이라는 문구가 나타난다 

 

 

위에서 천천히 내려오다 다시 해당 화면이 나타나는 구간이 나온다

 

 

현재 401013에서 "c:\"가 나오고, 아래의 401018에는 GetDrive 명령어가 나왔기 때문에

현재 getdrive는 하드 디스크를 찾고 있다는 뜻으로 받아들여야 된다

 

 

FIXED는 하드 디스크나 플래시 디스크를 뜻하고,

현재 우리가 찾아야 될 것은 CDROM의 5라고 보면 된다

 

 

현재의 확인에서 확인을 눌러 줘야만 다음 실행 코드로 넘어가게 된다

 

 

그런 다음 현재 EAX 값을 401005로 5를 넣어서 수정시킨다

 

 

그럼 현재 값이 40103D와 같아졌기 때문에 원래라면

아래로 코드를 실행했을 명령어가 이제 점프를 하게 된다

 

 

명령어 실행 코드를 거치지 않고 바로 점프를 하여 40103D로 넘어간 화면이다

 

 

그렇게 성공 메시지를 레지스터 값을 변경하여 출력시켰다

 

 

그 외에도 다양한 방법이 존재하게 되는데,

이번에는 ESI의 값을 변경시켜 본다

 

 

0이던 ESI 값을 1로 변경시키게 되어도 점프하여 40103D로 바로 가게 된다

 

 

같은 값을 만들었기 때문에 점프 후 성공했다는 메시지 창이 나타나게 된다

 

 

또 다른 방법으로는 현재 Zero Flag가 0으로 되어 있는데

이 부분을 1로 변경시키면 값이 달라지면서 결과값을 다르게 만들 수 있다

 

 

진행을 위해 현재의 Zero Flag를 1로 변경시킨다

 

 

그렇게 되면 이번에도 실행하지 않고 바로 점프하여 해당 지점까지 내려온다

 

 

성공했다는 메시지 창이 뜨고 값이 변경되어 출력되었다

 

 

EAX 값을 401003과 3으로 변경시킨 후 적용시켜도 성공하게 된다

 

 

또 다른 방법으로는 JE로 되어 있는 명령문을 JNE, JLE로 변경시켜도 성공하게 된다

그 외에 JMP도 가능한 것을 확인할 수 있었다

 

 

코드에서 오른쪽 마우스를 클릭하여 Search for을 누르고

 

 

그 다음 확인할 수 있는 것들을 누르게 되면 해당 화면으로 볼 수 있다

현재 Strings을 확인하기 위해 선택한 화면이다

 

 

마찬가지로 자세한 함수를 확인할 때 간단하게 함수만 표기되기 때문에 편리하다

이 부분에서는 스트링과 함수를 제일 많이 보게 된다

 

 

예시로 ExitProcess 함수의 경우 정확히 알지 못할 때 검색하여 확인해 볼 수 있으며,

함수를 볼 때 그 함수의 뜻 정도는 알면 좋다

현재 exitprocess의 경우 호출 프로세스 및 모든 스레드를 종료시키는 역할을 하고 있다

 

 

두 번째로 crackme2 파일을 열어 실습을 진행한다

파일을 열고 실행하게 되면 이번에는 네임과 시리얼을 입력하는 창이 나타난다

이 화면에서 네임을 test로, 시리얼을 1234로 지정하여 체크를 누르게 되면

 

 

현재의 시리얼이 아니라는 화면이 나타나게 된다

 

 

이럴 때 코드의 스트링 및 함수를 확인하여 힌트를 얻을 수 있는데,

현재 파일에서 확인 시에는 시리얼이 네 글자인 것을 확인했다

 

 

그렇기 때문에 다시 실행하여 화면에서 시리얼을 세 글자로 넣게 되면

이렇게 경고창이 뜨면서 4개를 입력하라고 표시한다 

 

 

아까의 스트링 화면에서 축하한다는 성공 메시지가 두 개가 존재했는데

하나는 필요하지 않는 코드들로 가득하고

 

 

하나는 본격적으로 명령어를 이용하여 축하한다는 메시지와

성공했다는 메시지를 띄우는 코드창이 나타난다

이렇듯 코드의 흐름을 볼 줄 알아야 된다

 

 

현재의 부분에서 블랙 포인트를 설정하고 진행한다

 

 

우측 하단의 스택을 EBP로 설정하고 확인하게 되면 1234에 대한

시리얼 넘버가 부여되어 있는 것을 확인할 수 있다

 

 

해당 시리얼 넘버로 적게 되면

 

 

성공했다는 Congratulations! 라는 문구와 창이 나타난다

 

 

이 경우 단순한 시리얼 값만 비교하는 게 아니라 네임과 시리얼을 종합하여 비교하고 있다

랜덤값이 아닌 규칙성을 가지고 있다고 보면 된다

 

 

crackme1에서 Error를 Fail로, YEAH!를 Sucessful로 변경시키는 미션을 내 주셨지만

아직 코드와 명령어에 익숙하지 않은 탓에 검색으로 찾아본 결과다

 

 

 

강의 소감

오늘 강의에서는 어떤 식으로 흐르는지 조금은 이해하게 되었다

아직 완벽하다고는 말할 수 없지만 조금씩 점차 이해하려고 노력 중에 있다

물론 ASCII 값을 변경하여 문구를 바꾸는 연습도 부단히

노력해야 될 부분이고 안 되는 부분들은 강의 시간 외에도 꾸준히 연습 중에 있다

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

리버싱 12  (0) 2024.08.26
리버싱 11  (0) 2024.08.26
리버싱 9  (0) 2024.08.21
리버싱 8  (0) 2024.08.20
리버싱 7(수정 예정)  (0) 2024.08.19