소스코드 은폐기법

blackridge의 이미지

서버에 소스코드를 남기지 않고 프로그램을 빌드할때 자주 써먹던 수법입니다.
악의적으로 사용하시면 안되어요...

File attachments: 
첨부파일 크기
Image icon 2013-01-03 오전 10.29.07.png12.15 KB
Forums: 
b1zh3er의 이미지

이게 무슨뜻이져

blackridge의 이미지

컴파일러의 입력으로 파일이 아닌 표준입력을 사용한다는 말이었습니다.
그러면 원격 서버에 소스코드가 전혀 남지않게 되죠.

저의 경우 makefile 에서 어떤 플랫폼에서 컴파일하는지 알기 위해서
소스코드없이 위의 예제와 같이 플랫폼을 결정하는 프로그램을 빌드하여
그 실행결과로 각 소스코드에 DEFINE 을 해주곤 했습니다.

잘 생각해보시면 왜 소스코드 은폐인지 알 수 있을겁니다...

사실 강좌에 올렸던 것은 히스토리에 남을 수 도 있는데 다음과 같이 하면 걱정없을 듯...

아시겠지만 cat | gcc ... 명령에서 입력을 끝내려면 ^D (콘트롤-D) 를 누르셔야 합니다.

댓글 첨부 파일: 
첨부파일 크기
Image icon scr14.png10.55 KB
oosap의 이미지

재미있네요.
그런데 gcc 에서 '-' 옵션의 설명을 보려면 어디를 봐야 할까요? gcc --help 해서는 설명이 없고 더 자세한 설명을 봐야 할 것 같은데요..
어쨌거나 '-' 옵션이 있어야만 표준입력으로 소스를 읽어들입니다. 마치 gcc 를 인터프리터 컴파일러인 것 처럼 써볼 수 있는 방법이네요..

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

ymir의 이미지

file 이 들어갈 자리에 - 를 쓰는 건, file 대신 stdin 또는 stdout 으로 대체하겠다는 일종의 convention 입니다.
그래서 많은 프로그램들이 - 를 쓰면서도, 그에 대해서는 특별히 언급하지 않는 경우가 많습니다.

zcat file.tar.gz | tar xvf -
tar cvf - file | gzip -9 > file.tar.gz

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

oosap의 이미지

아 그렇군요. 각 프로그램에서 구현한게 아니고 OS 에서 지원하는 기능인거네요!
아주아주 유용한 정보입니다! 제가 지금 하고 있던 개인프로젝트에서 쓸데 없는 내용을 구현할 뻔 했네요..
감사합니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

blackridge의 이미지

getopt.c 라고 다음과 같이 프로그램을 작성한 뒤

make getopt 로 getopt 프로그램을 만들고
./getopt -h - 를 실행하면 이렇게 나오죠...

$ ./getopt -h -
HELP!
--
ARGV[0]: "-"

그냥 getopt 함수로 해석되지 않는 입력인 겁니다.
즉 당연한 것이겠지만 - 파일명을 표준입력으로 처리하도록 하는 것은 직접 구현해야 한다는 말이죠.

댓글 첨부 파일: 
첨부파일 크기
Image icon 14002.png26.28 KB
oosap의 이미지

네 제가 잘못 알았군요. 재밌는 강좌였습니다.
감사합니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

oosap의 이미지

"실용적 예제로 배우는 리눅스 프로그래밍" 원저는 "Linux Programming by Example" 에 설명이 있습니다.

"POSIX 규칙" 이라고 번역했는데요, 그 중에 몇가지는 아래와 같습니다.

- 프로그램 이름은 2자 이상 9자 이하의 문자이어야 한다.
- 프로그램 이름은 소문자와 숫자로만 구성되어야 한다.
......
- 이름이 있는 파일을 읽거나 쓰는 프로그램은 단일 매개변수 '-'를 그 프로그램에 적절한 표준 입력 또는 표준 출력의 의미로 취급해야 한다.

위 마지막 구절이 이 경우에 대한 바로 그 convention 인 것 같습니다.

최근의 다양한 프로그램들이 이 POSIX 규칙을 모두 따르는 건 아니라는 설명도 있군요.

저는 프로그램 이름을 소문자와 숫자만 사용한다는 규칙도 눈에 들어옵니다. 대문자를 쓰면 쌩뚱맞게 되는 것이지요..

감사합니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

cleansugar의 이미지

키보드를 특수 제작해서 소스가 자동으로 입력되게 만들면 좋겠군요.

외부 서버에 있는 소스 파일을 파이프로 연결해도 되겠네요.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.