반응형

기드라에서 디스어셈블되지 않고 Opcode로 표시된 명령을 디스어셈블하고 함수로 등록해 보자.

 

리스트창을 보면 디스어셈블되지 않고 Opcode로만 표시된 부분이 있을 수 있다.

 

디스어셈블 하고 싶은 부분의 첫 명령어에서 우클릭 - Disassemble을 클릭한다.

Disassemble(Restricted), Disassemble(Static)은 한 줄(혹은 블럭으로 지정된 부분)만 디스어셈블한다.

 

Opcode로만 표시되던 명령어가 디스어셈블되었다.

 

함수 전체가 디스어셈블 되지 않고 Opcode로만 표시되었다.

 

 

첫 코드에서 우클릭 - Disassemble을 클릭한다.

 

디스어셈블 되었으면 다시 우클릭 - Create Function을 클릭한다.

 

디스어셈블된 부분이 함수로 등록되었다.

 

반응형
Posted by J-sean
:
반응형

Ghidra로 패치한 파일을 저장해 보자.

 

패치할 프로그램을 임포트한다.

 

WindowsPE x86 Propagate External Parame... 옵션을 선택하고 분석한다.

 

패치가 필요한 코드에서 우클릭 - Patch Instruction을 선택한다.

 

어셈블리 명령을 수정한다.

 

 

수정이 완료되었다.

 

File - Export Program...을 선택한다.

 

Format은 PE로 바꾸고 Output File을 적당히 지정하고 OK를 클릭한다.

 

Export 결과가 표시된다.

 

 

패치된 파일을 실행해본다.

 

반응형
Posted by J-sean
:
반응형

emu8086은 80~90년대 사용되던 8086 프로세서 에뮬레이터다. 이게 왜 필요할까? 

 

 

요즘은 어셈블리어에 대한 사람들의 관심이 거의 없다 보니 자료를 찾아도 예전 도스(DOS) 시절 만들어진 자료가 대부분이다. 물론 그런 자료도 참고 할 수는 있지만 컴퓨팅 환경이 그때와는 너무 많이 달라져서 그런 책이나 자료로 실습은 불가능한 상황이다. 그래서 예전 환경을 에뮬레이팅 해 주는 EMU8086이 필요한 것이다.

 

좀 불편하긴 해도 도스(DOS) 에뮬레이터 도스박스(DOSBox)를 사용하면 8086 프로세서 어셈블리 프로그래밍을 연습할 수 있다.

 

2022.12.16 - [Reverse Engineering] - MASM 6.11

 

우리는 emu8086을 사용해 보자.

 

emu8086.zip
2.99MB

 

 

emu8086의 Hello, World! 예제. 소스를 실행해 보고 싶다면 emulate를 클릭한다.

 

에뮬레이트할 소스 코드를 보여주는 창. 첫 번째 명령어에서 실행 대기 상태가 된다.

 

에뮬레이터에서는 메모리 주소와 기계어 코드, 레지스터 상태를 확인할 수 있고 디버거, 버추얼 디바이스등 여러가지 기능을 사용할 수 있다.

 

Hello, World! 예제 실행 화면.

 

 

help 버튼을 클릭하면 Tutorial, Instruction Set, Interrupt등 여러가지 설명을 확인할 수 있다.

 

emu8086은 14일간 무료로 사용할 수 있는 shareware다. 그런데 홈페이지도 없어진거 같고.. 더 이상 개발이 진행되는거 같지가 않다. 구매가 가능한지도 모르겠다. 그렇다면.. Registration Key는 알아서 구한다.

 

원한다면 리버싱으로 직접 등록키를 알아낼 수도 있다. 참고로 등록키 암호화에 사용된 문자열은 JKASERKKN837C3FRTQZX이고..

 

Visual Basic으로 만들어졌다.

 

리버싱에 성공한다면 이렇게 자신의 이름을 직접 등록할 수 있다.

 

반응형
Posted by J-sean
:
반응형

x64dbg에서 패치한 파일은 아래와 같이 ollydbg와는 다른 방식으로 저장한다.

 

필요한 부분을 패치 한다. 아래 예에서는 4바이트를 패치 했다.

 

File - Patch file... 을 클릭 한다.

 

패치된 4바이트가 표시 된다. Patch File 버튼을 클릭 한다.

 

원하는 이름을 입력하고 저장 버튼을 클릭 한다.

 

 

패치가 적용되었다는 메세지 박스가 나타난다.

 

지정된 폴더에 패치된 파일이 생성되어 있다.

 

 

 

 

반응형
Posted by J-sean
:
반응형

x64dbg를 설치하고 실행해 보면 아래와 같이 밝은 배경으로 표시 된다.

 

아래 링크에서 원하는 Color Scheme을 다운 받고 압축을 풀어 주자. (

mostlyblack.ini
다운로드

)

x64dbg Color Schemes

 

Options - Import settings... 를 선택 한다.

 

다운 받은 Color Scheme 파일을 선택해 준다.

 

선택한 Color Scheme이 바로 적용 된다.

 

 

파일을 열어 보면 아래와 같이 표시 된다.

 

 

 

반응형

'Reverse Engineering' 카테고리의 다른 글

Cheat Engine으로 Multilevel pointers 찾기  (0) 2019.03.20
x64dbg 패치한 파일 저장하기  (0) 2019.03.05
Cheat Engine으로 Pointer 찾기  (2) 2019.02.13
Back to user mode  (4) 2019.02.10
Windows 10에서 *.hlp 파일 열기  (10) 2019.02.05
Posted by J-sean
:
반응형

※ 참고: 포인터 스캐너 사용법

 

Cheat Engine으로 간단하게 Pointer를 찾을 수 있다.

 

Cheat Engine에서 Tutorial 프로세스를 열어 준다. Value를 변경해 가며 정확한 Address를 찾는다.

 

찾은 Address에서 오른쪽 클릭 하고 'Find out what accesses this address'를 클릭한다.

 

Cheat Engine에 debugger를 붙여 준다.

 

 

아래와 같은 창이 뜬다.

 

Tutorial로 돌아가 Change value 버튼을 클릭해 값을 변경 하면 018F3D30 주소에 접근한 opcode들이 표시 된다. 그 중 두 번째 opcode가 018F3D30 위치의 값을 바꾼다는 것을 알 수 있다. (아래 창에서 << 표시된 opcode) More information을 클릭하면 약간의 추가 정보가 표시 된다.

 

Cheat Engine에서 value가 저장된 Address인 018F3D30을 다시 Hex scan 한다.

 

018F3D30이 저장된 Address가 Pointer의 Address 이다. Add Address Manually 버튼을 클릭한다.

 

 

Pointer를 체크한다.

 

Pointer의 Address를 입력한다. offset 값은 없으므로 0으로 둔다.

 

Value가 저장된 위치를 가리키는 Pointer가 추가 된다.

 

Value를 5000으로 수정하고 Active를 체크한다. (Value가 5000으로 고정 된다)

 

 

Tutorial에서 Change value 버튼을 클릭하면 Value가 바뀌지만 메모리 상에서는 다시 5000으로 돌아간다. Change pointer 버튼을 클릭하면 Pointer가 가리키는 주소(Value 값이 저장된 주소)가 바뀌고 Cheat Engine 에서 찾아 놓은 Pointer 가 가리키는 주소값도 똑같이 바뀐다. Next 버튼이 활성화 되고 Pointer를 찾았음을 확인 할 수 있다.

 

 

이번에는 아래와 같은 코드로 프로그램을 만들어서 정확히 확인해 보자. 

 

Pointer.exe
다운로드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    int* p = new int;
    *= 100;
    int choice;
 
    cout << "Value(*p): " << *<< endl;
    cout << "Pointer value(p): " << p << endl << endl;
    cout << "1: Change value\n2: Change pointer value\nChoose: ";
 
    while (cin >> choice)
    {
        switch (choice)
        {
        case 1:
            (*p)++;
            cout << endl << "Value(*p): " << *<< endl;
            cout << "Pointer value(p): " << p << endl << endl;
            break;
        case 2:
            p = new int;
            *= 100;
            cout << endl << "Value(*p): " << *<< endl;
            cout << "Pointer value(p): " << p << endl << endl;
            break;
 
        default:
            break;
        }
 
        cout << "1: Change value\n2: Change pointer value\nChoose: ";
    }
 
    delete p;
 
    return 0;
}
cs

 

프로그램을 실행 시키면 포인터에 저장된 주소(p)와 그 주소에 저장된 값(*p)이 표시 된다.

아래와 같이 1을 선택하면 값을 1 증가 시키고 2를 선택하면 포인터에 저장된 주소를 다시 할당 한다.

 

프로그램을 다시 실행하고 Cheat Engine으로 Value를 변경해 가며 주소를 찾는다.

 

 

 

프로그램에서 주소값을 표시해 주므로 Cheat Engine에서 찾은 주소가 맞는지 쉽게 확인 된다.

마찬가지로 Find out what accesses this address 로 어떤 코드가 이 주소에 접근하는지 확인해 보자.

 

 

More informatioin의 내용도 확인해 보자.

 

Value의 주소값을 Hex Scan으로 검색한다. 아래와 같이 두 개의 주소가 확인 되었다.

 

 

프로그램에서 2번을 선택해 Pointer가 가리키는 주소를 변경해 보자.

 

00F3F764에 저장된 값이 프로그램과 동일하게 변경되는걸 확인 할 수 있다. 00F3F764가 포인터의 주소이다.

 

Add Address Manually로 Pointer를 추가해 준다.

 

 

 

프로그램에서 Value와 Pointer value를 변경하면 Cheat Engine에 찾아 놓은 포인터에도 똑같이 적용되는걸 확인 할 수 있다.

 

 

 

반응형

'Reverse Engineering' 카테고리의 다른 글

x64dbg 패치한 파일 저장하기  (0) 2019.03.05
x64dbg Color Scheme 바꾸기  (0) 2019.02.19
Back to user mode  (4) 2019.02.10
Windows 10에서 *.hlp 파일 열기  (10) 2019.02.05
IDA Pro Skin 바꾸기  (1) 2019.02.04
Posted by J-sean
:

Back to user mode

Reverse Engineering 2019. 2. 10. 22:21 |
반응형

프로세서가 kernel mode에서 user mode로 변경되는 시점을 간단히 찾을 수 있다. (User mode and kernel mode)

 

 

 

예를 들어 Message box가 종료되는 지점을 찾아 보자. ollydbg에서 분석할 프로그램을 열어 준다.

 

RegisterMe.zip
0.00MB

(password: lena)

 

 

F9를 눌러 실행 한다.

 

아래와 같은 Message box가 나타난다.

 

F12를 눌러 정시 시킨다.

 

 

아래와 같은 곳으로 이동 된다.

 

Alt + F9를 눌러 back to user mode를 실행 한다.

 

오른쪽 아래에 Till user가 표시 된다.

 

'Register Me' 메세지 박스에서 '확인'을 클릭하면 아래와 같이 MessageBoxA CALL 이 종료되는 시점에서 정지 된다.

 

 

이번엔 scanf 가 종료되는 지점을 찾아 보자. 아래와 같은 소스로 실행 파일을 만들어 준다. (

FindMe.zip
다운로드

)

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
    int i;
 
    printf("Enter a number: ");
    scanf_s("%d"&i);
    printf("Number: %d", i);
 
    return 0;
}
cs

 

ollydbg(v.2.01)로 열어 준다.

 

F9를 눌러 실행 한다.

 

아래와 같이 숫자를 입력하는 콘솔창이 뜬다.

 

 

다시 ollydbg로 돌아와 F12를 눌러 정지 시킨다. 하지만 여기서는 Paused 상태가 되지 않고 Pausing 상태가 된다.

 

콘솔창에서 숫자를 입력 한다.

 

숫자를 입력하면 아래와 같은 주소로 이동하고 정지 상태가 된다.

 

F8, Alt + F9, Ctrl + F9 를 적당히 눌러가며 진행 하면 scanf가 종료되는 것으로 보이는 위치가 나타난다.

 

 

같은 파일을 x32dbg로 열어 보자.

 

F9를 눌러 진행 한다.

 

한번 더 F9를 눌러 진행하면 아래와 같이 Running 상태가 된다.

 

숫자를 입력하라는 콘솔창이 뜬다.

 

 

x32dbg로 돌아가 Threads 창을 열어 준다.

 

Title Bar에는 Main Thread가 선택되어 있는 것 처럼 표시 되지만 Main Thread가 아닌 2번 thread가 활성화 되어 있다. 이 상태에서는 break point가 제대로 작동하지 않는다. Main Thread를 활성화 해 준다.

 

아래와 같은 주소로 이동 된다. F12를 눌러 Pause 한 후(F12를 한 번 누르면 화면에는 아무것 도 표시되지 않는다. 두 번 누르면 Error setting breakpoint at XXXXXXXX! (SetBPX) 가 표시 되지만 무시하자) 콘솔창에서 숫자를 입력한다.

 

숫자를 입력하고 나면 아래와 같이 Paused 상태가 된다.

 

 

F8, Alt + F9, Ctrl + F9 를 적당히 눌러가며 진행 하면 scanf가 종료되는 것으로 보이는 위치가 나타난다.

 

스크롤을 조금 올려 보면 프로그램의 전체적인 내용을 파악 할 수 있다. pdb파일이 같이 있기 때문에 소스 라인까지 표시 된다.

 

 

반응형

'Reverse Engineering' 카테고리의 다른 글

x64dbg Color Scheme 바꾸기  (0) 2019.02.19
Cheat Engine으로 Pointer 찾기  (2) 2019.02.13
Windows 10에서 *.hlp 파일 열기  (10) 2019.02.05
IDA Pro Skin 바꾸기  (1) 2019.02.04
ollydbg Jump 위치 표시  (2) 2019.02.02
Posted by J-sean
:
반응형

ollydbg에서 jump 명령어 실행 시 이동되는 위치는 시각적으로 명확히 표시되지 않는것이 기본 세팅 이다.



ollydbg.ini 파일에서 아래와 같은 항목들의 값을 1로 바꿔 준다.

  • Show jump path
  • Show jumpfrom path
  • Show path if jump is not taken



ollydbg를 실행해서 확인하면 아래와 같이 화살표로 jump 가 명확히 표시된다.


반응형

'Reverse Engineering' 카테고리의 다른 글

x64dbg Color Scheme 바꾸기  (0) 2019.02.19
Cheat Engine으로 Pointer 찾기  (2) 2019.02.13
Back to user mode  (4) 2019.02.10
Windows 10에서 *.hlp 파일 열기  (10) 2019.02.05
IDA Pro Skin 바꾸기  (1) 2019.02.04
Posted by J-sean
: