Windows 배치 (.bat) 파일에 서명하는 방법?


8

Windows 7을 실행 중이고 배치 파일을 실행하려고하면 "게시자를 확인할 수 없습니다.이 소프트웨어를 실행 하시겠습니까?"

따라서 코드 서명 인증서로 서명하려고하면 "SignTool 오류 :이 파일 형식을 인식 할 수 없으므로 서명 할 수 없습니다."라고 표시됩니다.

그래서 나는 바위 사이에 힘든 장소에 갇혀 있습니다. 메시지를 제거 할 수있는 방법이 있습니까?

스크린 샷


1
PowerShell 스크립트로 다시 작성하고 서명 하시겠습니까? 서명 된 배치 파일에 대해 들어 본 적이 없습니다.
Iszi

배치 파일에 서명하지 않습니다. 배치 파일이 서명 해야하는 다른 것을 호출하는 것처럼 들립니다.
Mark Allen

1
프롬프트의 출처는 무엇입니까? 즉, 제목 표시 줄과 아이콘은 무엇입니까? 실제로 Windows 프롬프트입니까, 아니면 타사 보안 프로그램의 프롬프트입니까? 스크린 샷을 찍어 질문에 추가하십시오.
Synetech


이 경우라면 @SeanCheshire, techturtle이 맞습니다. 네트워크의 모든 항목은 Windows에서 의심스러운 눈으로 볼 수 있으므로 로컬로 복사하거나 위치를 신뢰할 수있는 영역에 추가해야합니다.
Synetech

답변:


4

네트워크 위치에서 배치 파일 (또는 다른 실행 파일)을 실행하면 비슷한 메시지가 나타납니다. 이 경우 로컬 드라이브로 이동하는 것이 좋습니다. 다른 대안은 로컬 드라이브에서 별도의 배치 파일을 사용하여 네트워크에서 파일을 시작하는 것입니다. 실행 배치 파일에는 한 줄만 있으면됩니다.

@call \\network\folder\batch.bat

Windows는 로컬 파일을 닫지 않으며 해당 파일이 실행되면 문제없이 네트워크 버전을 호출 할 수 있습니다.


@Sosukodo, E:네트워크 매핑 드라이브입니까?
Synetech

Sort-of ;-) Mac 호스트에서 VirtualBox Windows 7 게스트를 실행하고 있습니다. E :는 VirtualBox 공유 폴더입니다. 공유 폴더가 네트워크 드라이브로 간주된다는 것을 알지 못했지만 언급했을 때 의미가 있습니다.

4

배치 파일에 서명하지 않습니다. 배치 파일이 서명 해야하는 다른 것을 호출하는 것처럼 들립니다.

편집 : 이제 배치 파일을 게시 했으므로 네트워크 위치 때문임을 알 수 있습니다. 또는 때로는 네트워크 위치에서 파일을 복사 하는 경우에만 발생합니다 . 후자의 경우 Windows가 대체 인터넷 스트림을 통해 다른 인터넷 영역에 있도록 파일에 태그를 지정했기 때문입니다. 이 두 가지 방법 중 하나를 해결할 수 있습니다.

  1. 인트라넷 영역의 Internet Explorer에서 보안 영역을 변경하십시오.
  2. type 명령을 사용하여 파일의 대체 데이터 스트림을 제거하십시오. Sysinternals의 streams.exe도 있습니다. type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat

3

현재보고있는 것은 다운로드 한 파일을 열려고 할 때마다 Windows가 제공하는 일반적인 프롬프트입니다. 파일을 다운로드 할 때 파일이 인터넷에서 제공되어 잠재적으로 위험하다는 것을 나타내는 플래그로 태그가 지정됩니다. 이러한 파일을 실행하려고하면 Windows는 신뢰할 수 있는지 확인하기 위해 유효한 서명이 있는지 확인합니다.

당신이 할 수있는 일은 파일의 속성에서 차단 해제 버튼 을 사용하여 파일에서 플래그를 제거하는 것입니다. 그 후에 Windows는 실행할 때마다 당신을 홀로 남겨 둡니다.

여기에 이미지 설명을 입력하십시오


문제는 배치 파일이 실행할 수있는 텍스트 파일이라는 것입니다. 텍스트 파일에 서명하는 것이 가능하지만 배치 파일의 경우 이진 데이터를 파일에 추가하면 결국 배치 파일의 경우 횡설수설로 인해 명령 해석기가이를 실행하려고 할 때 문제가 발생할 수 있습니다. 서명이 손상되어 서명을 주석 처리 할 수 ​​없습니다.

따라서 배치 파일 서명이 작동하지 않습니다.

시스템을 실행하려고 할 때 시스템에서 프롬프트를 표시하는 이유를 파악해야합니다. 기본적으로 Windows는 배치 파일을 실행하기 전에 묻지 않으므로 특수 정책이나 보안 프로그램이 차단 파일을 차단해야합니다. 보안 프로그램을 확인하여 제외를 비활성화하거나 추가 할 수있는 확인 설정이 있는지 확인하십시오.

또한 배치 파일의 내용을 검사하여 서명되지 않은 실행 파일이 실행 중인지 확인합니다 (다시 기본적으로 Windows는 실행 파일을 다운로드하지 않았거나 높은 권한이 필요하지 않은 경우 실행 파일을 요구하지 않으므로 설정을 확인하십시오).


실행이 서명에 도달하기 전에 스크립트를 종료 할 수 있어야합니다.
Sparr

@Sparr, 예, 아니오 goto :eof서명 앞에 a 를 삽입 하면 파일의 해시가 변경되고 서명이 유효하지 않게되어 파일이 손상되거나 안전하지 않은 것으로 표시됩니다. 파일 끝에 서명 하기 전에 줄을 줄 수 있고 작동해야한다고 가정합니다 . 흥미로운 실험…
Synetech

2
바이너리 에서조차 type 명령을 사용하여 파일의 태그를 해제 할 수 있습니다. 나는 항상 그것을한다. oldfile> newfile을 입력 한 다음 newfile> oldfile을 입력하면 ADS 태그가없는 oldfile이 생성됩니다.
Mark Allen

그는 영리하다. 기술적으로 플래그를 제거하는 것은 아닙니다. 그리고 속성 대화 상자 보다 플래그가 얼마나 빠르거나 더 편리한 지 잘 모르겠지만 작동합니다.
Synetech

0

.bat 파일을 PowerShell 스크립트로 변환 할 수도 있으며 signtool은 이러한 파일 서명을 지원합니다.


이것은 질문에 대한 답변을 제공하지 않습니다. 저자에게 비평을하거나 설명을 요청하려면 게시물 아래에 의견을 남겨주십시오. - 리뷰에서
Burgi

@Burgi 이것은 논쟁의 여지가 있습니다. 누군가가 전용 SIP를 작성하지 않으면 .bat 파일에 서명 할 수 없습니다. 현재 가장 가까운 솔루션은 서명 된 PowerShell 스크립트입니다.
Emmanuel Bourg

Fight Club의 규칙 # 42는 "해결 방법은 답변입니다." 이것이 답입니다. (그러나 다른 것들이 더 낫습니다.)
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.