Recent Posts
Recent Comments
11-29 16:02
관리 메뉴

동글동글 라이프

Perl로 짠 IRC Bot 본문

개발자 이야기/Perl

Perl로 짠 IRC Bot

동글동글라이프 2009. 1. 13. 12:43
예전 악성코드 분석을 한창 할 때 IRC 봇을 보고 난 뒤... 

언젠가 한번 만들어 봐야지... 생각했던 때가 있었다.



전에 C언어로 구현하려다 귀찮아서 손 놓고 있다가

Perl을 시작하자 말자 IRC BOT을 다루는 JEEN님을 만나 내공 습득!

즐겁게 Bot을 만들며 Perl공부를 했었다.


irc.freenode.org 의 #Perl-kr 방에는 여러 봇들이 각각의 몫을 하고 있으며,

대표적인 것으로 hanirc.org 의 #perl 방과 연결을 시켜 주는 것과

코드패드 생성, 영어사전 , IRC 로그를 확인하는 명령들이 있다.

cpan에 IRC 모듈을 검색해 보면 대부분 POE::Component::IRC 모듈만 나온다.


POE::Component::IRC

a fully event-driven IRC client module. 
POE-Component-IRC-5.88***** (3 Reviews) - 28 Aug 2008 - Chris Williams


2008년 8월 28일까지 꾸준히 업데이트가 되었으며 다양한 플러그인 기능들이 있어 

많은 사람들에게 사랑받는 모듈이다.


예전에 블로그로 뒤지다가 로우소켓프로그래밍으로 IRC봇을 짠 것을 봤는데...

그 코드가 C로 짠것만 못하다는 느낌이 들었다.


요즘들어 프로그래밍 언어란 그 언어의 특색에 맞게 코드를 짜야 하며

특히 Perl은 아주아주 Perl스럽게 코드를 짜야한다는 생각이 든다. ( saillinux 님께 세뇌를 받았...)

이 모듈을 정리한 블로그가 있으니  바로 여기!! 


JEEN님의 IRC BOT 만들기

조금만 응용을 시키면 FTP서버에서 프로그램을 다운받아서 

실행까지 시켜주는 프로그램을 만들 수 있다. (이 부분이 악성코드 실행과 거의 동일...)


생각없이 적었는데 만들어 보고 싶어져서... 한번.. 샤샤샥...

Net::FTP 모듈을 사용하여 코드 작성.

if ($what =~ /^!([a-z]+)\s?(.*?)?$/ ){
     my ($command,$option) = ($1,$2);
     if ($command eq 'ftp'){
	   my ($IP,$file) = split /\s+/, $option;			
	   $irc->yield( privmsg => $channel => "IP :".$IP. " 파일명 : ".$file );
	   my $ftp = Net::FTP->new($IP); #객체생성
	   $ftp->login("anonymous","");  #id와 비밀번호 설정
	   $ftp->cwd("/");  #FTP 서버의 경로 설정
	   $irc->yield( privmsg => $channel => $nick . " 접속성공! " );
	   $ftp->get($file);  #파일 다운로드
	   $ftp->quit;  #종료
	   #다운받은 파일 출력
	   if($file=~ m!.+\.txt!) {#다운받은 파일이 .txt 파일일때 출력 
	   open my $fh ,'<',$file or die "Can not download file : $! ";
	   while(<FH>){
	       next if($_ eq "\n");			
               $irc->yield( privmsg => $channel => $_);
           }
      }else{
	   $irc->yield( privmsg => $channel => cwd().$file." 에 파일이 저장되었습니다");		
      }
   }		
}



코드에 주석을 달아놨으니 간략히 설명하자면,

다운받은 파일이 텍스트 파일일때는 해당 파일을 출력해주고

아닐 경우에는 실행을 시켜준다. (실행하는 소스는 일부로 뺐다.)

간단히 테스트.

honey-bot은 직접 작성한 IRC 봇이고

명령을 내리면 ftp서버에 접속하여 파일을 다운받는다.



이제.. 이것을 exe파일로 만들어서... 유포를... ㅡ_ㅡ;;


관심있으신 분은 Perl Bot 만들기 프로젝트 홍보...!!    <-- 나도 일단 멤버라능... 


- PR
※ 현재 POE::Component::IRC를 사용한 Perl Bot 만들기 프로젝트가 진행중입니다.
http://code.google.com/p/perl-irc-bot

 참여를 원하시면 댓글을 달아주시거나, email: aiatejin@gmail.com
 혹은 IRC(irc.hanirc.org, #perl)에서 JEEN에게 연락하시면 됩니다.



예전에 작성했던 글을 테스트하다가 갱신해 버렸네 -_-;;


'개발자 이야기 > Perl' 카테고리의 다른 글

perl을 사용한 자신의 IP 주소 얻기  (7) 2009.02.08
Morse (모스 부호)  (9) 2009.01.29
역 해시 (Reverse Hash)  (4) 2009.01.11
irc 로그 분석  (0) 2009.01.08
정규 표현식에 대하여...  (6) 2008.12.29
Comments