전체 글 161

KMS 에뮬레이터를 통한 Windows 정품인증 방법

지난번에 KMS를 통한 정품 인증 매커니즘에 대해 쓴 글이 있었습니다. 오늘은 공식적인 KMS 호스트가 아닌 파이썬으로 작성된 KMS 에뮬레이터를 통한 activation 방법을 적어 보겠습니다. 소스는 https://github.com/Py-KMS-Organization/py-kms에, 문서는 py-kms.readthedocs.io에 있습니다.  원래 KMS 호스트에서는 VAMT를 설치해서 아래 화면처럼 라이센스를 관리할 수 있습니다. KMS 호스트가 MS 인증 서버와 내부 컴퓨터 사이의 프록시 역할을 해 줍니다. 그러나 py-kms 에뮬레이터는 어떤 요청에도 인증 승인 응답을 해 줍니다. 적법하게 구매하지 않고 사용하는 경우에는 문제가 될 수 있습니다. 실행 방법에는 몇 가지가 있는데, 가장 기본적인..

Catalyst 3850 스위치 공장초기화(패스워드 초기화)

1. Startup Configuration 없이 부팅하기 1.1. Mode 버튼 누르고 있기 1.2. Power Cycle 1.3. "switch: " 프롬프트가 나오면 Mode 버튼 release 1.4. switch: SWITCH_IGNORE_STARTUP_CFG=1 switch: boot 2. 필요한 설정 하기 > enable > copy startup-configration running-configuration > configure terminal # username 등 필요한 인증 설정 변경 # do write 3. Startup Configuration 활성화하기 3.1. Mode 버튼 누르고 있기 3.2. Power Cycle 3.3. "switch: " 프롬프트가 나오면 Mode 버튼 ..

근로소득원천징수영수증 vs 갑종근로소득에 대한 소득세원천징수확인서(갑근세 원천징수확인서)

1. 근로소득원천징수영수증 소득세법 제143조(근로소득에 대한 원천징수영수증의 발급)에 따라 소득세법 시행규칙 별지 제24호 서식을 사용합니다. 해당연도의 소득만 확인이 가능하며, 회사에서는 보통 급여업무를 담당하는 부서에서 발급해 줍니다. 2. 갑종근로소득에 대한 소득세원천징수확인서 2000년 4월 3일 시행규칙 개정으로 사라진 서식이나 회사에서는 여전히 발급해 줍니다. 올해가 지나지 않아도 발급이 가능하고, 당해 월급을 알 수 있기 때문에 소득심사나 근로여부 확인등을 위해 사용됩니다. 마찬가지로 급여업무를 담당하는 부서에서 발급해 줍니다. 과거에 "갑종근로소득에 대한 소득세"를 줄여서 갑근세라고 불렀는데, 지금은 "근로소득세"로 바꾸어 부른다고 합니다.

일상 2023.06.18

Active Directory 계정 생성/삭제 이벤트 기록 스크립트

1. 계정 생성 (4720) # Capture user account creation (4720) $str = wevtutil.exe qe Security /q:"*[System[(EventID=4720)]]" /rd:true /c:1 /f:XML | Out-String $stis = $str.IndexOf("SystemTime")+12 $stie = $str.IndexOf("'/>", $stis) $st = $str.Substring($stis, $stie-$stis) $unis = $str.IndexOf("TargetUserName")+16 $unie = $str.IndexOf("", $unis) $un = $str.Substring($unis, $unie-$unis) $snis = $str.Inde..

윈도우 애플리케이션 네트워크 통신 차단 방법

실행파일 경로 기반 $install = 'C:\Program Files (x86)\HNC\Office 2022\' $execs = ls -File -Recurse -Path $install -Include '*.exe' $execs | % { New-NetFirewallRule -Action Block -Direction Outbound -DisplayName $_.name -Group '_HNC' -Enabled True -Program $_.fullname } $execs | % { New-NetFirewallRule -Action Block -Direction Inbound -DisplayName $_.name -Group '_HNC' -Enabled True -Program $_.fullname ..

Windows 10, 11에서 VMware Workstation이 느리게 실행될 때 조치 방법

https://kb.vmware.com/s/article/2146361 "VMware Workstation and Device/Credential Guard are not compatible" error in VMware Workstation on Windows 10 host (2146361) This article provides steps to disable Hyper-v for a Windows 10 Host. kb.vmware.com 저의 경우에는 WSL2를 설치했기 때문에 기존에 CPL0 (Current Privilege Level 0)으로 실행되던 VMware Workstation이 ULM (User Level Mode)로 실행되어 느린 것이었습니다. ULM 모드에서는 가상머신이 VMware가..

[알고리즘][비트연산] 3. 비트 뒤집기

문제: 임의의 64비트 숫자의 비트열을 역순으로 만들어 리턴하라. 가장 단순한 방법은 2. 비트 스왑에서 사용한 해법을 모든 비트에 적용하는 것이다. 이 방법을 사용하면 입력의 크기 n에 대해 O(n)의 시간이 소요된다. public static long flip(long x) { int i = 63; for (int j = 0; j >> i) & 1) != ((x >>> j) & 1)) { x ^= (1L 16 & 0xFFFF)] >> 32 & 0xFFFF)] >> 48 & 0xFFFF)] ; } 연산에 걸리는 시간을 비교해 보면, long형 정수 100억 ~ 200억을 입력했을 때, 룩업 테이블 방법은 14.62초가 소요되었고, 비트 스왑 방법은 10분 정도 기다리다가 안끝나길래 종료시켰습니다. 연산..

[알고리즘][비트연산] 2. 비트 스왑

문제: 임의의 64비트 수 x의 i번째 비트와 j번째 비트를 교환하라. (0 ≤ i, j ≤ 63) 일반적인 배열 내에서 특정 위치의 값들을 스왑하기 위해서는 그 값을 저장할 변수가 필요하다. 그러나 비트는 어차피 0과 1밖에 없기 때문에, 두 위치의 비트가 다를 때만 해당 위치들의 비트를 반전시켜주면 문제를 상수 시간 내에 해결할 수 있다. public static long swap(long x, int i, int j) { if (((x >>> i) & 1) != ((x >>> j) & 1)) { x ^= 1L

[알고리즘][비트연산] 응용 문제 1-3

문제: 입력값이 2의 거듭제곱인지 확인하라. 2의 거듭제곱인 수는 1로 세팅된 비트가 하나뿐이다. 모든 비트를 검사하는 방법보다 빠른 방법이 존재할까? XOR? AND? OR? 보수? 2의 보수? 4비트 입력을 가지고 여러 가지 시도를 해 본 결과, 2의 거듭제곱, 즉 1로 세팅된 비트가 하나 뿐인 이진수는 x = ~((x-1) OR ~x))를 만족하는 반면, 1이 두 개 이상 포함된 수는 저 식을 만족하지 않는다. 아래 표는 4비트 입력에 대한 모든 경우의 수를 확인해 본 결과이다. x 0000 0001 0010 0011 0100 0101 0110 0111 x - 1 0000 0001 0010 0011 0100 0101 0110 ~x 1110 1101 1100 1011 1010 1001 1000 (x-..

[알고리즘][비트연산] 응용 문제 1-1

문제: 임의의 64비트 2진수가 주어지면, 1로 설정된 비트 중 가장 낮은 자리의 오른쪽에 위치하는 모든 비트를 1로 설정하라. 입력 예시: 0100...1000 출력 예시: 0100...1111 해설 이 문제는 이진수의 성질을 이용하면 간단히 풀린다. 입력에서 1을 뺀 값을 입력과 OR하면 된다. 입력에서 1을 빼면 가장 낮은 자리의 1이 내림되어 그보다 낮은 자리가 전부 1로 채워지기 때문이다. public static long carry(long x) { return ((x - 1) | x); }