perl打造自己的黑客工具(5)
perl也提供了api函数调用,这样我们可以在为自己的软件添加一些功能了,我这里主要是介绍得到系统信息的。调用api函数还能实现很多功能,比如删除日志,终止进程,具体的参考perl的帮助吧。
现在我们来看看我是这样获得系统信息的。
#usr/bin/perl
use Win32API::Registry 0.21 qw( :ALL );
use Sys::Hostname;
$host=hostname;
print "主机名: $host\n";
RegOpenKeyEx( HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 0,KEY_READ, $key )||die "失败",regLastError(),"\n";
RegQueryValueEx( $key, "VendorIdentifier", [], [], $data, [] );
printf "CPU信息: $data ";
RegQueryValueEx( $key, "ProcessorNameString", [], [], $data, [] );
printf " $data\n";
RegCloseKey( $Key );
RegOpenKeyEx( HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System", 0,KEY_READ, $key )||die "失败",regLastError(),"\n";
RegQueryValueEx( $key, "SystemBiosVersion", [], [], $data, [] );
printf "BIOS信息: $data\n";
RegCloseKey( $Key );
RegOpenKeyEx( HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", 0,KEY_READ, $key )||die "失败",regLastError(),"\n";
RegQueryValueEx( $key, "Identifier", [], [], $data, [] );
printf "硬盘信息: $data\n";
RegCloseKey( $Key );
RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\0000", 0,KEY_READ, $key )||die "失败",regLastError(),"\n";
RegQueryValueEx( $key, "DriverDesc", [], [], $data, [] );
printf "显卡信息: $data ";
RegQueryValueEx( $key, "DriverVersion", [], [], $data, [] );
printf "版本: $data\n";
RegCloseKey( $Key );
RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0,KEY_READ, $key )||die "失败",regLastError(),"\n";
RegQueryValueEx( $key, "ProductName", [], [], $data, [] );
printf "操作系统: $data ";
RegQueryValueEx( $key, "CurrentVersion", [], [], $data, [] );
printf " $data.";
RegQueryValueEx( $key, "CurrentBuildNumber", [], [], $data, [] );
printf " $data ";
RegQueryValueEx( $key, "CSDVersion", [], [], $data, [] );
printf " $data\n";
RegQueryValueEx( $key, "RegisteredOwner", [], [], $data, [] );
printf "注册到: $data ";
RegQueryValueEx( $key, "RegisteredOrganization", [], [], $data, [] );
printf " $data ";
RegQueryValueEx( $key, "ProductId", [], [], $data, [] );
printf " $data\n";
RegQueryValueEx( $key, "SystemRoot", [], [], $data, [] );
printf "系统根目录: $data\n";
RegCloseKey( $Key );
RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Internet Explorer", 0,KEY_READ, $key )||die "失败",regLastError(),"\n";
RegQueryValueEx( $key, "Version", [], [], $data, [] );
printf "IE版本:IE $data\n";
RegOpenKeyEx( HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 1\\Scsi Bus 0\\Target Id 1\\Logical Unit Id 0", 0,KEY_READ, $key )||die "失败",regLastError(),"\n";
RegQueryValueEx( $key, "Identifier", [], [], $data, [] );
printf "光驱信息: $data\n";
RegCloseKey( $Key );
exit 1;
这个程序,是调用了注册表来得到信息,非常容易。
#!/usr/bin/perl
use Win32::kernel32;
use win32;
use win32::api;
use Win32API::File 0.08 qw( :ALL );
$olOutLength= GetLogicalDriveStrings(4*26+1, $osBuffer );
print "本机器上有:\n";
printf " $osBuffer\n";
print "请输入需要查看的分区(注意加'\\'!):";
$disk=<STDIN>;
chop( $disk);
$free = Win32::GetDiskFreeSpace(" $disk");
$a= $free/1024;
printf "此分区有 $a KB空余\n";
$type=Win32::GetDriveType( $disk);
if( $type==0){ printf "分区类型:UNKNOWN\n";}
if( $type==1){ printf "分区类型:The root directory does not exist\n";}
if( $type==2){ printf "分区类型:A floppy drive\n";}
if( $type==3){ printf "分区类型:A fixed drive\n";}
if( $type==4){ printf "分区类型:A remote (network) drive\n";}
if( $type==5){ printf "分区类型:A CD-ROM drive\n";}
if( $type==6){ printf "分区类型:A RAM disk\n";}
if( $type<0){printf "UNKNOWN\n";}
if( $type>6){printf "UNKNOWN\n";}
GetVolumeInformation( $disk, $osVolName, $lVolName, $ouSerialNum, $ouMaxNameLen, $ouFsFlags, $osFsType, $lFsType );
printf "卷标名: $osVolName\n";
printf "序列号: $ouSerialNum\n";
printf "文件系统: $osFsType\n";
这个程序是获得系统的磁盘信息的,具体看perl的帮助。
#!/usr/bin/perl
print "输入要杀进程的PID:";
$listid=<STDIN>;
chop( $listid);
$a=kill(9, $listid);
if( $a){print "关闭 $listid进程成功";}
else{
print "关闭 $listid进程失败";}exit;
这个小小的程序可以查杀一些普通的进程。
好了,这一节就介绍到这里,有什么不懂的可以自己去参考perl自带的帮助文件。