통합검색
· 마을서비스란?  · 포럼마을  · 일반마을  · 테마마을  · 마을랭킹  · 활동왕
· 덱스퍼트란?  · TECBOX   · PRSBOX   · 이용안내  
· DEXT제품군  · 솔루션베이  · S/W & ESD 컴포넌트
· 프로그램베이
· LiveSeminar  · LiveConference
Visual C++ 포럼마을 입니다.
  마을등급 Visual C++   이 마을은 포럼마을 입니다이 마을은 자유가입제 마을 입니다 마을소개 페이지로 이동 전입신청
마을촌장촌장 나성훈 주민 34043 since 2006-12-29
우리마을 공지사항
질문&답변
강좌&팁
자유게시판
자료실
앨범
개인게시판
마을 게시판
등록된 마을 게시판이
없습니다.
랑데브 게시판
칼럼 게시판
개발자 고충상담
Dev Talk
자유토론방
벼룩시장
재나미 우스개
구인/프로젝트 정보
사람인 채용 게시판
  고객지원 게시판
마이 데브피아
 나의 e-Money 내역
 활동왕 My Page
 스크랩한 게시글보기
 쪽지관리
 주소록관리

 강좌&팁
 [enp] windows-credprov 를 이용한 윈도우 자동로그인을 구현해 보자   | VC++ 일반 2020-02-26 오후 7:29:54
 EnP  EnP님께 메시지 보내기EnP님을 내 주소록에 추가합니다.EnP님의 개인게시판 가기 번호: 8897 추천:0  / 읽음:418

안녕하십니까 ENP 입니다.

 

이번에 오픈소스를 이용한 재미있는 것을 해보려고 합니다. 

바로 윈도우 자동로그인입니다. 사용예를 든다면 원격에서 내 PC 의 로그인 화면을 풀어버리는 작업이 가능하겠지요. 

(어디다 쓸꺼나...;;;;)

 

사용할 모듈은 아래에 나열해 놓았습니다. 

 

가) ovirt windows-credprov 

https://github.com/oVirt/ovirt-guest-agent

 

ovirt 라고 들어보신분은 들어보셨을거라 생각됩니다. 여기서 배포하는 GuestAgent , 그 GuestAgent 의 한축을 담당하는 windows-credprov 모듈을 가져다가 사용해 보겠습니다. 실질적으로 로그인을 가능하게 해 주는 오픈소스이지요 흐흐흐 

 

나) SimpleGuestAgent

https://www.codeproject.com/Articles/499465/Simple-Windows-Service-in-Cplusplus

 

codeproject 의 오픈소스를 조금 수정해 본겁니다. 위의 windows-credprov 에게 로그인을 하라고 명령을 내리는 서비스 프로그램입니다. 추후 작업하신다면....이 서비스 프로그램에 명령을 내려서 원격로그인도 가능히겠지요

 

다) registry 수정작업 

SoftwareSASGeneration 라는 DWORD 값을 수정해 주면 됩니다.

 

 

 

그럼 시작해 보겠습니다. 

 

가) ovirt windows-credprov 컴파일 및 설치 

 

1. https://github.com/oVirt/ovirt-guest-agent/tree/master/windows-credprov 를 다운로드 합시다.

 

저같은 경우는 Visual Studio 2017 를 가지고 컴파일을 했습니다. x86, x64 둘다 컴파일 가능합니다.

컴파일 하시면 OVirtCredProv.dll 이 나오는데요. 이걸 RHEVCredProv.dll 로 이름을 바꾸어 줍니다. 그리고 windows 64 비트에는 x64 로...windows 32 비트에는 x86 으로 설치하게 됩니다.

 

2. 설치방법

 

RHEVCredProv.dll 를 C:\windows\system32 에 복사후 소스내에 포함된 Register.reg 를 실행해 주시면 됩니다. 

 

 

 

나) SimpleGuestAgent

windows-credprov 에게 로그인을 하라고 명령을 내리는 서비스 프로그램인데요. codeproject 의 소스에 약간 수정을 가미한 겁니다. 핵심소스를 설명해 드리겠습니다.

 

SendSAS 와 VDSMDPipe 를 자세히 보아 주십시요.

SendSAS 는 windows api 로서 화면이 잠금상태일 경우 잠금화면을 푸는 작업을 수행합니다. 

https://docs.microsoft.com/en-us/windows/win32/api/sas/nf-sas-sendsas

 

VDSMDPipe 는 파이프 통신으로 위의 RHEVCredProv.dll 에게 로그인을 하라는 명령을 내립니다.

파이프에 전달되는 데이터는 대략 다음과 같은 형태입니다.

 

UserID 사이즈 (4바이트) + UserID + UserPW 

 

https://github.com/oVirt/ovirt-guest-agent 내부에서 GuestAgentWin32.py 에 다음과 같은 소스가 있으니 참고하셔요, 

https://github.com/oVirt/ovirt-guest-agent/blob/master/ovirt-guest-agent/GuestAgentWin32.py

파이썬 코드입니다 :) 이걸 C/C++ 로 변환했습니다.

 

 username = args['username'].encode('utf8')

 password = args['password'].encode('utf8')

 credentials = struct.pack(

                '>I%ds%ds' % (len(username), len(password) + 1),

                len(username), username, password)

 

저는 서비스 프로그램에 ID 와 PW 를 하드코딩한 상태로 테스트를 했습니다 @.@ (administrator 와 1111)

 

C:\ 에 SimpleGuestAgent.exe 를 넣어두고 업로드된 create_sc.bat 를 실행하셔서 서비스로 등록해 주시면 됩니다. 

단 수동설정으로 세팅된 상태이므로 시작시 바로 구동하려면 제어판의  서비스 관리에서 수정하셔요

 

참고적으로 30초마다 로그인을 시도하도록 해놓았습니다 :)

 

다) registry 수정작업 

SoftwareSASGeneration 라는 DWORD 값을 수정해 주면 됩니다.

 

https://getadmx.com/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsLogon2::SoftwareSASGeneration

이곳의 내용을 참고하시면 되고요. 

 

SendSAS 하기전에 SoftwareSASGeneration 를 3으로 변경했다가 다시 0으로 변경하시면 됩니다. :) 

저는 그냥 3으로 고정하고 테스트해 봤습니다.

 

위의 파이썬 코드중에 다음과 같은 부분을 살펴 보시면 됩니다.

 

# setSoftwareSASPolicy is used to set the value to 3 to enable the

# simulated secure attention sequence, and reverts the to the

# previous value after the function was performed.

oldValue = self._setSoftwareSASPolicy(3)

windll.sas.SendSAS(0)

self._setSoftwareSASPolicy(oldValue)

 

 
위의 작업들이 마친후에 리부팅후에 한번 테스트해 보시길 바랍니다. 
 
추후에 libvirt api 와 ovirt-guest-agent 의 내부를 리뷰해 보는 시간도 가져보겠습니다. :)

 

참고자료

https://github.com/oVirt/ovirt-guest-agent

https://github.com/oVirt/ovirt-guest-agent/blob/master/GinaSSO/GinaDlg.cpp

https://getadmx.com/?Category=Windows_10_2016&Policy=Microsoft.Policies.WindowsLogon2::SoftwareSASGeneration

https://github.com/dkmstr/openuds/blob/master/actor/src/udsactor/windows/service.py

https://github.com/crobinso/virtio-win-guest-tools-installer/find/master

 

[코멘트] 좋음
2020-04-08 08:36
 EnP  EnP님께 메시지 보내기EnP님을 내 주소록에 추가합니다.EnP님의 개인게시판 가기 
참고적으로 logonui.exe 가 떠 있어야 위의 명령들이 수행됩니다.

그리고 VDSMDPipe 파이프가 존재하는지도 체크해 보시고 수행해 보세요.
저장 취소
코멘트쓰기
  좋음   놀람   궁금   화남   슬픔   최고   침묵   시무룩   부끄럼   난감
* 코멘트는 500자 이내(띄어쓰기 포함)로 적어주세요.
목록 보기   지금 보고 계시는 글을 회원님의 my Mblog >> 스크랩에 넣어두고 다음에 바로 보실 수 있습니다.  
회사소개  |   개인정보취급방침  |  제휴문의  |   광고문의  |   E-Mail 무단수집거부  |   고객지원  |   이용안내  |   세금계산서
사업자등록번호 안내: 220-81-90008 / 통신판매업신고번호 제 2017-서울구로-0055호 / 대표: 홍영준, 서민호
08390, 서울시 구로구 디지털로32길 30, 1211호 / TEL. 02_6719_6200 / FAX. 02-6499-1910
Copyright ⓒ (주) 데브피아. All rights reserved.