반응형

컴퓨터를 사용하다 보면 알 수 없는 이유로 프로그램이 멈출 때가 있다. 내 컴퓨터에서 그런 문제가 발생한다면 바로 디버깅 해 볼 수 있지만 다른 장소의 컴퓨터에서 발생하는 경우에는 바로 디버깅할 수 없다. 이럴때는 아래 링크를 참고해 메모리 덤프 파일을 생성하고 분석해 볼 수 있다.

 

2023.07.02 - [Reverse Engineering] - BSOD Crash on Crtl + Scroll 매뉴얼 메모리 덤프

 

이 프로그램(LabApp.exe)이 작동을 멈춰서(hang) 덤프를 생성했다.

 

'!process 0 1f labapp.exe' 명령으로 멈춘 프로세스 정보를 확인해 본다.

프로세스 주소: ffffc58f9a4df080
스레드 주소: ffffc58f9a506080

 

조금 더 내려보면 덤프 생성시 작동중이던 스레드 콜스택을 확인 할 수 있다.

아래와 같은 OnHangBtn 함수가 실행중이었다. 프로그램이 멈춘 이유를 찾았으니 쉽게 해결 할 수 있다.

void CLabAppDlg::OnHangBtn() 
{
    while (1)
    {
         // do nothing
        ;
    }
}

 

만약 소스 파일이 없는 프로그램이라면 아래 내용을 계속 진행한다.

 

 

'.process ffffc58f9a4df080' 명령으로 프로세스 컨텍스트를 바꾼다.

 

'.thread ffffc58f9a506080' 명령으로 레지스터 컨텍스트를 바꾼다.

레지스터 컨텍스트까지 바꾸면 LabApp.exe 프로세스의 실행중이던 스레드 스텍 프레임으로 바뀐다. 그런데 제일 마지막에 실행되었던 OnHangBtn 함수 이름이 표시되지 않고 주소로만 표시된다.

 

※ 참고

'.thread /p ffffc58f9a506080' 명령으로 프로세스, 레지스터 컨텍스트를 한번에 바꿀 수도 있다.

 

0x401b27(OnHangBtn 함수 주소) 어셈블리 코드를 확인해 보자.

eax 레지스터에 1을 넣고 test eax, eax 연산을 진행한다. eax를 AND 연산하면 0이 아니기 때문에 ZF는 0이고 rip(eip)는 0x401b27로 무한히 돌아가게(jmp) 된다. 문제의 원인이 파악 되었다.

 

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

윈도우 시작 시 관리자 권한으로 실행 되어야 하는 프로그램이 있다. 작업 스케줄러에 등록하고 관리자 권한으로 실행되도록 해 보자.

 

관리자 권한으로 시작되는지 확인 할 수 있는 프로그램을 작성하고 빌드한다.

2022.01.05 - [C#] - C# Run As Administrator - 관리자 권한으로 실행하기

 

실행(Win+R) - control schedtasks 명령을 실행한다.

 

작업 스케줄러가 실행된다. 작업 - 작업 만들기... 를 클릭한다.

 

'새 작업 만들기'가 표시된다.

 

 

이름, 설명을 간단하게 지정하고 '가장 높은 수준의 권한으로 실행'을 체크한다.

 

트리거 탭에서 '새로 만들기(N)...' 버튼을 클릭한다.

 

새 트리거 만들기가 표시된다.

 

작업 시작을 '로그온할 때'로 변경한다.

 

 

동작 탭에서 '새로 만들기(N)...' 버튼을 클릭한다.

 

새 동작 만들기가 표시되면 찾아보기(R)... 버튼을 클릭한다.

 

실행할 프로그램을 선택한다.

 

확인 버튼을 클릭한다.

 

 

작업 내용 지정이 완료되면 확인 버튼을 클릭한다.

 

작업 만들기가 완료 되었다. 앞으로 사용자 로그온 시 지정한 프로그램이 관리자 권한으로 실행된다.

 

지정한 프로그램이 관리자 권한으로 실행된다.

 

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

Google Cloud Platform(GCP) 의 무료 프로그램을 이용하면 간단한 리눅스 서버를 만들 수 있다.

 

2019.10.11 - [Linux] - Google Cloud Platform Always Free Linux Web Server 구글 클라우드 플랫폼으로 무료 리눅스 웹서버 만들기

 

위 링크의 예전 방법과 비슷하지만 무료 프로그램 조건이 약간 변경 되었다.

 

GCP - Compute Engine - VM instances를 클릭한다.

 

CREATE INSTANCE를 클릭한다.

 

우선 무료 Compute Engine의 조건을 확인해 보자.

Google Cloud 무료 프로그램

 

 

무료 프로그램 조건에 맞게 설정하고 Create 버튼을 클릭한다.

  • Name: 원하는 이름으로 지정한다.
  • Region: 아래 목록중 하나를 선택한다.
    - Oregon: us-west1
    - Iowa: us-central1
    - South Carolina: us-east1
  • Machine family: General-purpose
  • Series: E2
  • Machine type: e2-micro (2 vCPU, 1 GB memory)
  • Boot disk: standard persistent disk로 최대 30GB 까지 선택 가능.
  • Firewall: 웹서버를 설치한다면 Allow HTTP/HTTPS traffic을 선택한다.

 

Instance가 생성 되었다. Connect - SSH 를 클릭한다.

 

생성된 Instance에 연결 되었다.

 

반응형
Posted by J-sean
: