화면 잠금 프로그램 'Lock Workstation' 제작

리버싱 2019. 11. 13. 13:39

1) VB 2008을 이용하여 'lock_1.exe' 파일을 제작

 

- 파일 -> 새로 만들기 -> 프로젝트 -> 빈 프로젝트 -> 위치(04_테스트) & 이름 (lock_1) -> 확인

- '소스 파일' 우클릭 -> 추가 (새 항목) ->  'C++ 파일(.cpp)' 선택 -> 이름(lock_1) -> 추가

 

#pragma comment(lib, "user32.lib")

 

#include <windows.h>

#include <stdio.h>

 

void main()

{

    if (!LockWorkStation())  // 성공이면 '0' 이 아닌 값 리턴 , 실패하면 '0' 리턴

            printf("LockWorkStation failed with %d\n", GetLastError());

}

 

- 빌드 -> lock_1 빌드 -> Release 선택 -> ▶ 버튼 클릭 -> 화면 잠김 확인 -> 파일 -> 모두 저장

 

2) 'lock_1.exe' 파일에서 사용하는 DLL/함수를 확인한다

- PEview , CFF Explorer , Dependency , Walker

 

 

 

 

 

 

3) 화면 잠금 프로그램 'lock_2.exe' 제작

 

 

 

  1) VB 2008을 이용하여 'lock_2.exe' 파일을 제작  <--- 명시적

 

- 파일 -> 새로 만들기 -> 프로젝트 -> 빈 프로젝트 -> 위치(04_테스트) & 이름 (lock_2) -> 확인

- '소스 파일' 우클릭 -> 추가 (새 항목) ->  'C++ 파일(.cpp)' 선택 -> 이름(lock_2) -> 추가

- 소스 파일 -> 'lock_2.cpp' 우클릭 -> 속성 -> C/C++ -> 고급 -> 컴파일 옵션 -> 'C 코드로 컴파일'

-> 확인

 

#include  <windows.h>

#include  <stdio.h>

BOOL (*funP1) (void);

void main()
{
HMODULE hModule;
PVOID pVoid;
hModule = LoadLibrary("user32.dll");
// 'LoadLibrary' 함수를 이용하여 'user32.dll'을 로드
if(!hModule) 
{
printf("failed to load dll");
exit(1);
}

pVoid = GetProcAddress(hModule,"LockWorkStation");
// 'GetProcAddress' 함수를 이용하여 "LockWorkStation" 주소를 'pVoid' 변수에 대입
if (pVoid == NULL)
{
printf("failed to load function");
exit(1);
}

funP1 = pVoid; // 함수 포인터 주소를 'pVoid'로 연결
(*funP1)(); // 함수 호출 실시
}

 

 

 

 

1) VB 2008을 이용하여 'lock_3.exe' 파일을 제작  <--- 명시적

 

- 파일 -> 새로 만들기 -> 프로젝트 -> win32 콘솔 응용 프로그램 ->  위치(04_테스트) & 이름 (lock_3) -> 확인

- 마법사 시작 -> 다음 -> 추가 -> 새 항목 -> C++파일 선택 -> lock_3_export -> 추가

 

#pragma comment(linker,"/export:LockWS=user32.LockWorkStation")
#pragma comment(lib,"user32.lib") 

 

- '헤더 파일' 우클릭 -> 추가 -> 새 항목 -> '헤더 파일 (.h)' 선택 -> 이름 (lock_3_export_h) -> 추가

 

#include  <windows.h>
#include  <stdio.h>

//extern "C"_declspec(dllexport)

int LockWS(void)
{
if(!LockWorkStation())
{
printf("LockWorkStation failed with %d\n", GetLastError());
return 1;
}

return 0;
}

 

- 빌드 -> lock_3_export 빌드

- Release 선택 -> 디버그시작 버튼 -> 파일 -> 모두저장

- C:\리버싱\04_테스트\lock_3_export\Release -> 'lock_3_export.lib' , 'lock_3_export.dll;

 

 

1) VB 2008을 이용하여 'lock_3.exe' 파일을 제작  <--- 명시적

 

- 파일 -> 새로 만들기 -> 프로젝트 -> win32 콘솔 응용 프로그램 ->  위치(04_테스트) & 이름 (lock_3_import.exe) -> 확인

- 소스파일 우클릭 ->   추가 -> 새 항목 -> C++파일 선택 -> lock_3_export -> 추가

 

- lock_3_import 마우스 우클릭 -> 속성 -> 구성속성 -> 링커 -> 입력 -> 추가 종속성 -> 'lock_3_export.lib' 입력 추가   -> 확인 -> 구성 속성 -> 링커 -> 일반 -> 추가 라이브러리 디렉터리 -> 'lock_3_export\Release' 추가 -> 확인

구성 속성 -> C/C++ -> 일반 -> 추가 포함 디렉터리 -> 'lock_3_export\lock_3_export' 추가 -> 확인

 

- 빌드 -> lock_3_import 빌드

- Release 선택 -> 

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

어셈블리 기본 명령어  (0) 2019.11.14
어셈블리(레지스터 이해)  (0) 2019.11.13
PE 파일 분석 IAT & Pre Binding  (0) 2019.11.11
PE 파일 분석 ( PE 바디 - 섹션 )  (0) 2019.11.11
PE 파일 분석 ( RVA to RAW )  (0) 2019.11.11

설정

트랙백

댓글