CS 리버싱을 이용한 모의해킹 : 킹초보편

기초1 – 발담그기 (Non개발자 가능)
Aug 28, 2024
CS 리버싱을 이용한 모의해킹 : 킹초보편

로그인이 가능한 C++를 이용한 프로그램 제작!

OllyDbg를 사용한 모의해킹, kt ds, ICT품질혁신팀

세 명의 User 정보(ID, Password)를 입력받은 후에 반복하여 로그인하는 프로그램을 구현(소스를 몰라도 됩니다. 모르시는 분은 흐름만 보세요)

  1. 입력받을 User는 세 명이고, 각각 ID/비번을 입력받습니다.

  2. 이후 각각 로그인이 가능하며, 로그인 시에 ID에 “종료”를 입력하면 프로그램이 종료됩니다.

  3. ID는 중복될 수 없습니다. 중복된 ID를 입력할 경우에 종료됩니다.

CPP 파일 실행 후 exe 파일 생성이 불가한 경우 첨부된 exe 파일 사용하면 되며, CPP파일 만드는 것도 실행하고 싶으신 분은 아래 과정에 따라 해보세요.

① Visual Studio 2022(community버전-무료) 를 설치합니다.
Python 환경(Pycham, Visual Studio Code 2022등)은 C/C++ 소스를 컴파일하고, 동작하는데 별도로 해야 하는 작업이 많으며, 사내망 제한으로 C/CPP 코드팩 설치 단계에서 진행할 수가 없습니다.

② 다운로드 및 설치는 아래 사이트를 참고합니다.
https://visualstudio.microsoft.com/ko/downloads/

③ 설치 시 주요 팁 “C++을 사용한 데스크탑 개발” 워크로드를 설치합니다.
④ 설치가 완료되면 “새 프로젝트 만들기”를 실행합니다. (이름은 마음대로 입력)
⑤ 파일 소스는 그림파일과 같이 작성하고, 빌드>솔루션 빌드를 하면 .exe 파일이 생성됩니다. 필자는 ex_input_user3.cpp 및 .exe 입니다.

OllyDbg를 사용한 exe파일 열기 및 옵션 설정

OllyDbg를 사용한 모의해킹, kt ds, ICT품질혁신팀

사전작업:

  1. OllyDbg를 설치합니다.
    https://www.ollydbg.de/
    참고로 1.* 버전은 64bit 프로그램이 불가하므로 2.*를 다운로드합니다.

본 작업:

  1. OllyDbg를 실행하고, ex_input_user3.exe 파일을 엽니다. (위 단계에서 exe파일을 만드셨다면, 복사 후 사용을 권장합니다. exe파일이 덮어씌워지면 원래 상태의 exe파일을 얻기 위해서 VS2022에서 계속 빌드 해줘야 합니다.)

  2. 해당 그림과 같은 실행 화면을 확인할 수 있습니다.

  3. 옵션 설정
    ※ Debugging on new module[DLL] 등 1.*버전 관련 내용 => 2.* 에서는 거의 기본 체크 되어있으니 그냥 넘어가도 됩니다.
    ※ Debugging > Start > Entry point of main module : 메인모듈 실행 시 표시 이것만 확인해 주세요.
    ※ 디스어셈블리창(화면 왼쪽 상단화면) 우클릭 -> Appearance -> highlighting -> 원하는 거 선택 : 해킹해야 할 지점이 좀 더 명확(하이라이트)하게 표현됩니다.
    하이라이팅은 1개씩 선택 가능하며 첫 단계이므로 이동부분 점검이 쉽도록 Jump&Call을 선택합니다.

OllyDbg를 사용한 exe파일 리버싱 시작점 찾기

OllyDbg를 사용한 모의해킹, kt ds, ICT품질혁신팀

exe파일이 열린 화면에서
이제 .exe 파일의 시작점을 찾고 해킹해야 할 부분을 찾아야 합니다.

소스에서 보셔서 아시겠지만, 이번 목표는 login failed => login success로 변경하는 것이 목표 입니다. 따라서 해당 부분을 찾아보도록 합니다.

① exe 파일 로드시 맨 처음 시작점으로 파일이 시작됩니다.

② Code Widnow 에서 마우스 우클릭 > Search for > All referenced text strings를 실행하여 로그인관 관련된 “login success” 부분을 찾아봅니다.

③ Comments 부분에서 Login success 된 부분을 찾아서 더블클릭하면 해당 주소를 Code Window 화면으로 이동합니다.

Step Over(F7) 을 누르면서 이동하는 지점을 계속해서 확인해 봅니다.

OllyDbg를 사용한 exe파일 리버싱 소스 간단 분석

OllyDbg를 사용한 모의해킹, kt ds, ICT품질혁신팀

소스를 조금만 살펴보겠습니다.

CPU Address

Command

Comments

7FF7_693619C1

LEA RDX,[REL 7FF7_693644E8]

ASCII login success.

7FF7_693619C8

JNE SHORT 7FF7_693619D1

7FF7_693619CA

LEA RDX,[REL 7FF7_693644F8]

ASCII login failed.

보시면 7FF7_693619C1, C8, CA 부분에서 login 성공 실패와 관련된 동작을 하는 부분임을 알 수 있습니다.

따라서 여기에 F2(Break point)를 눌러서 프로그램 실행 시 언제 해당 주소로 접근하는지 확인해 볼 수 있습니다.

※ Command 부분의 명령어는 Assembly 명령어이며 주요 몇 개만 정리해 보면 아래와 같습니다. 다른 명령어는 아래 사이트(코딩팩토리) 참고해 주세요

Data Transfer

명령어

설명

MOV

Move

데이터 이동 (전송)

PUSH

Push

오퍼랜드의 내용에 스택을 쌓는다.

POP

Pop

스택으로부터 값을 뽑아낸다.

LEA

Load Effective Address to Register

메모리의 오프셋값을 레지스터로 로드

Logic

명령어

설명

NOT

Invert

오퍼랜드의 1의 보수, 즉 비트 반전

AND

And

논리 AND

TEST

And function to Flags, no result

첫 번째 오퍼랜드와 두 번째 오퍼랜드를 AND하여 그 결과로 플래그 세트

OR

Or

논리 OR

Control Transfer

명령어

설명

CALL

Call

프로시저 호출

JMP

Unconditional Jump

무조건 분기

JE/JZ

Jump on Equal / Zero

결과가 0이면 분기

JNE/JNZ

Jump on not Equal / not Zero

결과가 0이 아니면 분기

참조 : 코딩팩토리 https://coding-factory.tistory.com/650

OllyDbg를 사용한 exe 파일 변경 저장

OllyDbg를 사용한 모의해킹, kt ds, ICT품질혁신팀

F7(Step Over)을 누르면서 계속 실행되면 exe파일이 원래 실행될 때 나타나는 command 창이 나오고 로그인 정보를 입력하고, 로그인 기능을 테스트할 수 있습니다.

========= 1 =========
id : 1
password : 1
====================
========= 1 =========
id : 1
password : 1
====================
========= 2 =========
id : 2
password : 2
====================
========= 3 =========
id : 3
password : 3
====================
======== Log In =========
Id : 1
Password : 2
login failed.
================
======== Log In =========
Id : 1
Password : 1
login success.

이제 assembly 파일 조작을 시작합니다.
Code window 창에서 JNE SHORT 7FF7_693619D1 를 클릭하고 마우스 오른쪽을 눌러 Assemble을 눌러 문자열을 변경합니다.

JNE SHORT 7FF7_693619D1 => JE SHORT 7FF7_693619D1 로 변경

이해하기 쉽게 정리하면, *JNE 는 “같지 않으면” JE 는 “같으면”이고 여기서는 “비번이 같지 않으면”, “비번이 같으면”으로 보시면 됩니다.

즉, 같지 않으면 7FF7_693619D1 주소로 이동하는 것인데, 같으면 이동하고, 같지 않으면 당연히 아래 줄로 명령이 넘어가게 됩니다.

아래 줄로 넘어가고 F8(Step over)을 계속해서 넘어가면 다시 로그인 창이 나오게 됩니다.

여기서 다시 아이디/비번 1/1, 2/2를 입력해 보면 방금 전 변조돼서 로그인이 실패했다고 나오게 되며, 1/2을 입력하면 로그인이 성공한다고 나오게 됩니다.

이 결과를 보기까지는 Debugging 상태이므로 계속해서 F8(Step over)을 누르면서 실행해 줘야 합니다.

글을 맺으면서

리버싱 모의해킹은 갈수록 보안프로그램도 강화되면서 어려워지고 있는 것은 사실입니다.

오늘 설명해 드린 내용은 거대한 모의해킹 세계에 “발가락 담그기” 정도의 내용을 보여 드렸으며 저 또한 초보자입니다.

정상 로그인까지 처리하자면 내용도 조금 길어지고, C/C++ 언어도 처음 접해본다는 가정하에 준비한 내용이라, 이 정도면 되지 않을까 싶습니다. ㅎ

다음은 아이디/비번 정상입력시에도 로그인이 될 수 있도록 수정 해보고, 또 보여지는 메시지 부분을 사용자 임의로 수정해 보는 부분까지 추가로 업데이트하도록 하겠습니다. 감사합니다.~

Share article
Subscribe to our newsletter

ICT사업본부 블로그