링크 ux 에서 c 언어 에 프로 세 스 명령 행 인 자 를 숨 깁 니 다(예 를 들 어 비밀 번 호 를 입력 하 는 등 고위 험 작업)
3182 단어 숨기다프로 세 스 명령 행 인자
프로그램 을 시작 할 때 명령 행 인 자 를 사용 하면 설정 을 간소화 할 수 있 지만 사용자 이름 비밀 번 호 를 입력 하 는 등 작업 을 할 수 있 습 니 다.프로 세 스 를 통 해 도 구 를 보고 비밀 번 호 를 직접 보 는 것 은 안전 하지 않 습 니 다.
따라서 명령 행 매개 변수 중 일부 필드 를 어떻게 숨 기 는 지 연구 할 필요 가 있다.물론 설정 파일 을 만 드 는 것 도 좋 지만 실행 프로그램 에 추가 작업 을 추가 하 는 것 은 분명 하 다.프로필 을 편집 하고 저장 하 는 것 도 시간 이 좀 걸 릴 것 같 습 니 다.
나 는 인터넷 에서 찾 은 몇 가지 방안 과 자신 이 한 가지 방안 을 정리 하고 필 기 를 했다.
복사 argv 인자
이 방안 은 리 눅 스 의 C 언어 에서 만 검증 되 었 습 니 다.window 에 서 는 win32api 가 명령 행 인 자 를 가 져 오기 때 문 입 니 다.하지만 이것 을 설정 하지 않 았 습 니 다.window 에 서 는 이러한 소란 동작 을 지원 하지 않 을 것 입 니 다.
이 방안 은 프로그램 을 실행 할 때 argv 내용 을 수정 하 는 것 입 니 다.다음 소스 코드 는 참고 하 시기 바 랍 니 다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[]) {
int i,j;
for (i=1;i<argc;i++) {
for (j=strlen(argv[i])-1;j>=0;j--) {
argv[i][j] = 'x';
}
}
getchar();
return 0;
}
다음 그림 에서 보 듯 이 명령 행 인 자 는 숨겨 져 있 습 니 다.정상 적 인 프로그램 은 argv 를 메모리 변수 로 복사 한 다음 argv 를 즉시 복사 할 수 있 습 니 다.이 때 명령 행 인 자 를 정상적으로 사용 할 수도 있 고 인 자 를 숨 길 수도 있 습 니 다.표준 입력 가 져 오기
C 언어 에 숨겨 진 인자 가 이렇게 간단 한 것 을 보 았 지만,나 는 window 에서 C 언어 를 검증 하 는 데 실 패 했 습 니 다.wmic process where caption="a.exe"get caption 을 실행 하면 commandline/value 또는 명령 행 인 자 를 볼 수 있 습 니 다.
그래서 표준 입력 을 읽 어서 프로그램 전달 파 라 메 터 를 얻 으 려 면 프로그램 을 실행 한 후에 키보드 입력 파 라 메 터 를 두 드 려 야 하지만 echo 를 사용 하면 이 문 제 를 완벽 하 게 해결 할 수 있다 고 생각 했 습 니 다.
C 언어 가 오랫동안 사용 되 지 않 았 음 을 감안 하여 go 언어 로 인 스 턴 스 프로그램 을 쓰 는 것 이 좋 겠 습 니 다.참고 로 go 는 명령 행 매개 변수 원본 코드 를 가 져 옵 니 다.제 가 봐 도 window 와 Linux 를 포함 하여 값 을 수정 할 수 없습니다.
다음 과 같이 go 의 flag 라 이브 러 리 를 사용 하여 표준 입력 한 줄 의 내용 을 가 져 옵 니 다.명령 행 인 자 를 분석 하 는 데 사 용 됩 니 다.원본 코드 는 다음 과 같 습 니 다.
package main
import (
"bufio"
"flag"
"fmt"
"os"
"strings"
"time"
)
func main() {
fs := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
s := fs.String("s", "", "string")
i := fs.Int("i", 123, "int")
argv, _ := bufio.NewReader(os.Stdin).ReadString('
')
fs.Parse(strings.Fields(argv))
fmt.Println(*s, *i)
time.Sleep(time.Minute)
}
Linux 에서 테스트:window 에서 테스트:
총결산
안전 운행 프로그램,명령 행 인 자 를 숨 기 는 것 은 어떤 장면 에서 도 중요 하기 때문에 연 구 를 해 보 니 생각 보다 어렵 지 않 았 다.
주의해 야 할 것 은 명령 행 의 역 사 를 기록 할 리 눅 스에 대해 echo 를 사용 하 는 것 은 안전 하지 않다 는 것 이다.하지만 프로그램 을 실행 한 후에 명령 행 인 자 를 입력 할 수도 있 습 니 다.귀 찮 습 니 다.
어쨌든 가장 안전 한 것 은 암호 파일 을 만 드 는 것 이다.암호 파일 을 읽 으 면 다른 사람 이 이 암호 파일 이 없 으 면 안 되 거나 암호 파일 을 암호 화 하 는 것 이다.
암호 화 와 해 제 는 항상 상대 적 이 고 절대적 으로 안전 한 방안 이 없 으 며 상대 적 으로 안전 한 방안 만 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
목록 대화 상 자 를 팝 업 합 니 다. 목록 항목 을 선택 한 후 결 과 를 되 돌려 주 고 사라 집 니 다.사용자 가 목록 항목 을 선택 한 후에 사용자 가 선택 한 결 과 를 되 돌려 주 고 현재 목록 항목 이 사라 집 니 다. 이 2 단 코드 는 모니터 방법 밖 에 두 면 단 추 를 누 르 고 시간 을 선택 한 후에 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.