링크 ux 에서 c 언어 에 프로 세 스 명령 행 인 자 를 숨 깁 니 다(예 를 들 어 비밀 번 호 를 입력 하 는 등 고위 험 작업)

머리말
프로그램 을 시작 할 때 명령 행 인 자 를 사용 하면 설정 을 간소화 할 수 있 지만 사용자 이름 비밀 번 호 를 입력 하 는 등 작업 을 할 수 있 습 니 다.프로 세 스 를 통 해 도 구 를 보고 비밀 번 호 를 직접 보 는 것 은 안전 하지 않 습 니 다.
따라서 명령 행 매개 변수 중 일부 필드 를 어떻게 숨 기 는 지 연구 할 필요 가 있다.물론 설정 파일 을 만 드 는 것 도 좋 지만 실행 프로그램 에 추가 작업 을 추가 하 는 것 은 분명 하 다.프로필 을 편집 하고 저장 하 는 것 도 시간 이 좀 걸 릴 것 같 습 니 다.
나 는 인터넷 에서 찾 은 몇 가지 방안 과 자신 이 한 가지 방안 을 정리 하고 필 기 를 했다.
복사 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 를 사용 하 는 것 은 안전 하지 않다 는 것 이다.하지만 프로그램 을 실행 한 후에 명령 행 인 자 를 입력 할 수도 있 습 니 다.귀 찮 습 니 다.
어쨌든 가장 안전 한 것 은 암호 파일 을 만 드 는 것 이다.암호 파일 을 읽 으 면 다른 사람 이 이 암호 파일 이 없 으 면 안 되 거나 암호 파일 을 암호 화 하 는 것 이다.
암호 화 와 해 제 는 항상 상대 적 이 고 절대적 으로 안전 한 방안 이 없 으 며 상대 적 으로 안전 한 방안 만 있 습 니 다.

좋은 웹페이지 즐겨찾기