[Cheat Engine] Step7. Code Injection

들어가며

Cheat Engine을 이용한 Code Injection 실습을 진행한다.

 

실습 환경

[분석환경]
Windows 10 Pro

[분석도구]
Cheat Engine 7.3

Code Injection

코드 인젝션은 단독 실행 중인 프로세스에 코드(dll, 쉘코드) 등을 삽입하여 정상 프로세스의 컨텍스트 안에서 코드를 실행하는 기법이다. 주로 악성코드를 삽입하여 악성행위를 하도록 하는 목적으로 사용되기도 한다.

실습

실습은 Cheat Engine 내 튜토리얼로 진행한다. 간단하며, 따라하기 쉬운 예제이다.

Step 7

이 단계에서는 'Hit me' 버튼을 눌렀을 때 1씩 감소하는 값을 가지고 있다.

Code Injection을 통해서 버튼을 눌렀을 때 2씩 증가하도록 하면 된다.

 

1. Scan

값을 참조하는 부분을 찾기 위해 'New Scan'을 통해 스캔한다.

2. Find Address

해당 값을 참조하고 있는 주소를 찾기 위해서 우클릭-'Find out what accesses this address'(F5)로 진행한다.

새로운 창이 나오게 되고 'Hit me' 버튼을 눌렀을 때 접근(access)한 opcode들을 확인할 수 있다.

버튼을 누를때마다 값이 하나씩 줄어들고 있으므로 뺄셈 연산(sub)이 관련이 있을 것이라고 예상할 수 있다.

두 번째 Instruction에서 Show disassembler로 디스어셈블러를 연다.

sub 명령어를 통해 0x01씩 값을 뺄셈 연산하고 있는 것을 확인할 수 있다.

3. Code Injection

Memory Viewer - Auto Assembler - Template - Code Injection으로 접근한다.

Code Injection Template

주소에 해당하는 원래 코드(original Code)와 코드 인젝션을 삽입할 부분(주석 부분)이 템플릿으로 제공된다.

코드인젝션 시 사용자가 제어하는 메모리를 새로 할당하여 코드를 삽입하기 때문에 메모리에 대한 전체 권한(읽기, 쓰기, 실행)을 가진다.

originalcode: 부분에 앞서 확인했던 sub dword ptr[rsi+000007E0],01 구문을 확인할 수 있다. 

newmem 라벨로 점프(jmp)이후 0x03을 더한다(add), 그리고 원래 코드(originalcode)에서 sub 0x01을 통해 1을 뺄셈하므로 결과적으로 0x02를 더해주는 값을 return 하게 되는 것이다.

작성 완료 후 Execute 버튼을 통해 Code Injection을 수행한다.

결과

버튼을 클릭할 때마다 2씩 올라가면서 100 이상의 값도 가질 수 있다.

동시에 다음 단계로 진행 가능한 Next 버튼도 활성화 되었다!

반응형

'Reversing > Assembly' 카테고리의 다른 글

[Cheat Engine] Step8. Multiple Pointers  (0) 2021.11.29