вторник, 24 июля 2018 г.

Сборка Zlib в VisualStudo2010

1) Скачать исходники
2) Открыть VisualStudio Command Promt.
3) Перейти в папку.
4) nmake /f win32/Makefile.msc
5) для очистки использовать  nmake /f win32/Makefile.msc /clean
win32/Makefile.msc - можно заменить параметры на CFLAGS  = -nologo -MT -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC) 

четверг, 5 апреля 2018 г.

КриптоПро перенос ключа или потеря пароля от закрытого ключа.

Как перенести закрытый ключ от КриптоПро на другую учетную запись, при утери пароля от закрытого ключа!?...
Будем использовать не вполне очевидный способ, например данный способ может перенести ключи от крипто-контейнера, в другую учетную запись.
Приведу небольшой пример, был компьютер в домене с учетной записью, на этой учетной записи был установлен КриптоПро v 3.6 + сертификат, домен слетел к чертям собачим. Был поднят новый контроллер домена, админ вышел из домена, где хранились сертификаты для этой учётной записи, завел новые учетный записи, и ввел данный компьютер в домен, соответственно зайти в предыдущую учётную запись было невозможно, бекап крипто-контейнера не был сделан., как и закрытого ключа от сертификата тоже(был успешно потерян).
Наглядный пример:
DOMEN1/User1(с сертификатами и закрытым ключом).
DOMEN2/User1(Новый юзер), которому надо перенести крипто-контейнеры из учётной записи DOMEN1/User1.

Что потребуется!?
Крипто-Про устанавливается в реестр по адресу: HKEY_LOCAL_MACHINE\Software\CryptoPro.
Нужно запустить regedit с правами NT_SYSTEM(SYSTEM), для этого есть несколько вариантов :
1) C:\>PsExec.exe -i -d -s regedit

Для этого способа потребуется скачать пакет утилит Internals Марка Руссиновча.

https://docs.microsoft.com/en-us/sysinternals/downloads/pstools

2) at 12:23 /interactive cmd.exe


После запуска regedit, переходим по ветки где установлен Крипто-Про, далее переходим в Users, там мы видим, sid'ы пользователей, как и разделы Keys, Devices. Нам нужно отыскать нужного пользователя, как найти такого пользователя!?....
Нам нужно перейти в ветку реестра :
Перейдите к разделу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.
Смотрим сиды, нужных пользователей, и так источник у нас SRC назначение DST. 
Мы должны найти SRC = DOMEN1/User1, справа от нужного сида будет показана рабочая папка пользователя определяем что это DOMEN1/USER, определяем так-же DST = DOMEN2/User2. 

Далее переходим в папку КриптоПро и экспортируем разделы Keys и Devices.
Открываем их с помощью блокнота, изменяем в них только сиды SRC на DST. 

Не закрывая regedit выбираем файл -> делаем импорт, нужных файлов. keys.reg, devices.reg. Очень важно чтобы все выполнялось от имени NT_SYSTEM(regedit), далее перезагружаемся.

Вот так можно перенести сертификаты + закрытые ключи из одной учетной записи в другую. Данный способ подойдет, если есть нет бекапов, либо при потери закрытых лючей, но при этом точно известно что данные есть в учётной записи.







среда, 28 февраля 2018 г.

Как позвонить на телефон используя C++ и SIP?....

 Как позвонить на телефон используя C++ и SIP?....


Как работать с sip с использованием C++? Это интересный вопрос задавал в google пока не прочитал rfc по sip  + еще несколько справочников + несколько статей в интернете.

Моя задача была простая, взять sip аккаунт, позвонить на телефон, и все.


Что понадобится!?
- Скомпилированная библиотека osip(GNU), я её использовал лишь для парсинга ответов, это библиотека действительно очень мощная, с ней можно написать софт(для sip), практически любой сложности. Единственный недостаток данной библиотеки является это отсутствие хорошей документации.

- VS 2010 C++

Я Буду использовать WINSOCK, поэтому не буду использовать не каких сторонних библиотек, для работы с сетью.

Из sip протокола необходимо пониманием авторизации, как это происходит?! Обратимся к картинки из той-же wiki.

Это типичная схема авторизации. Схема авторизации чего спросите вы?! – авторизации на sip сервере разумеется, как и на любом другом сервисе.

Помимо этого следует так-же знать об методе аутентификации пользователя с помощью
Дайджест-аунтенификации, обратимся опять-же к вики и посмотрим на картику. Для чего это надо!? Все дело в том что sip сервер использует именно эти методы.


четверг, 15 февраля 2018 г.

Бесплатная программа для удалённого доступа, аналог teamviewer

Рад представить аналог teamviewer, ammyy.

Описание :
 RDT — Программа для удалённого администрирования компьютера в реальном времени, которая в некоторых случаях может заменить знаменитые AMMY  или TV. В настоящее время находится в стадии beta-тестирования. Данная программа может передавать файлы, буфер обмена(текстовую информацию). По внешнему виду напоминает TV. Данная программа использует свой сервер для обхода nat, данная программа была написана с нуля без каких либо библиотек VNC, включая протокол.





   Пока данная программа находится в стадии бета-тестирования, сервер может быть недоступен. Как и некоторая некорректная работа самой программы так-же возможна.
Подробнее тут



вторник, 13 февраля 2018 г.

Как написать простой драйвер в Linux?

Как написать простой драйвер в Linux?

/* Заголовочные файлы */
#include <linux/init.h>
#include <linux/module.h>
/* Загрузка драйвера */
static int driver_init(void)
{
  printk(KERN_ALERT "Driver Loaded!\r\n");
  return 0;
}
/* Выгрузка драйвера*/
static void driver_unload(void)
{
  printk(KERN_ALERT "Driver Unloaded!\r\n");
}
/* Инициализация call-back на функционал */
module_init(driver_init);
module_exit(driver_unload);

можно заметить что программирование драйверов под Linux,
похоже с программирование драйверов под Windows, похоже тем, что используются все те же call-back механизмы...

###
назовем этот файл main.c

###
Создаем файл Makefile (Будьте внимательные к регистру, для make - это чувствительно!) nano Makefile
т.к у нас модуль называется main.c

среда, 24 мая 2017 г.

VPN WINAPI | Создание VPN соединения средствами WINAPI

#include <stdio.h>
#include <windows.h>
#include <strsafe.h>

#include <ras.h>
#include <raserror.h>

#include <string.h>
#include <winbase.h>
#include <time.h>
#include <stddef.h>
#include <stdlib.h>
#pragma comment(lib, "rasapi32.lib")

int main(void)
{
HRASCONN hConnection = NULL;
RASDIALPARAMSW RasDialParams;
memset (&RasDialParams, 0, sizeof (RasDialParams));
// Configure the RASDIALPARAMS structure.
RasDialParams.dwSize = sizeof (RasDialParams);
RasDialParams.szPhoneNumber[0] = TEXT('\0');
RasDialParams.szCallbackNumber[0] = TEXT('\0');
wsprintfW(RasDialParams.szEntryName, L"%s", L"test");
wsprintfW(RasDialParams.szUserName, L"%s",  L"test");
wsprintfW(RasDialParams.szPassword, L"%s",  L"test");
wsprintfW (RasDialParams.szDomain, L"%s", L"\0"); //This is optional

воскресенье, 14 мая 2017 г.

MSSQL Сервер база перешла в подозрительное состояние SUSPECT


Выполнить скрипт.

ALTER DATABASE [BD_NAME] SET EMERGENCY
GO
ALTER DATABASE [BD_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DBCC CHECKDB ('BD_NAME', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE [BD_NAME] SET MULTI_USER
GO