Sunday, July 26, 2009

The Art Of Assembly Language




The Art of Assembly Language Programming, Randy Hyde's acclaimed text on assembly language programming, is the most-often recommended book on 80x86 assembly language programming in newsgroups, on web sites, and by word of mouth. The author presents assembly language from the high-level programmer's point of view, so you can start writing meaningful programs within days.




Download link 1
Download link 2

The Art of Computer Virus Research and Defense

The Art of Computer Virus Research and Defense



"The Art of Computer Virus Research and Defense" by Peter Szor
Publisher: Addison-Wesley Professional | Feb 13 2005 | ISBN: 0321304543 | CHM | 13.48 Mb | 744 Pages

Peter Szor takes you behind the scenes of anti-virus research, showing howthey are analyzed, how they spread, and--most importantly--how to effectivelydefend against them. This book offers an encyclopedic treatment of thecomputer virus, including: a history of computer viruses, virus behavior,classification, protection strategies, anti-virus and worm-blocking techniques,and how to conduct an accurate threat analysis. The Art of Computer VirusResearch and Defense entertains readers with its look at anti-virus research, butmore importantly it truly arms them in the fight against computer viruses.As one of the lead researchers behind Norton AntiVirus, the most popularantivirus program in the industry, Peter Szor studies viruses every day. Byshowing how viruses really work, this book will help security professionals andstudents protect against them, recognize them, and analyze and limit thedamage they can do


Saturday, July 25, 2009

ADAPTER DEMO MINI JAVA PROJECT (SOURCE CODE)

DATABASE SIMULATION JAVA PROJECT (SOURCE CODE)

DATABASE-SIMULATION


CONTENTS


Introduction
Need Analysis/Preliminary Investigation
Objectives
System Requirements/Methodology
Data Flow Diagrams
Input Forms
Coding
Output Forms
Unit Testing and System Testing
Limitations and Problems Faced
Fall Outs and Suggestions for the Future work
Conclusion
References/Bibliography
















INTRODUCTION
----------------------------------------------------------------------------------------------------------


















NEED ANALYSIS / PRELIMINARY INVESTIGATION


One of the most difficult tasks of the system analyst is identifying the real problem of the existing system. Without clear understanding of the problem in the system, any further work done will lead to the wastage of effort at a later stage.

The purpose of the Preliminary Investigation is to evaluate the project requests. It is the collection of the information that helps the committee members to evaluate the merits of the project request and make an informed judgment about the feasibility of the project.

My preliminary investigation was dome by Mrs. Geeta Dahiya and Ms. Pooja Gandhi. After their recommendations, I (Ruchika) move on to the further progress of the project.

















Project mission and objectives
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Mission

Database-Simulation project provides more security to the user by providing every user with username and password before creating its own database. After creating their own database, every user can create as many tables as he needed in their own database. The user can further open the database only if he knows the username and password.
Hence, this application has been designed to implement the overall working of a DATABASE in JAVA Platform.
With the help of this application, one can be able to create its own secured database in the computerized way rather than manually.

Objectives

Increased efficiency:-
This project increases efficiency of manpower with computer in various works. It does not require any creativity which can exhaust soon
Less Time Consuming:-
It is user friendly and less time consuming with bottom line option.
Reduction of Manpower:-
It serves a lot of desk work as there are no efforts in manipulating records.
Less use of paper work:-
In manual system a large number of files are required but in our system paper requirement is very less.
Save memory:-
In computerized systems we are able to save large amount of information.

System Requirements
-----------------------------------------------------------------------------------------------------------------------



Software Requirements

Microsoft Windows 2000/XP Operating System.
Java2 software development kit (J2sdk1.4 Onwards)





Hardware Requirements
------------------------------------------------------

· Processor : P-IV, 2.4GHz

· Hard Disk : 40 GB

· RAM : 256 MB

· CD-ROM









METHODOLOGIES

ABOUT JAVA

Java is a platform independent language that could be used to create software to be embedded in various consumer electronic devices, such as Microwave ovens and Remote Controls. With the emergence of the World Wide Web, java was propelled to the forefront of computer language design, because the Web, too, demanded portable programs.

Hence java was switched from consumer electronics to Internet Programming. Java derives much of its character from C and C++. In addition to the surface similarities , java shares some of the other attributes that helped make C and C++ successful. Because of the similarities between java and C++, it is tempting to think of java as simply the “Internet Version of C++”.

The Java 2 SDK is a development environment for building applications, applets, and components using the Java programming language.

The Java 2 SDK includes tools useful for developing and testing programs written in the Java programming language and running on the Java platform. These tools are designed to be used from the command line. Except for the applet viewer, these tools do not provide a graphical user interface.






Java Applets and Application

Java can be used to create two types of programs: Applications and Applets.

An Application is a program that runs on your computer, under the operating system of that computer.

An Applet is an application designed to be transmitted over the Internet and executed by a Java- compatible Web Browser. An applet is actually a tiny java program, dynamically downloaded across the Network, just like an image, sound file, or video clip. An important difference is that an applet is an intelligent program, not just an animation or media file.

java.awt. *:

This package contain AWT classes.It is one of the Java’s largest package.Some of the classes it contain are:
AWTEvent
BorderLayout
Button
Checkbox
CheckBoxGroup
Container
Event
Font
Frame
GraphicsDevices

java.awt.event. *:
Swings and applets are event-driven programs. Most events are passed to applets and swings in a variety of ways, with the specific methods depending upon the actual event. There are several types of events. All such events are supported by the java.awt.event. *

javax.swing.* :
Swing is a set of classes that provides more powerful and flexible components than are possible with the AWT .
The swing related classes are contained in javax.swing.tree like:
AbstractButton
ButtonGroup
ImageIcon
JApplet
JButton
JCheckBox
JComboBox
JLabel
JTable
JTree

java.io. *:
This header file provides support for I/O operations.It contain classes like:
BufferedInputStream
BufferedOutputStream
File
FileReader
FileWriter
OutputStream




java.io.File.* :

File class deals with files and the file system i.e, it does not specify how information is retrieved from or stored in files, it describes properties of a file itself .A file object is used to obtain or manipulate the information associated with a disk file .
The following are the constructors :
File(String directoryPath)
File(String directoryPath ,String filename)
File(File dirObj ,String filename)
File(URL uriObj)

java.util. *:

A collection is a group of objects .The addition of collections caused fundamental alterations in the structure and the architecture of many elements. This header file contains collection. Its some of the classes are:
AbtractCollection
Arrays
Collections
Date
Calender
Properties
Timer
StringTokenizer






ActionListener Interface :

This interface defines the actionPerformed() method that is invoked when an action event occurs. Its general form is:

Void actionPerformed(ActionEvent ae)

ItemListener Interface :

This interface defines the itemStateChanged() method that is invoked when the state of an item change.its general form is :

Void itemStateChanged(itamEvent ie)

Collections:

A collection is a group of objects. The addition of collections caused fundamental alterations in the structure and the alterations of many elements of many elements in java.util.

ContentPane :

The difference between applet and Japplet is that when adding a
Component to an instance of Japplet ,Do not invoke the add of
The applet. Instead call add() for the content pane of the
Japplet object.

Container getContentPane()

LayoutManager :

Each container object has a layout manager associated with
It. It is an instance of any class that implements the
Layoutmanger interface.The layout manger is set by the
setLayout() method is made, then thedefault layout manager is
used.
General forms:
Void setLayout(LayoutManager layoutObj)
Tables
A table is a collection of data about a specific topic, such as students or contacts. Using a separate table for each topic means that you store that data only once, which makes your database more efficient, and reduces data-entry errors.
Tables organize data into columns (called fields) and rows (called records).











Data Flow Diagram
------------------------------------------ ------------------------------------------------------------------------------------

Data-flow diagrams (DFD) are very effective Software-Engineering Tools. They help to identify various sub-modules of a program, the interaction between them and the flow of data between various modules. Going further down the hierarchy, a DFD also represents and explains the functioning of various modules separately.

A DFD is an important part of Software documentation as it keeps a record of what the software is doing and easier to understand than the actual programming code.

DFD Conventional Notations
Many conventional notations are defined for drawing DFD’s to maintain a standard format throughout the world. Certain primitive shapes are reserved for specific representations only. Some of these primitives are:


Data Storage



Processes



Data Flow



External Entity



DFD Hierarchy

DFD’s follow a hierarchy to completely define the program functionality. The hierarchy begins at Level 0 which is also known as context level.

Context level DFD: Context level provides an overview of the whole program. It represents the interaction of sub-modules and it also represents the interaction.


LEVEL 1 DFD: Next comes the level 1. There an be many level 1 DFD’s for a program, depending on the number of modules in the program. Each level 1 DFD represents the basic functioning of the module for which it is defined. If defines the data flow and user interaction of each module. It also defines various sub-modules of that module (if any) and their brief functionality.


FURTHER LEVELS: After level 1 further level can be defined to further explain the functioning of each module’s sub-modules and their sub-modules.














































ZERO (0) LEVEL DFD


MAIN LEVEL DFD









USER VERIFICATION

















CHECKING PROCESS
















Input Forms
------------------------------------------------------------------------------------


MAIIN FRAME









LOGIN FORM













TABLE CREATION FORMS

TABLE CREATION FRAME












FIELD GENERATION FORM


















DATA ENTRY FORM




















Juser.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Juser extends JFrame implements ActionListener,MenuListener {
JTextField field;
Container cp;
public Juser()
{
cp=getContentPane();
JMenuBar bar = new JMenuBar();
JMenu menu = new JMenu("USER");
JMenuItem tmp1,tmp2,tmp3,tmp4,tmp5,tmp6;
menu.addMenuListener(this);
tmp1 = new JMenuItem("NEW USER");
tmp1.addActionListener(this);
tmp1.setActionCommand("NEW USER");
menu.add(tmp1);

tmp2 = new JMenuItem("OPEN USER");
tmp2.addActionListener(this);
tmp2.setActionCommand("OPEN USER");
menu.add(tmp2);

tmp3 = new JMenuItem("DELETE USER");
tmp3.addActionListener(this);
tmp3.setActionCommand("DELETE USER");
menu.add(tmp3);

tmp4 = new JMenuItem("EXIT");
tmp4.addActionListener(this);
tmp4.setActionCommand("EXIT");
menu.add(tmp4);
bar.add(menu);
setJMenuBar(bar);
field = new JTextField(10);
field.addActionListener(this);
field.setActionCommand("text field activated");
cp.add( "South",field);
JMenu menu1 = new JMenu("SEARCH");
cp.setBackground(Color.lightGray);
cp.setLayout(new BorderLayout());
menu.addMenuListener(this);
tmp5 = new JMenuItem("BY NAME");
tmp5.addActionListener(this);
tmp5.setActionCommand("BY NAME");
menu1.add(tmp5);
bar.add(menu1);
}
public void actionPerformed(ActionEvent ae) {
String cmd;
cmd = ae.getActionCommand();
field.setText(cmd);
if(cmd.equals("NEW USER"))
{
Passnew pw1=new Passnew(this);
}

if(cmd.equals("OPEN USER"))
{
Passopen pw2=new Passopen(this);
}

if(cmd.equals("DELETE USER"))
{
Passdel pw3=new Passdel();
}
if(cmd.equals("EXIT"))
{
System.exit(0);
}
if(cmd.equals("BY NAME"))
{
search s1 = new search();
}
}
public void menuSelected(MenuEvent e)
{
}
public void menuDeselected(MenuEvent e)
{
}
public void menuCanceled(MenuEvent e)
{
}
public Dimension getPreferredSize()
{
return new Dimension(980,550);
}

public static void main(String a[])
{
Juser ju=new Juser();
ju.setForeground(Color.black);
ju.setBackground(Color.lightGray);
ju.addWindowListener(new WindowCloser());
ju.setSize(980,550);
ju.setVisible(true);
}
}

class WindowCloser extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
Window win = e.getWindow();
win.setVisible(false);
System.exit(0);
}
}





Passnew.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Passnew extends JFrame implements ActionListener
{
JTextField jtf1;
JPasswordField jtf2;
Container c ;
JLabel jl1,jl2,jl3,label;
JButton jb,jb1;
String user="",password="";
Juser j;
public Passnew(Juser j)
{
this.j=j;
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w){
setVisible(false);
}});

c =getContentPane();
c.setLayout(new FlowLayout());
jl1=new JLabel("ENTER USER NAME",JLabel.CENTER);
c.add(jl1);
jtf1=new JTextField(10);
c.add(jtf1);
jl2=new JLabel("ENTER PASSWORD",JLabel.CENTER);
c.add(jl2);
jtf2=new JPasswordField(10);
c.add(jtf2);
jb=new JButton("CREATE");
jb.addActionListener(this);
c.add(jb);
jb1=new JButton("CANCEL");
jb1.addActionListener(this);
c.add(jb1);
jl3=new JLabel("",JLabel.CENTER);
c.add(jl3);
c.setForeground(Color.black);
c.setBackground(Color.lightGray);
setBounds(250,200,300,150);
c.setLayout(new FlowLayout(FlowLayout.CENTER));
setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource()==jb)
{
Juser ju = new Juser();
user=jtf1.getText();
//String
password=jtf2.getText();
try{
File u=new File("c:/j2sdk1.4.1_01/bin/database/" +user);
if(u.exists()){
jl3.setText("USER ALREADY EXISTS");
}
else{
u.mkdir();
File p=new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+password);
p.mkdir();

Jtable jt=new Jtable(user,password);
}
}catch(Exception e){System.out.println(e);}
}
if(ae.getSource() == jb1)
{
setVisible(false);
}
}
}

Jtable.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Jtable extends JFrame implements ActionListener,MenuListener {
JTextField field,field1;
JLabel jl;
Container cp1;
String user="",password="";
public Jtable(String user,String password)
{
this.user=user;
this.password=password;
cp1=getContentPane();

////////////////////added from main//////////////////////////

cp1.setForeground(Color.black);
cp1.setBackground(Color.lightGray);
addWindowListener(new WindowCloser());
setSize(980,550);
setVisible(true);

/////////////////////////////////////////////////////////////
JMenuBar bar = new JMenuBar();
JMenu menu = new JMenu("TABLE");
JMenuItem tmp1,tmp2,tmp3,tmp4,tmp5,tmp6;
menu.addMenuListener(this);
tmp1 = new JMenuItem("NEW");
tmp1.addActionListener(this);
tmp1.setActionCommand("NEW");
menu.add(tmp1);

tmp2 = new JMenuItem("OPEN");
tmp2.addActionListener(this);
tmp2.setActionCommand("OPEN");
menu.add(tmp2);

tmp3 = new JMenuItem("DELETE");
tmp3.addActionListener(this);
tmp3.setActionCommand("DELETE");
menu.add(tmp3);

tmp4 = new JMenuItem("EXIT");
tmp4.addActionListener(this);
tmp4.setActionCommand("EXIT");
menu.add(tmp4);

bar.add(menu);
setJMenuBar(bar);
field = new JTextField(10);
field.addActionListener(this);
field.setActionCommand("text field activated");
cp1.add( "South",field);
JMenu menu1 = new JMenu("SEARCH");
cp1.setBackground(Color.lightGray);
cp1.setLayout(new BorderLayout());
menu.addMenuListener(this);
tmp5 = new JMenuItem("BY NAME");
tmp5.addActionListener(this);
tmp5.setActionCommand("BY NAME");
menu1.add(tmp5);
bar.add(menu1);
}
public void actionPerformed(ActionEvent ae) {
String cmd;
cmd = ae.getActionCommand();
field.setText(cmd);
if(cmd.equals("NEW"))
{
table2 t2=new table2(user,password);
}

if(cmd.equals("OPEN"))
{
table3 t3=new table3(user,password);
}
If(cmd.equals("DELETE"))
{
tabledel tt3 = new tabledel(user,password);
}
if(cmd.equals("EXIT"))
{
System.exit(0);
}
if(cmd.equals("BY NAME"))
{
searchtab st = new searchtab(user,password);
}
}
public void menuSelected(MenuEvent e)
{
}
public void menuDeselected(MenuEvent e)
{
}
public void menuCanceled(MenuEvent e)
{
}
public Dimension getPreferredSize()
{
return new Dimension(980,550);
}
class WindowCloser extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
Window win = e.getWindow();
win.setVisible(false);
System.exit(0);
}
}
}

Password.java
-------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class PassWord extends JPanel implements ActionListener
{
JTextField jtf;
public PassWord(Jframe frame)
{
setLayout(new FlowLayout(FlowLayout.CENTER));
JLabel j1=new JLabel("ENTER USER NAME",JLabel.CENTER);
add(j1);
jtf=new JTextField(10);
add(jtf);
JLabel j2=new JLabel("ENTER PASSWORD",JLabel.CENTER);
add(j2);
jtf=new JTextField(10);
add(jtf);
JButton jb=new JButton("CREATE");
jb.addActionListener(this);
add(jb);
jb=new JButton("CANCEL");
jb.addActionListener(this);
add(jb);
}

public void actionPerformed(ActionEvent ae)
{
}
public static void main(String a[])
{
JFrame frame = new JFrame("PassWord");
PassWord panel = new PassWord(frame);

frame.setForeground(Color.black);
frame.setBackground(Color.lightGray);
frame.addWindowListener(new WindowCloser());
frame.getContentPane().add(panel,"Center");
frame.setSize(300,150);
frame.setVisible(true);
}
}

class WindowCloser extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
Window win = e.getWindow();
win.setVisible(false);
System.exit(0);
}
}















Table1.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class table1 extends JFrame implements ActionListener
{
Object[] data = new Object[2];
String user="",password="";
String file1="";
Container c;
DefaultTableModel dtm;
JPanel p;
///////////////////////////////
JButton jb1;
JButton jb2;
JButton jb3;
JButton jb4;
JTable jtable;

//////////////////////////////////

public table1(String user,String password,String file1)
{
this.user=user;
this.password=password;
this.file1=file1;

//////////////////////////////////////////

jb1 = new JButton("CREATE NEW ROW");
jb2 = new JButton("CREATE NEW COLUMN");
jb3 = new JButton("SAVE");
jb4 = new JButton("CANCEL");

///////////////////////////////////////
p=new JPanel();
c=getContentPane();
dtm = new DefaultTableModel();
jtable = new JTable(dtm);

/////////////////////////////////////////////
p.add(jb1);
p.add(jb2);
p.add(jb3);
p.add(jb4);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jb4.addActionListener(this);

//////////////////////////////////////////
String s = new String("manu");
for(int col = 0;col<2;col++)
{
dtm.addColumn("column"+col);
}

for(int row=0;row<2;row++)
{
for(int col =0;col<2;col++)
{
data[col]=null;
}
dtm.addRow(data);
}
c.add(new JScrollPane(jtable),BorderLayout.CENTER);
c.add(p,BorderLayout.SOUTH);
setSize(800,550);
setVisible(true);
}

///////////////////////////////////////////////////////////

public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jb1) {
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
Object[] data = new Object[nc];

for (int col=0;col
{
data[col] = "";
}
dtm.addRow(data);
}
else if(e.getSource() == jb2)
{
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
dtm.addColumn("column" + nc);
}
else if(e.getSource() == jb3)
{
try{
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
File file = new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+password+"/"+file1+".txt");
FileOutputStream foi = new FileOutputStream(file,true);
PrintWriter pw=new PrintWriter(new OutputStreamWriter(foi));

for(int row=0;row
{
for(int col=0;col
{
String sss=(String)jtable.getValueAt(row,col);
pw.print(sss);
pw.print("*");
}
pw.print("!");
}
pw.close();

}
catch(Exception ee){}
}
else if(e.getSource() == jb4)
{
System.exit(0);
}
jtable.sizeColumnsToFit(0);
}
}






















Table2.java
-------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class table2 extends JFrame implements ActionListener
{
Object[] data = new Object[5];
Container c;
DefaultTableModel dtm;
JPanel p;
///////////////////////////////
JLabel jl1;
JTextField jtf1;
JButton jb1;
JButton jb3;
JButton jb4;
JTable jtable;
String user="",password="";
String file1 = "";
//////////////////////////////////
public table2(String user,String password)
{
this.user=user;
this.password=password;
//////////////////////////////////////////
jl1 = new JLabel("ENTER NAME OF TABLE");
jtf1 = new JTextField(20);
jb1 = new JButton("CREATE NEW ROW");
jb3 = new JButton("CREATE");
jb4 = new JButton("CANCEL");
///////////////////////////////////////
p=new JPanel();
c=getContentPane();
dtm = new DefaultTableModel();
jtable = new JTable(dtm);
/////////////////////////////////////////////
p.add(jl1);
p.add(jtf1);
p.add(jb1);
p.add(jb3);
p.add(jb4);
jtf1.addActionListener(this);
jb1.addActionListener(this);
jb3.addActionListener(this);
jb4.addActionListener(this);
//////////////////////////////////////////
for(int col = 0;col<2;col++)
{
if(col==0)
{
dtm.addColumn("FIELD TYPE ");
}
else
{
dtm.addColumn("DATA TYPE");
}
}
for(int row=0;row<2;row++)
{
for(int col = 0;col<2;col++)
{
data[col]="";
}
dtm.addRow(data);
}
c.add(new JScrollPane(jtable),BorderLayout.CENTER);
c.add(p,BorderLayout.SOUTH);
setSize(800,550);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jb1) {
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
Object[] data = new Object[nc];
for (int col=0;col
{
data[col] = "";
}
dtm.addRow(data);
}
else if(e.getSource() == jb3)
{
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
try {
file1 = jtf1.getText();
File f = new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+password+"/"+file1+".txt");
FileOutputStream foi = new FileOutputStream(f,true);
PrintWriter pw=new PrintWriter(new OutputStreamWriter(foi));
for(int row=0;row
{
for(int col = 0;col<2;col++)
{
String ssss=(String)jtable.getValueAt(row,col);
pw.println(ssss);
}
}
pw.close();
}
catch(Exception ee){}
table1 tt1 = new table1(user,password,file1);
}
else if(e.getSource() == jb4)
{
setVisible(false);
}
jtable.sizeColumnsToFit(0);
}
}


Table3.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class table3 extends JFrame implements ActionListener
{
Object[] data = new Object[2];
Container c;
int nc,nr,ncol;
String [][]str1=new String[50][50];
int count1=0,count2=0;
JLabel jl;
JTextField tf2;
JButton jb5;
JTable jt;
DefaultTableModel dtm=new DefaultTableModel();
///////////////////////////////
JPanel p;
JButton jb1;
JButton jb2;
JButton jb3;
JButton jb4;
JTable jtable = new JTable(dtm);
//////////////////////////////////
String user = "";
String password = "";
public table3(String user,String password)
{
this.user = user;
this.password = password;
//////////////////////////////////////////
jl = new JLabel("ENTER TABLE NAME");
tf2 = new JTextField(20);
jb5 = new JButton("OPEN");
jb1 = new JButton("ADD NEW ROW");
jb2 = new JButton("ADD NEW COLUMN");
jb3 = new JButton("SAVE");
jb4 = new JButton("CANCEL");

///////////////////////////////////////

p=new JPanel();
c=getContentPane();

/////////////////////////////////////////////
p.add(jl);
p.add(tf2);
p.add(jb5);
p.add(jb1);
p.add(jb2);
p.add(jb3);
p.add(jb4);
tf2.addActionListener(this);
jb5.addActionListener(this);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jb4.addActionListener(this);

//////////////////////////////////////////
c.add(p,BorderLayout.NORTH);

setSize(900,600);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jb5) {
try {
String file2 = new String();
file2 = tf2.getText();
File f = new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+password+"/"+file2+".txt");

FileInputStream inStream = new FileInputStream(f);
int inbyte = inStream.available();
byte inBuf[] = new byte[inbyte];
int byteread = inStream.read(inBuf,0,inbyte);
nc=0;nr=0;
System.out.println(byteread);
String str="";
for(int j=0;j < byteread;j++)
{
System.out.print((char)inBuf[j]+" ");
str= str + (char)inBuf[j];
if(inBuf[j] == 42 )
{
System.out.println(str);
str1[count1][count2]=str.substring(0,str.length()-1);
count2=count2+1;
if(inBuf[j+1]!=33)
{
str="";
}
nc=nc+1;
}

if(inBuf[j] == 33)
{
count1=count1+1;
count2=0;
str1[count1][count2]=str.substring(1,str.length()-1);
str="";
nr=nr+1;
}
}

inStream.close();
ncol = nc/nr;
System.out.println("no of column "+ncol + "no of row " + nr);
}
catch(Exception eee) {}

for(int col = 0;col
{
dtm.addColumn("column"+col);
}

for(int row=0;row
{
for(int col =0;col
{
String str2;
str2=str1[row][col];
data[col]=str2;
}
dtm.addRow(data);
}
c.add(new JScrollPane(jtable),BorderLayout.CENTER);
setVisible(false);
setVisible(true);
}
if(e.getSource() == jb1)
{
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
Object[] data = new Object[nc];
for (int col=0;col
{
data[col] = "0";
}
dtm.addRow(data);
}

if(e.getSource() == jb2)
{
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
dtm.addColumn("column" + nc);
}

if(e.getSource() == jb3)
{
try{
int nr = dtm.getRowCount();
int ncol = dtm.getColumnCount();
String file3 = new String();
file3 = tf2.getText();
File f3 = new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+password+"/"+file3+".txt");
FileOutputStream foi = new FileOutputStream(f3,true);
PrintWriter pw=new PrintWriter(new OutputStreamWriter(foi));

for(int row=0;row
{
for(int col=0;col
{
String sss=(String)jtable.getValueAt(row,col);
pw.print(sss);
pw.print("*");
}
pw.print("!");
}
pw.close();
}

catch(Exception ee){}
}

if(e.getSource() == jb4)
{
System.exit(0);
}
jtable.sizeColumnsToFit(0);
}
}






Tabopen.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class tabopen extends JFrame implements ActionListener
{

JTextField jtf1;
Container c ;
JLabel j1;
JButton jb,jb1;
Jtable j;
public tabopen(Jtable j)
{
this.j=j;
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w){
setVisible(false);
}});
c =getContentPane();
c.setLayout(new FlowLayout());
j1=new JLabel("ENTER TABLE NAME",JLabel.CENTER);
c.add(j1);
jtf1=new JTextField(10);
c.add(jtf1);
jb=new JButton("OPEN");
jb.addActionListener(this);
c.add(jb);
jb1=new JButton("CANCEL");
jb1.addActionListener(this);
c.add(jb1);
c.setForeground(Color.black);
c.setBackground(Color.lightGray);
setSize(300,150);
c.setLayout(new FlowLayout(FlowLayout.CENTER));
setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{

if(ae.getSource()==jb)
{
Jtable ju = new Jtable();
String user=jtf1.getText();
try
{
File u=new File(user);
if(u.exists())
{
}
Else
{
JLabel j2= new JLabel("TABLE DOES NOT EXIST",JLabel.CENTER);
c.add(j2);
}
}catch(Exception e){System.out.println(e);}

}
}
}









Tabledel.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class tabledel extends JFrame implements ActionListener
{
JTextField jtf1;
Container c ;
JLabel jl1,jl2,jl3,label;
JButton jb,jb1;
String user="",password="";
String tabname;
Juser j;

public tabledel(String user,String password)
{
this.user=user;
this.password=password;
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w){
setVisible(false);
}});

c =getContentPane();
c.setLayout(new FlowLayout());
jl1=new JLabel("ENTER TABLE NAME",JLabel.CENTER);
c.add(jl1);
jtf1=new JTextField(10);
c.add(jtf1);
jb=new JButton("DELETE");
jb.addActionListener(this);
c.add(jb);
jb1=new JButton("CANCEL");
jb1.addActionListener(this);
c.add(jb1);
jl3=new JLabel("",JLabel.CENTER);
c.add(jl3);

c.setForeground(Color.black);
c.setBackground(Color.lightGray);
setBounds(250,200,300,150);
c.setLayout(new FlowLayout(FlowLayout.CENTER));
setVisible(true);
}

public void actionPerformed(ActionEvent ae)
{
if(ae.getSource()==jb)
{
tabname=jtf1.getText();
try
{
File u=new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+password+"/"+tabname+".txt");
if(u.exists()){
u.delete();
jl3.setText(" TABLE DELETED ");

}
else{
jl3.setText("TABLE DOES NOT EXIST");
}
}
catch(Exception e){
System.out.println(e);
}
}
if(ae.getSource() == jb1)
{
setVisible(false);
}
}
}
Choose1.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class choose extends JApplet // implements ActionListener
{
Object[] data = new Object[5];
DefaultTableModel dtm = new DefaultTableModel();
JTable jtable = new JTable(dtm);

public void init()
{
for(int col = 0;col<2;col++)
{

if(col==0)
{
dtm.addColumn("FIELD'S NEME");
}
Else
{
dtm.addColumn("DATA TYPE");
}
}
for(int row=0;row<10;row++)
{
for(int col = 0;col<2;col++)
{
data[col]="";
}

dtm.addRow(data);
}
getContentPane().add(new JScrollPane(jtable),BorderLayout.CENTER);
getContentPane().add(new jpanel(),BorderLayout.SOUTH);
}
class jpanel extends JPanel implements ActionListener
{
JButton jb1 = new JButton("CREATE NEW ROW");
public jpanel()
{
add(jb1);
jb1.addActionListener(this);
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jb1) {
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
Object[] data = new Object[nc];
for (int col=0;col
{
data[col] = "";
}
dtm.addRow(data);
}
jtable.sizeColumnsToFit(0);
}
}
}











Dbase.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.io.*;
import java.awt.*;
import java.awt.event.*;

public class dbase extends Frame implements ActionListener,KeyListener
{
String user="",password="";
TextField t;
TextArea ta;
String pt="";
Panel pn;
Button change;
Prompt p;
help hp=null;
public dbase()
{
addWindowListener(new WindowAdapter()

{
public void WindowClosing(WindowEvent w)
{
System.exit(0);
}
});

t=new TextField();
add("south",t);
ta=new TextArea();
ta.setFont(new Font("arial",Font.BOLD,16));
add("Center",ta);
setSize(1000,580);
setVisible(true);
t.addActionListener(this);
pn=new Panel();
pn.setLayout(new FlowLayout());
change=new Button("CHANGE PROMPT");
change.setBounds(450,20,50,30);
pn.add(change);
add("North",pn);
change.addActionListener(this);
t.addKeyListener(this);
p=new prompt(this,"Enter Your Prompt",true);
}
public void actionPerformed(ActionEvent a)
{
if(a.getSource()==t)
{
try{
String s=t.getText ();
if(s.equals("clear screen"))
{
ta.setText("");
}

///////////CREATE USER///////////////

if(s.toLowerCase().startsWith("create user"))
{
user=s.toLowerCase().substring("create user".length(),s.indexOf("identified"));
user=user.trim();
System.out.println(user.length());
File f1=new File(user);
if(f1.exists())
ta.append("\n"+pt+">User Already Exists");
else
{
f1.mkdir();
password=s.substring(s.indexOf("identified")+14,s.length());
File pw=new File("c:/j2sdk1.4.1_01/bin/"+user+"/"+password);
pw.mkdir();
ta.append("\n"+pt+">user created");
try{
Runtime rt=Runtime.getRuntime();
Process p=rt.exec("insert.bat"+user);
Thread.sleep(3000);
f1.deleteOnExit();
}
catch(Exception e)
{
ta.setText(e.toString());
}
}
}

/////////////SELECT FROM TABLE////////////////

if(s.toLowerCase().startsWith("select from"))
{
ta.append("\n"+pt+".");
File f4=new File("c:/j2sdk1.4.1_01/bin/"+user+"/"+s.substring("select from".length(),s.length()));
if(f4.exists())
{
FileInputStream fout2=new FileInputStream(f4);
StreamTokenizer stk=new StreamTokenizer(fout2);
int tok;
while((tok=stk.nextToken())!= -1)
{
stk.eoIIsSignificant(true);
if(tok==StreamTokenizer.TT_EOL)
{
ta.append("\n");
}
if(tok==StreamTokenizer.TT_WORD)
{
String xx=stk.sval.replace(',','a');
ta.append(" "+xx);
}
if(tok==StreamTokenizer.TT_NUMBER)
{
double yy=stk.nval;
ta.append(" "+yy);
}
}
}
else
{
ta.append("\n"+pt+">Object NOT found");
}
}

////////////DROP TABLE//////////////

if(s.toLowerCase().startsWith("drop user"))
{
File f2 = new File(s.toLowerCase().Substring("drop user".length(),s.length()));
if(f2.exists())
{
f2.delete();
ta.append("\n"+pt+">user dropped");
}
else
ta.append("\n"+pt+">no such user");
}

///////////CONNECTING USER///////////////

if(s.toLowerCase().starttWith("connect"))

{
String misa = s.toLowerCase().Substring("connect".length(),s.indexOf('/'));
try
{
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("extract.bat"+misa.trim());
Thread.sleep(5000);
}
catch(Exception e) {}

File f3 = new File(s.toLowerCase().substring("connect".length(),s.indexOf('/').trim()));
user = s.toLowerCase().substring("connect".length(),s.indexOf('/').trim());
File ff = new
File("c:/j2sdk1.4.1_01/bin/"+user+"+s.toLowerCase().substring(s.indexOf('/')+1,s.length());
Syttem.out.println(f3.getPath()+"\n"+ff.getPath());
if(f3.exists()) {
if(ff.exists()) {
ta.append("\n"+pt+">connected");
}
else ta.append("\n wrong password");
}
Else
{
ta.append("\n+pt+"+s.substring("connect".length(),s.indexOf('/'))+"user does not exist");
}
}

//////////CREATING TABLES///////////////

String str = "";
if(s.toLowerCase().startsWith("create table"))
{
String xx = "c:/j2sdk1.4.1_01/bin/"+user+"/"+s.substring("create table".length,s.indexOf('('));
File f3 = new File("c:/j2sdk1.4.1_01/bin/"+user+"/"s.substring("create table".length()'s.indexOf('(')));

if(f3.exists())
ta.append("\n"+pt+">table already exusts");

else
{
File.OutputStream fout1 = new FileOutputStream(xx,true);
str = s.substring(s.indexOf('(')+1,indexOf(')'));
byte b[]=str.getBytes();
fout1.write(b);
ta.append("\n"+pt+">table created");


try {
File ujar = new File("c:/j2sdk1.4.1_01/bin/"+user);
Runtime rt = Runtime.getRuntime();
rt.exec("insert.bat"+user);
Thread.sleep(3000);
ujar.deleteOnExit();
}
catch(Exception e) {}
}
}

///////////DROPPING TABLE//////////////

if(s.toLowerCase().startWith("drop table"))
{
File f4 = new File("c:/j2sdk1.4.1_01/bin/"+user+"/"+s.substring("drop table".length(),s.length()));
if(f4.exists()) {
boolean b1 = f4.delete();
if(b1==true)
ta.append("\n"+pt+">table deleted");
}
else
{
ta.append("\n"+pt+">object not found");
}
try {
File ujar = new File(user);
Runtime rt = Runtime.getRuntime();
rt.exec("insert.bat"+user);
Thread.sleep(3000);
ujar.deleteOnExit();
}
catch(Exception e) {}
}


////////////INSERTING INTO TABLE//////////////

if(s.toLowerCase().startsWith("insert into"))
{

string xy = "c:/j2sdk1.4.1_01/bin" +user+ "/"+s.substring("insert into".length(),s.indexOf("values"));

File f4 = new File("c:/j2sdk1.4.1_01/bin" +user+ "/"+s.substring("insert into".length(),s.indexOf("values")));
if(f4.exists()) {
FileOutputStream fout2 = new FileOutputStream(xy,true);
str = s.substring(s.indexOf("values")+7,s.indexOf(')'));
byte bb[] = ("\n"+str).getBytes();
fout2.write(bb);
ta.append(\n"+pt+">inserted);
}
else
{
ta.append("\n"+pt+>object not found");
}
try
{
File ujar = new File("c:/j2sdk1.4.1_01/bin"+user);
Runtime rt = Runtime.getRuntime();
rt.exec("insert.bat"+user);
Thread.sleep(3000);
ujar.deleteOnExit();
}
catch(Exception e) {}
}
















Jpanel.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

class jpanel extends JPanel implements ActionListener {
JButton jb1 = new JButton("CREATE NEW ROW");
JButton jb2 = new JButton("CREATE NEW COLUMN");
public jpanel()
{
add(jb1);
add(jb2);
jb1.addActionListener(this);
jb2.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == jb1) {
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
Object[] data = new Object(nc);
for (int col=0;col
data[col] = "";
}
dtm.addRow(data);
}
else if(e.getSource() == jb2) {
int nr = dtm.getRowCount();
int nc = dtm.getColumnCount();
dtm.addColumn("colu"+col);
for (int row=0;row
dtm.setValueAt("");
data[col] = "";
}
dtm.addRow(data);
}
}

Passdel.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Passdel extends JFrame implements ActionListener
{

JTextField jtf1;
JPasswordField jtf2;
Container c ;
JLabel j1,j2,j3;
JButton jb,jb1;

public Passdel()

{
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w){
setVisible(false);
}});

c =getContentPane();
c.setLayout(new FlowLayout());
j1=new JLabel("ENTER USER NAME",JLabel.CENTER);
c.add(j1);
jtf1=new JTextField(10);
c.add(jtf1);
j2=new JLabel("ENTER PASSWORD",JLabel.CENTER);

c.add(j2);
jtf2=new JPasswordField(10);
c.add(jtf2);
jb=new JButton("DELETE");
jb.addActionListener(this);
c.add(jb);
jb1=new JButton("CANCEL");
jb1.addActionListener(this);
c.add(jb1);
j3 = new JLabel();
c.add(j3);

c.setForeground(Color.black);

c.setBackground(Color.lightGray);

setBounds(250,200,300,150);
c.setLayout(new FlowLayout(FlowLayout.CENTER));
setVisible(true);

}

public void actionPerformed(ActionEvent ae)
{

if(ae.getSource()==jb)
{

Juser ju = new Juser();

String user=jtf1.getText();
String pass=jtf2.getText();
try{
File u=new File("c:/j2sdk1.4.1_01/bin/database/"+user);
if(u.exists()){
{
File p=new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+pass);

if(p.exists()){

p.delete();
u.delete();
j3.setText(" USER DELETED ");
}
else
j3.setText(" WRONG PASSWORD ");
}
}
Else
{
j3.setText("USER DOES NOT EXISTS");
}
}
catch(Exception e){
System.out.println(e);
}

}
if(ae.getSource() == jb1){
setVisible(false);}
}
}















Passopen.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Passopen extends JFrame implements ActionListener
{

JTextField jtf1;
JPasswordField jtf2;
Container c ;
JLabel j1,j2,j3;
JButton jb,jb1;
Juser j;
Jtable jtable;
String password = "";
String user= "";
public Passopen(Juser j)
{
this.j=j;
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w){
setVisible(false);
}});

c =getContentPane();
c.setLayout(new FlowLayout());
j1=new JLabel("ENTER USER NAME",JLabel.CENTER);
c.add(j1);
jtf1=new JTextField(10);
c.add(jtf1);
j2=new JLabel("ENTER PASSWORD",JLabel.CENTER);
c.add(j2);
jtf2=new JPasswordField(10);
c.add(jtf2);
jb=new JButton("OPEN");
jb.addActionListener(this);
c.add(jb);
jb1=new JButton("CANCEL");
jb1.addActionListener(this);
c.add(jb1);
j3=new JLabel();
c.add(j3);

c.setForeground(Color.black);
c.setBackground(Color.lightGray);
setBounds(250,200,300,150);
c.setLayout(new FlowLayout(FlowLayout.CENTER));
setVisible(true);
}

public void actionPerformed(ActionEvent ae) {

if(ae.getSource()==jb)
{

// String
user=jtf1.getText();
// String
password=jtf2.getText();

try{
File u = new File("c:/j2sdk1.4.1_01/bin/database/"+user);

if(u.exists()){
File p = new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+password);

if(p.exists())
jtable = new Jtable(user,password);

else
j3.setText("YOUR PASSWORD IS WRONG");

}
else
j3.setText("USER DOES NOT EXISTS");
}
catch(Exception e){System.out.println(e);}
}
if(ae.getSource()==jb1) {
setVisible(false);}

}
}





















Search.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class search extends JFrame implements ActionListener
{

JTextField jtf1;
Container c ;
JLabel jl1,jl2,jl3,label;
JButton jb,jb1;
String username;
Juser j;
public search()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent w)
{
setVisible(false);
}});

c =getContentPane();
c.setLayout(new FlowLayout());
jl1=new JLabel("ENTER USER NAME",JLabel.CENTER);
c.add(jl1);
jtf1=new JTextField(10);
c.add(jtf1);
jb=new JButton("SEARCH");
jb.addActionListener(this);
c.add(jb);
jb1=new JButton("CANCEL");
jb1.addActionListener(this);
c.add(jb1);
jl3=new JLabel("",JLabel.CENTER);
c.add(jl3);

c.setForeground(Color.black);
c.setBackground(Color.lightGray);
setBounds(250,200,300,150);
c.setLayout(new FlowLayout(FlowLayout.CENTER));
setVisible(true);
}

public void actionPerformed(ActionEvent ae)
{

if(ae.getSource()==jb)
{
username=jtf1.getText();
//String
try{

File u=new File("c:/j2sdk1.4.1_01/bin/database/"+"/"+username);

if(u.exists())
{
jl3.setText(" USER EXISTS ");
}
else{
jl3.setText("USER DOES NOT EXIST");
}

}catch(Exception e){System.out.println(e);}

}
if(ae.getSource() == jb1)
{
setVisible(false);
}
}
}

Searchtab.java
--------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class searchtab extends JFrame implements ActionListener
{

JTextField jtf1;
Container c ;
JLabel jl1,jl2,jl3,label;
JButton jb,jb1;
String user="",password="";
String tabname;
Juser j;

public searchtab(String user,String password)
{
this.user=user;
this.password=password;
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w){
setVisible(false);
}});

c =getContentPane();
c.setLayout(new FlowLayout());
jl1=new JLabel("ENTER TABLE NAME",JLabel.CENTER);
c.add(jl1);
jtf1=new JTextField(10);
c.add(jtf1);
jb=new JButton("SEARCH");
jb.addActionListener(this);
c.add(jb);
jb1=new JButton("CANCEL");
jb1.addActionListener(this);
c.add(jb1);
jl3=new JLabel("",JLabel.CENTER);
c.add(jl3);

c.setForeground(Color.black);
c.setBackground(Color.lightGray);
setBounds(250,200,300,150);
c.setLayout(new FlowLayout(FlowLayout.CENTER));
setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{

if(ae.getSource()==jb)
{

tabname=jtf1.getText();
//String
try
{
File u=new File("c:/j2sdk1.4.1_01/bin/database/"+user+"/"+password+"/"+tabname+".txt");

if(u.exists())
{
jl3.setText(" TABLE EXISTS ");
}
else{
jl3.setText("TABLE DOES NOT EXIST");
}
}catch(Exception e){System.out.println(e);}

}
if(ae.getSource() == jb1)
{
setVisible(false);
}
}
}
OUTPUT FORMS
------------------------------------------------------------------------------------

TABLE OUTPUT












STORED DATABASE













SEARCHING USER BY NAME

















DELETING USER














SECURED DATABASE














TESTING
------------------------------------------------------------------------------------


Testing each module individually is called UNIT TESTING.
I have tested each module individually for its proper functioning.

Testing the software after combining the different modules is called SYSTEM TESTING.
I have integrated all the modules properly and tested the software for its proper functioning.

Running the system under live or realistic data by the actual user is called Acceptance Testing.
Realistic data that was given to our project is all the inputs that are been required by any user. For eg. I have added all the features that must be required to create a database.

We have also carried out the execution of our project by many of our friends and Ms. Pooja Gandhi (Java Faculty)

After being giving realistic conditions to our project, we have found the performance of our project quite satisfactory. This project can be implemented by any user.









Limitations and problems faced
-- ---------------------------------------------------------------------------------- -----------------------------------------------------------------------------------

LIMITATION:-

























Fall outs and suggestions for the
future work


Fall Outs:-

1. Any small working Institute like BMIET, APTECH, CMC Computer
center,TATA Infotech etc...
2. It can be beneficial for many Coaching Centers who have been teaching
many courses.


Suggestions for the Future work:-

1. This project can be extended for an Institute running on a large scale.
For e.g- NIIT.
2. Various facilities like college administrative work and whole student management system can be integrated in a single platform .

3. Society comprises of students and candidates who have been learning in
many Institutes. They also needed to access many kind of information at
various stages. If a manual procedure is being used by these Institutes,then
these students may face many difficulties like Institute time, holidays etc...




Conclusion
------------------------------------------------------------------------------------

Rather than using a manual procedure for an Institute, if this computerized project is being implemented then all the students, faculty members and Institute members like Administator can eliminate all the difficulties and can run the Institute successfully in an effective way.

Like students can access their information in a shorter period of time, faculty members convey their messages more effectively and Administrator himself can manage the complete /College Institute in a much better way.






















Books Referred


Java 2 The Complete Reference
-Tata McGraw Hill Publication.
Fundamentals of Java
-E Balaguruswamy

Other References

Microsoft Encyclopedia Encarta 2002.
http://www.javasun.com
http://www.google.com
http://www.altavista.net
http://www.download.com


Sunday, July 19, 2009

CHANGE NAME OF RECYCLE BIN

CHANGE NAME OF RECYCLE BIN
To change the name of the Recycle Bin desktop icon,
follow these steps
goto RUN type regedit
and then go to:

HKEY_CLASSES_ROOT/CLSID/{645FF040-5081-101B-9F08-00AA002F954E}

and change the name "Recycle Bin" to whatever you want (don't type any quotes).

NOTEPAD HACKS(BATCH FILES AND VBSCRIPTS)

NOTEPAD HACKS(BATCH FILES AND VBSCRIPTS)

10 notepad tricks to fool ur frnds
1>
Cycle a message in your friend's computer:

Type :

@ECHO off
:Begin
msg * Hi
msg * Are you having fun?
msg * I am!
msg * Lets have fun together!
msg * Because you have been o-w-n-e-d
GOTO BEGIN

Save it as "Anything.BAT" and send it.

2>
Convey your friend a lil' message and shut down his / her computer:
Type :

@echo off
msg * I don't like you
shutdown -c "Error! You are too stupid!" -s

Save it as "Anything.BAT" in All Files and send it.

3>
Toggle your friend's Caps Lock button simultaneously:
Type :

Set wshShell =wscript.CreateObject("WScript.Shell")
do
wscript.sleep 100
wshshell.sendkeys "{CAPSLOCK}"
loop

Save it as "Anything.VBS" and send it.

4>
Continually pop out your friend's CD Drive. If he / she has more than one, it pops out all of them!
Type :

Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
do
if colCDROMs.Count >= 1 then
For i = 0 to colCDROMs.Count - 1
colCDROMs.Item(i).Eject
Next
For i = 0 to colCDROMs.Count - 1
colCDROMs.Item(i).Eject
Next
End If
wscript.sleep 5000
loop

Save it as "Anything.VBS" and send it.

5>
Frustrate your friend by making this VBScript hit Enter simultaneously:
Type :

Set wshShell = wscript.CreateObject("WScript.Shell")
do
wscript.sleep 100
wshshell.sendkeys "~(enter)"
loop

Save it as "Anything.VBS" and send it.

6>
Open Notepad, slowly type "Hello, how are you? I am good thanks" and freak your friend out:
Type :

WScript.Sleep 180000
WScript.Sleep 10000
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "notepad"
WScript.Sleep 100
WshShell.AppActivate "Notepad"
WScript.Sleep 500
WshShell.SendKeys "Hel"
WScript.Sleep 500
WshShell.SendKeys "lo "
WScript.Sleep 500
WshShell.SendKeys ", ho"
WScript.Sleep 500
WshShell.SendKeys "w a"
WScript.Sleep 500
WshShell.SendKeys "re "
WScript.Sleep 500
WshShell.SendKeys "you"
WScript.Sleep 500
WshShell.SendKeys "? "
WScript.Sleep 500
WshShell.SendKeys "I a"
WScript.Sleep 500
WshShell.SendKeys "m g"
WScript.Sleep 500
WshShell.SendKeys "ood"
WScript.Sleep 500
WshShell.SendKeys " th"
WScript.Sleep 500
WshShell.SendKeys "ank"
WScript.Sleep 500
WshShell.SendKeys "s! "

Save it as "Anything.VBS" and send it.

7>
Frustrate your friend by making this VBScript hit Backspace simultaneously:
Type :

MsgBox "Let's go back a few steps"
Set wshShell =wscript.CreateObject("WScript.Shell")
do
wscript.sleep 100
wshshell.sendkeys "{bs}"
loop

Save it as "Anything.VBS" and send it.

8>
Hack your friend's keyboard and make him type "You are a fool" simultaneously:
Type :

Set wshShell = wscript.CreateObject("WScript.Shell")
do
wscript.sleep 100
wshshell.sendkeys "You are a fool."
loop

Save it as "Anything.VBS" and send it.

9>
Open Notepad continually in your friend's computer:
Type :

@ECHO off
:top
START %SystemRoot%\system32\notepad.exe
GOTO top

Save it as "Anything.BAT" and send it.


10>
Hard prank: Pick your poison batch file. It asks your friend to choose a number between 1-5 and then does a certain action:

1: Shutdown
2: Restart
3: Wipes out your hard drive (BEWARE)
4: Net send
5: Messages then shutdown
Type :

@echo off
title The end of the world
cd C:\
:menu
cls
echo I take no responsibility for your actions. Beyond this point it is you that has the power to kill yourself. If you press 'x' then your PC will be formatted. Do not come crying to me when you fried your computer or if you lost your project etc...
pause
echo Pick your poison:
echo 1. Die this way (Wimp)
echo 2. Die this way (WIMP!)
echo 3. DO NOT DIE THIS WAY
echo 4. Die this way (you're boring)
echo 5. Easy way out
set input=nothing
set /p input=Choice:
if %input%==1 goto one
if %input%==2 goto two

Save it as "Anything.BAT" and send it.

You might wanna have to change the Icon of the file before sending it to your friend, so right click the file, click Properties, click on the 'Change' Icon and change the icon from there.

NOTEPAD HACKS(BATCH FILES AND VBSCRIPTS)

NOTEPAD HACKS(BATCH FILES AND VBSCRIPTS)

10 notepad tricks to fool ur frnds
1>
Cycle a message in your friend's computer:

Type :

@ECHO off
:Begin
msg * Hi
msg * Are you having fun?
msg * I am!
msg * Lets have fun together!
msg * Because you have been o-w-n-e-d
GOTO BEGIN

Save it as "Anything.BAT" and send it.

2>
Convey your friend a lil' message and shut down his / her computer:
Type :

@echo off
msg * I don't like you
shutdown -c "Error! You are too stupid!" -s

Save it as "Anything.BAT" in All Files and send it.

3>
Toggle your friend's Caps Lock button simultaneously:
Type :

Set wshShell =wscript.CreateObject("WScript.Shell")
do
wscript.sleep 100
wshshell.sendkeys "{CAPSLOCK}"
loop

Save it as "Anything.VBS" and send it.

4>
Continually pop out your friend's CD Drive. If he / she has more than one, it pops out all of them!
Type :

Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
do
if colCDROMs.Count >= 1 then
For i = 0 to colCDROMs.Count - 1
colCDROMs.Item(i).Eject
Next
For i = 0 to colCDROMs.Count - 1
colCDROMs.Item(i).Eject
Next
End If
wscript.sleep 5000
loop

Save it as "Anything.VBS" and send it.

5>
Frustrate your friend by making this VBScript hit Enter simultaneously:
Type :

Set wshShell = wscript.CreateObject("WScript.Shell")
do
wscript.sleep 100
wshshell.sendkeys "~(enter)"
loop

Save it as "Anything.VBS" and send it.

6>
Open Notepad, slowly type "Hello, how are you? I am good thanks" and freak your friend out:
Type :

WScript.Sleep 180000
WScript.Sleep 10000
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "notepad"
WScript.Sleep 100
WshShell.AppActivate "Notepad"
WScript.Sleep 500
WshShell.SendKeys "Hel"
WScript.Sleep 500
WshShell.SendKeys "lo "
WScript.Sleep 500
WshShell.SendKeys ", ho"
WScript.Sleep 500
WshShell.SendKeys "w a"
WScript.Sleep 500
WshShell.SendKeys "re "
WScript.Sleep 500
WshShell.SendKeys "you"
WScript.Sleep 500
WshShell.SendKeys "? "
WScript.Sleep 500
WshShell.SendKeys "I a"
WScript.Sleep 500
WshShell.SendKeys "m g"
WScript.Sleep 500
WshShell.SendKeys "ood"
WScript.Sleep 500
WshShell.SendKeys " th"
WScript.Sleep 500
WshShell.SendKeys "ank"
WScript.Sleep 500
WshShell.SendKeys "s! "

Save it as "Anything.VBS" and send it.

7>
Frustrate your friend by making this VBScript hit Backspace simultaneously:
Type :

MsgBox "Let's go back a few steps"
Set wshShell =wscript.CreateObject("WScript.Shell")
do
wscript.sleep 100
wshshell.sendkeys "{bs}"
loop

Save it as "Anything.VBS" and send it.

8>
Hack your friend's keyboard and make him type "You are a fool" simultaneously:
Type :

Set wshShell = wscript.CreateObject("WScript.Shell")
do
wscript.sleep 100
wshshell.sendkeys "You are a fool."
loop

Save it as "Anything.VBS" and send it.

9>
Open Notepad continually in your friend's computer:
Type :

@ECHO off
:top
START %SystemRoot%\system32\notepad.exe
GOTO top

Save it as "Anything.BAT" and send it.


10>
Hard prank: Pick your poison batch file. It asks your friend to choose a number between 1-5 and then does a certain action:

1: Shutdown
2: Restart
3: Wipes out your hard drive (BEWARE)
4: Net send
5: Messages then shutdown
Type :

@echo off
title The end of the world
cd C:\
:menu
cls
echo I take no responsibility for your actions. Beyond this point it is you that has the power to kill yourself. If you press 'x' then your PC will be formatted. Do not come crying to me when you fried your computer or if you lost your project etc...
pause
echo Pick your poison:
echo 1. Die this way (Wimp)
echo 2. Die this way (WIMP!)
echo 3. DO NOT DIE THIS WAY
echo 4. Die this way (you're boring)
echo 5. Easy way out
set input=nothing
set /p input=Choice:
if %input%==1 goto one
if %input%==2 goto two

Save it as "Anything.BAT" and send it.

You might wanna have to change the Icon of the file before sending it to your friend, so right click the file, click Properties, click on the 'Change' Icon and change the icon from there.

Saturday, July 11, 2009

EVOLUTION AND HISTORY OF COMPUTER VIRUSES

EVOLUTION AND HISTORY OF COMPUTER VIRUSES





part 1


Like any other field in computer science, viruses have evolved -a great deal indeed- over the years. In the series of press releases which start today, we will look at the origins and evolution of malicious code since it first appeared up to the present.

Going back to the origin of viruses, it was in 1949 that Mathematician John Von Neumann described self-replicating programs which could resemble computer viruses as they are known today. However, it was not until the 60s that we find the predecessor of current viruses. In that decade, a group of programmers developed a game called Core Wars, which could reproduce every time it was run, and even saturate the memory of other players’ computers. The creators of this peculiar game also created the first antivirus, an application named Reeper, which could destroy copies created by Core Wars.

However, it was only in 1983 that one of these programmers announced the existence of Core Wars, which was described the following year in a prestigious scientific magazine: this was actually the starting point of what we call computer viruses today.

At that time, a still young MS-DOS was starting to become the preeminent operating system worldwide. This was a system with great prospects, but still many deficiencies as well, which arose from software developments and the lack of many hardware elements known today. Even like this, this new operating system became the target of a virus in 1986: Brain, a malicious code created in Pakistan which infected boot sectors of disks so that their contents could not be accessed. That year also saw the birth of the first Trojan: an application called PC-Write.

Shortly after, virus writers realized that infecting files could be even more harmful to systems. In 1987, a virus called Suriv-02 appeared, which infected COM files and opened the door to the infamous viruses Jerusalem or Viernes 13. However, the worst was still to come: 1988 set the date when the “Morris worm” appeared, infecting 6,000 computers.

From that date up to 1995 the types of malicious codes that are known today started being developed: the first macro viruses appeared, polymorphic viruses … Some of these even triggered epidemics, such as MichaelAngelo. However, there was an event that changed the virus scenario worldwide: the massive use of the Internet and e-mail. Little by little, viruses started adapting to this new situation until the appearance, in 1999, of Melissa, the first malicious code to cause a worldwide epidemic, opening a new era for computer viruses.



part 2



This second installment of ‘The evolution of viruses’ will look at how malicious code used to spread before use of the Internet and e-mail became as commonplace as it is today, and the main objectives of the creators of those earlier viruses.
Until the worldwide web and e-mail were adopted as a standard means of communication the world over, the main mediums through which viruses spread were floppy disks, removable drives, CDs, etc., containing files that were already infected or with the virus code in an executable boot sector.

When a virus entered a system it could go memory resident, infecting other files as they were opened, or it could start to reproduce immediately, also infecting other files on the system. The virus code could also be triggered by a certain event, for example when the system clock reached a certain date or time. In this case, the virus creator would calculate the time necessary for the virus to spread and then set a date –often with some particular significance- for the virus to activate. In this way, the virus would have an incubation period during which it didn’t visibly affect computers, but just spread from one system to another waiting for ‘D-day’ to launch its payload. This incubation period would be vital to the virus successfully infecting as many computers as possible.

One classic example of a destructive virus that lay low before releasing its payload was CIH, also known as Chernobyl. The most damaging version of this malicious code activated on April 26, when it would try to overwrite the flash-BIOS, the memory which includes the code needed to control PC devices. This virus, which first appeared in June 1998, had a serious impact for over two years and still continues to infect computers today.

Because of the way in which they propagate, these viruses spread very slowly, especially in comparison to the speed of today’s malicious code. Towards the end of the Eighties, for example, the Friday 13th (or Jerusalem) virus needed a long time to actually spread and continued to infect computers for some years. In contrast, experts reckon that in January 2003, SQLSlammer took just ten minutes to cause global communication problems across the Internet.

Notoriety versus stealth

For the most part, in the past, the activation of a malicious code triggered a series of on screen messages or images, or caused sounds to be emitted to catch the user’s attention. Such was the case with the Ping Pong virus, which displayed a ball bouncing from one side of the screen to another. This kind of elaborate display was used by the creator of the virus to gain as much notoriety as possible. Nowadays however, the opposite is the norm, with virus authors trying to make malicious code as discreet as possible, infecting users’ systems without them noticing that anything is amiss.



part 3


This third installment of ‘The evolution of viruses’ will look at how the Internet and e-mail changed the propagation techniques used by computer viruses.

Internet and e-mail revolutionized communications. However, as expected, virus creators didn’t take long to realize that along with this new means of communication, an excellent way of spreading their creations far and wide had also dawned. Therefore, they quickly changed their aim from infecting a few computers while drawing as much attention to themselves as possible, to damaging as many computers as possible, as quickly as possible. This change in strategy resulted in the first global virus epidemic, which was caused by the Melissa worm.

With the appearance of Melissa, the economic impact of a virus started to become an issue. As a result, users -above all companies- started to become seriously concerned about the consequences of viruses on the security of their computers. This is how users discovered antivirus programs, which started to be installed widely. However, this also brought about a new challenge for virus writers, how to slip past this protection and how to persuade users to run infected files.

The answer to which of these virus strategies was the most effective came in the form of a new worm: Love Letter, which used a simple but effective ruse that could be considered an early type of social engineering. This strategy involves inserting false messages that trick users into thinking that the message includes anything, except a virus. This worm’s bait was simple; it led users to believe that they had received a love letter.

This technique is still the most widely used. However, it is closely followed by another tactic that has been the center of attention lately: exploiting vulnerabilities in commonly used software. This strategy offers a range of possibilities depending on the security hole exploited. The first malicious code to use this method –and quite successfully- were the BubbleBoy and Kakworm worms. These worms exploited a vulnerability in Internet Explorer by inserting HTML code in the body of the e-mail message, which allowed them to run automatically, without needing the user to do a thing.

Vulnerabilities allow many different types of actions to be carried out. For example, they allow viruses to be dropped on computers directly from the Internet -such as the Blaster worm-. In fact, the effects of the virus depend on the vulnerability that the virus author tries to exploit.


part 4


In the early days of computers, there were relatively few PCs likely to contain “sensitive” information, such as credit card numbers or other financial data, and these were generally limited to large companies that had already incorporated computers into working processes.

In any event, information stored in computers was not likely to be compromised, unless the computer was connected to a network through which the information could be transmitted. Of course, there were exceptions to this and there were cases in which hackers perpetrated frauds using data stored in IT systems. However, this was achieved through typical hacking activities, with no viruses involved.

The advent of the Internet however caused virus creators to change their objectives, and, from that moment on, they tried to infect as many computers as possible in the shortest time. Also, the introduction of Internet services -like e-banking or online shopping- brought in another change. Some virus creators started writing malicious codes not to infect computers, but, to steal confidential data associated to those services. Evidently, to achieve this, they needed viruses that could infect many computers silently.

Their malicious labor was finally rewarded with the appearance, in 1986, of a new breed of malicious code generically called “Trojan Horse”, or simply “Trojan”. This first Trojan was called PC-Write and tried to pass itself off as the shareware version of a text processor. When run, the Trojan displayed a functional text processor on screen. The problem was that, while the user wrote, PC-Write deleted and corrupted files on the computers’ hard disk.

After PC-Write, this type of malicious code evolved very quickly to reach the stage of present-day Trojans. Today, many of the people who design Trojans to steal data cannot be considered virus writers but simply thieves who, instead of using blowtorches or dynamite have turned to viruses to commit their crimes. Ldpinch.W or the Bancos or Tolger families of Trojans are examples of this


part 5


Even though none of them can be left aside, some particular fields of computer science have played a more determinant role than others with regard to the evolution of viruses. One of the most influential fields has been the development of programming languages.

These languages are basically a means of communication with computers in order to tell them what to do. Even though each of them has its own specific development and formulation rules, computers in fact understand only one language called "machine code".

Programming languages act as an interpreter between the programmer and the computer. Obviously, the more directly you can communicate with the computer, the better it will understand you, and more complex actions you can ask it to perform.

According to this, programming languages can be divided into "low and high level" languages, depending on whether their syntax is more understandable for programmers or for computers. A "high level" language uses expressions that are easily understandable for most programmers, but not so much for computers. Visual Basic and C are good examples of this type of language.

On the contrary, expressions used by "low level" languages are closer to machine code, but are very difficult to understand for someone who has not been involved in the programming process. One of the most powerful, most widely used examples of this type of language is "assembler".

In order to explain the use of programming languages through virus history, it is necessary to refer to hardware evolution. It is not difficult to understand that an old 8-bit processor does not have the power of modern 64-bit processors, and this of course, has had an impact on the programming languages used.

In this and the next installments of this series, we will look at the different programming languages used by virus creators through computer history:

- Virus antecessors: Core Wars

As was already explained in the first chapter of this series, a group of programs called Core Wars, developed by engineers at an important telecommunications company, are considered the antecessors of current-day viruses. Computer science was still in the early stages and programming languages had hardly developed. For this reason, authors of these proto-viruses used a language that was almost equal to machine code to program them.

Curiously enough, it seems that one of the Core Wars programmers was Robert Thomas Morris, whose son programmed -years later- the "Morris worm". This malicious code became extraordinarily famous since it managed to infect 6,000 computers, an impressive figure for 1988.

- The new gurus of the 8-bits and the assembler language.

The names Altair, IMSAI and Apple in USA and Sinclair, Atari and Commodore in Europe, bring memories of times gone by, when a new generation of computer enthusiasts "fought" to establish their place in the programming world. To be the best, programmers needed to have profound knowledge of machine code and assembler, as interpreters of high-level languages used too much run time. BASIC, for example, was a relatively easy to learn language which allowed users to develop programs simply and quickly. It had however, many limitations.

This caused the appearance of two groups of programmers: those who used assembler and those who turned to high-level languages (BASIC and PASCAL, mainly).

Computer aficionados of the time enjoyed themselves more by programming useful software than malware. However, 1981 saw the birth of what can be considered the first 8-bit virus. Its name was "Elk Cloner", and was programmed in machine code. This virus could infect Apple II systems and displayed a message when it infected a computer.


part 6


Computer viruses evolve in much the same way as in other areas of IT. Two of the most important factors in understanding how viruses have reached their current level are the development of programming languages and the appearance of increasingly powerful hardware.

In 1981, almost at the same time as Elk Kloner (the first virus for 8-bit processors) made its appearance, a new operating system was growing in popularity. Its full name was Microsoft Disk Operating System, although computer buffs throughout the world would soon refer to it simply as DOS.

DOS viruses

The development of MS DOS systems occurred in parallel to the appearance of new, more powerful hardware. Personal computers were gradually establishing themselves as tools that people could use in their everyday lives, and the result was that the number of PCs users grew substantially. Perhaps inevitably, more users also started creating viruses. Gradually, we witnessed the appearance of the first viruses and Trojans for DOS, written in assembler language and demonstrating a degree of skill on the part of their authors.

Far less programmers know assembler language than are familiar with high-level languages that are far easier to learn. Malicious code written in Fortran, Basic, Cobol, C or Pascal soon began to appear. The last two languages, which are well established and very powerful, are the most widely used, particularly in their TurboC and Turbo Pascal versions. This ultimately led to the appearance of “virus families”: that is, viruses that are followed by a vast number of related viruses which are slightly modified forms of the original code.

Other users took the less ‘artistic’ approach of creating destructive viruses that did not require any great knowledge of programming. As a result, batch processing file viruses or BAT viruses began to appear.

Win16 viruses

The development of 16-bit processors led to a new era in computing. The first consequence was the birth of Windows, which, at the time, was just an application to make it easier to handle DOS using a graphic interface.

The structure of Windows 3.xx files is rather difficult to understand, and the assembler language code is very complicated, as a result of which few programmers initially attempted to develop viruses for this platform. But this problem was soon solved thanks to the development of programming tools for high-level languages, above all Visual Basic. This application is so effective that many virus creators adopted it as their ‘daily working tool’. This meant that writing a virus had become a very straightforward task, and viruses soon appeared in their hundreds. This development was accompanied by the appearance of the first Trojans able to steal passwords. As a result, more than 500 variants of the AOL Trojan family -designed to steal personal information from infected computers- were identified.
part 7
This seventh edition on the history of computer viruses will look at how the development of Windows and Visual Basic has influenced the evolution of viruses, as with the development of these, worldwide epidemics also evolved such as the first one caused by Melissa in 1999.

While Windows changed from being an application designed to make DOS easier to manage to a 32-bit platform and operating system in its own right, virus creators went back to using assembler as the main language for programming viruses.

Versions 5 and 6 of Visual Basic (VB) were developed, making it the preferred tool, along with Borland Delphi (the Pascal development for the Windows environment), for Trojan and worm writers. Then, Visual C, a powerful environment developed in C for Windows, was adopted for creating viruses, Trojans and worms. This last type of malware gained unusual strength, taking over almost all other types of viruses. Even though the characteristics of worms have changed over time, they all have the same objective: to spread to as many computers as possible, as quickly as possible.

With time, Visual Basic became extremely popular and Microsoft implemented part of the functionality of this language as an interpreter capable of running script files with a similar syntax.

At the same time as the Win32 platform was implemented, the first script viruses also appeared: malware inside a simple text file. These demonstrated that not only executable files (.EXE and .COM files) could carry viruses. As already seen with BAT viruses, there are also other means of propagation, proving the saying "anything that can be executed directly or through a interpreter can contain malware." To be specific, the first viruses that infected the macros included in Microsoft Office emerged. As a result, Word, Excel, Access and PowerPoint become ways of spreading ‘lethal weapons’, which destroyed information when the user simply opened a document.

Melissa and self-executing worms

The powerful script interpreters in Microsoft Office allowed virus authors to arm their creations with the characteristics of worms. A clear example is Melissa, a Word macro virus with the characteristics of a worm that infects Word 97 and 2000 documents. This worm automatically sends itself out as an attachment to an e-mail message to the first 50 contacts in the Outlook address book on the affected computer. This technique, which has unfortunately become very popular nowadays, was first used in this virus which, in 1999, caused one of the largest epidemics in computer history in just a few days. In fact, companies like Microsoft, Intel or Lucent Technologies had to block their connections to the Internet due to the actions of Melissa.

The technique started by Melissa was developed in 1999 by viruses like VBS/Freelink, which unlike its predecessor sent itself out to all the contacts in the address book on the infected PC. This started a new wave of worms capable of sending themselves out to all the contacts in the Outlook address book on the infected computer. Of these, the worm that most stands out from the rest is VBS/LoveLetter, more commonly known as ‘I love You’, which emerged in May 2000 and caused an epidemic that caused damage estimated at 10,000 million euros. In order to get the user’s attention and help it to spread, this worm sent itself out in an e-mail message with the subject ‘ILOVEYOU’ and an attached file called ‘LOVE-LETTER-FOR-YOU.TXT.VBS’. When the user opened this attachment, the computer was infected.

As well as Melissa, in 1999 another type of virus emerged that also marked a milestone in virus history. In November of that year, VBS/BubbleBoy appeared, a new type of Internet worm written in VB Script. VBS/BubbleBoy was automatically run without the user needing to click on an attached file, as it exploited a vulnerability in Internet Explorer 5 to automatically run when the message was opened or viewed. This worm was followed in 2000 by JS/Kak.Worm, which spread by hiding behind Java Script in the auto-signature in Microsoft Outlook Express, allowing it to infect computers without the user needing to run an attached file. These were the first samples of a series of worms, which were joined later on by worms capable of attacking computers when the user is browsing the Internet.