Airc - Antichat IRC client (c) AlexTheC0d3r

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by AlexTheC0d3r, 25 Feb 2009.

  1. Eff0rd

    Eff0rd Elder - Старейшина

    Joined:
    2 Jun 2009
    Messages:
    271
    Likes Received:
    334
    Reputations:
    37
    тоже когда то писал.. правда не свой клиент, а скрипты к mIRC. А пользуюсь всю жизнь голым мирцом)
     
  2. BastardFromHell

    Joined:
    5 Feb 2010
    Messages:
    50
    Likes Received:
    18
    Reputations:
    6
    нарисованные формы в делфи и компонент? прям ваще какой "свой"
     
  3. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18

    это была моя первая более-менее серьезная программа...
     
    1 person likes this.
  4. mr. ZetRikS

    mr. ZetRikS New Member

    Joined:
    17 Jul 2009
    Messages:
    45
    Likes Received:
    2
    Reputations:
    0
    По мне так норм... )

    В полне не плохо, разон только начинал... )

    Или ты предлагаешь велосипед переписать? :)

    Автор, мути апдейт с новым дизайном :)
    Больше года прошло с релиза...

    P.S. Ссылки дохлые...
     
    #24 mr. ZetRikS, 4 Mar 2010
    Last edited: 4 Mar 2010
  5. shell_c0de

    shell_c0de Hack All World

    Joined:
    7 Jul 2009
    Messages:
    1,186
    Likes Received:
    618
    Reputations:
    690
    Перезалей сорцы ...
     
    _________________________
  6. MaTpOc

    MaTpOc Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    ну так что никто не перезальет??? :mad:
     
  7. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    я перезалью
    щаас...

    http://slil.ru/28751063
    http://alexthec0d3r.3rss.ru/downloads/airc_s.zip - сорц

    http://slil.ru/28751064
    http://alexthec0d3r.3rss.ru/downloads/airc.zip - exe
     
    #27 AlexTheC0d3r, 6 Mar 2010
    Last edited: 6 Mar 2010
    1 person likes this.
  8. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    shell_c0de
    TidIRC
     
  9. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,309
    Reputations:
    327
    хехе, вспомнилась дллка, давно давно писаная - чтоб вывод в ирке был разноцветный =)

    Code:
    /*
    *  XmasIRC patch for mIRC, ver 1.00
    *  Copyright (c) 2004-2005, The BOXP Developers Team. All Rights Reserved.
    *
    *  Author: BD, sn0w at pc-r00m dot net  
    */
    
    #include <winsock2.h>
    #include <stdio.h>
    #include "resource.h"
    
    #define _MSG(s)	MessageBox(NULL, s, "debugFX", MB_OK|MB_ICONWARNING)
    #define getrandom( min, max ) (( rand() % (int)((( max ) + 1 ) - ( min ))) + ( min ))
    
    #define XMASIRC_MUTEX	"XMASIRC_MUTEX"
    
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    void			PatchMainWindow(HANDLE hMod);
    void			InterceptFunctions(void);
    int	WSAAPI		Intercept_send(SOCKET s, const char FAR * buf, int len, int flags);
    
    HANDLE hMutex;
    
    #pragma pack(1)  //sn0w: 1 byte member structure alignment (got crash otherwise) =))
    struct jmp_far
    {
      BYTE instr_push;		//здесь будет код инструкции push
      DWORD arg;			//аргумент push
      BYTE  instr_ret;		//здесь будет код инструкции ret
    };
    #pragma pack()
    
    
    BYTE old[6];			//область для хранения 6-ти затираемых байт начала функции
    DWORD adr_send;			//будущий адрес оригинальной функции
    DWORD written;			//вспомогательная переменная
    jmp_far jump;			//здесь будет машинный код инструкции перехода
    
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    BOOL APIENTRY DllMain( HANDLE hModule,  DWORD  ul_reason_for_call,
                           LPVOID lpReserved )
    {
    	// Если система подключает DLL к какому-либо процессу, 
    	// она сначала вызовет главную функцию DLL с параметром 
    	// DLL_PROCESS_ATTACH, на что мы сразу вызовем нашу функцию 
    	// InterceptFunctions, которая произведет подмену стандартной API функции
    	
    
    	if(ul_reason_for_call == DLL_PROCESS_ATTACH){
    					
    			hMutex = CreateMutex(NULL, TRUE, XMASIRC_MUTEX);
    
    			if(hMutex != (HANDLE)ERROR_ALREADY_EXISTS){
    				InterceptFunctions();
    				PatchMainWindow(hModule);
    			}
    
    
    	}else if(ul_reason_for_call == DLL_PROCESS_DETACH){
    			ReleaseMutex(hMutex);
    	}
      
      return TRUE;
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    void InterceptFunctions(void)
    {
      
      
      //сначала получим абсолютный адрес функции для перехвата
      adr_send = (DWORD)GetProcAddress(GetModuleHandle("ws2_32.dll"),
                        "send");
      
      if(adr_send == 0){
        _MSG("Cant get adr_send");
        return;
      }
    
      // Зададим машинный код инструкции перехода, который затем впишем 
      // в начало полученного адреса:
    
      // sn0w: (disassembly)
      // 
      //	push addr Intercept_send; ( push address to stack)
      //	ret ( pop eip from stack (fake call) )
      //
      // than i'll write this opcodes at the begin of send() in ws2_32 image in
      // memory space.
    
      jump.instr_push = 0x68;
      jump.arg = (DWORD)&Intercept_send;
      jump.instr_ret = 0xC3;
    
      //Прочитаем и сохраним первые оригинальные 6 байт стандартной API функции
      ReadProcessMemory(GetCurrentProcess(),(void*)adr_send, 
                        (void*)&old, 6, &written);
    
      
    
      //Запишем команду перехода на нашу функцию поверх этих 6-ти байт
      WriteProcessMemory(GetCurrentProcess(), (void*)adr_send, 
         (void*)&jump, sizeof(jmp_far), &written);
      
    }
    
    
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    void XmasBuild(char *sDest, char *sSource)
    {
    		
    	char*	s_prefix = "PRIVMSG #antichat :";
    	char	sTo[9000];
    	int		ncnt = 0;
    	
    	while(*sSource){
    
    		if(getrandom(1,10)>=5){
    	
    			sTo[ncnt++] = 0x03; //add color
    			sprintf(&sTo[ncnt++], "%.2d", getrandom(1,14));  // foreground
    			ncnt++;
    
    		//	sprintf(&sTo[ncnt++], ",%d", getrandom(1,14)); // background
    			sTo[ncnt++] = *sSource;
    		}else{
    			sTo[ncnt++] = 0x02; //add bold
    			sTo[ncnt++] = *sSource;
    		}
    				
    		sSource++;
    	}
    
    	sTo[ncnt] = 0;
    
    	strcpy(sDest, s_prefix);
    	strcat(sDest, sTo);
    
    }
    
    
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    
    int	WSAAPI	Intercept_send(SOCKET s, const char FAR * buf, int len, int flags)
    {
      //Сначала восстанавливаем 6 первых байт функции. Это не обязательное 
      // действие, просто мы решили подшутить над пользователем, и все 
      // сообщения функции MessageBoxA переделать на свои, поэтому нам придется
      // вызвать оригинальную функцию, а для этого следует восстановить ее адрес:
    	
    	int rc;
    	char*	s_prefix = "PRIVMSG #antichat :";
    	
    	WriteProcessMemory(GetCurrentProcess(), (void*)adr_send, 
                         (void*)&old, 6, &written);
    
    	//edit buffer...
    	char editedbuf[9000];
    
    	if(strncmp(buf, s_prefix, strlen(s_prefix))==0){
    		XmasBuild(editedbuf, (char*)(buf+strlen(s_prefix)));
     		rc = ((int (WSAAPI*)(SOCKET, const char FAR *, int, int))adr_send)(s,editedbuf,strlen(editedbuf),flags);
    		//rc = ((int (WSAAPI*)(SOCKET, const char FAR *, int, int))adr_send)(s,buf,len,flags);
    		
    	}else{
    		rc = ((int (WSAAPI*)(SOCKET, const char FAR *, int, int))adr_send)(s,buf,len,flags);
    	}
    
    	//Снова заменяем  6 байт функции на команду перехода на нашу функцию
    	WriteProcessMemory(GetCurrentProcess(), (void*)adr_send, 
                         (void*)&jump, 6,&written);
    
    
    	//_MSG("WSAStartup()");
    	return rc;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    //
    void PatchMainWindow(HANDLE hMod)
    {
    
    	HWND hWnd;
    	char s_buff[256];
    	char s_total[512];
    
    	hWnd = FindWindow("mIRC", NULL);
    
    	if(!hWnd) // failed
    		return; 
    
    	GetWindowText(hWnd, s_buff, 255);
    
    	strcpy(s_total, s_buff);
    	strcat(s_total, " - xmasirc v 1.0 is in runtime now");
    
    	SetWindowText(hWnd, s_total);
    
    	HICON hIcon;
    
    	hIcon = LoadIcon((HINSTANCE)hMod, MAKEINTRESOURCE(IDI_MIRCICON));
    
    	if(!hIcon)
    		_MSG("Cant load icon");
    
    	SendMessage(hWnd, WM_SETICON, ICON_SMALL,
    		(LPARAM)hIcon);
    
    	UpdateWindow(hWnd);
    
    	
    }
    
    
     
  10. MaTpOc

    MaTpOc Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    не работает!
    пишу ник и пас и виснет намертво (((
    раньше такого не было (!
     
  11. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    дело, как мне кажется в том, что клиент коннектится по ip, который сменился у ирс ачата
     
  12. yaneblinchik

    yaneblinchik Member

    Joined:
    6 Feb 2010
    Messages:
    113
    Likes Received:
    19
    Reputations:
    0
    что за ошибка socket error #10060 ?
     
  13. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    смотри выше
     
  14. MaTpOc

    MaTpOc Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    И где узнать на кокой он изменился???
     
  15. yaneblinchik

    yaneblinchik Member

    Joined:
    6 Feb 2010
    Messages:
    113
    Likes Received:
    19
    Reputations:
    0
    AlexTheC0d3r ждем обновления...скучно))
     
  16. Peklots

    Peklots Elder - Старейшина

    Joined:
    28 Sep 2008
    Messages:
    281
    Likes Received:
    144
    Reputations:
    36
    Все-еще ждем.
     
  17. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    о) я вспомнил что недавно переставлял среду.. думаю исправлю.
    если не терпится пингуйте ирс.античат.ру
    и поменяйте ип в коннекте в сорсах