Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: bomzzz
Дата сообщения: 30.11.2011 19:41
а как под ограниченной учетной записью привелегии получить?
Автор: Abs62
Дата сообщения: 30.11.2011 20:27
kenny5705

Цитата:
Не подскажете как это можно попроще исправить, т.е чтоб программа читала и отправляла в кодировке UTF-8?

В STL нет штатных средств преобразования, ЕМНИМС. Так что можно в сети какие-нибудь библиотечки поискать, а можно и самому функции преобразования написать. Что-нибудь вроде этого:
[more]
Код: wstring UTF8toW(string const &utf8)
{
wstring wstr;
int len=MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0);
if(len>0) {
wchar_t *buf=new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, buf, len);
wstr.assign(buf);
delete[] buf;
}
return wstr;
}

string WtoUTF8(wstring const &wstr)
{
string utf8;
int len=WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, NULL, 0, 0, 0);
if(len>0) {
char *buf=new char[len];
WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, buf, len, 0, 0);
utf8.assign(buf);
delete[] buf;
}
return utf8;
}

...

string find_str(WtoUTF8(L"<h2> <span class=\"mw-headline\"> Условие задачи </span></h2>"));
size_t found;
string lines;
while( !input_file.eof() )
{
getline( input_file, lines ); //возвращает в lines строку из файла

found = lines.find(find_str); //номер позиции содержащей данное выражение
//output_file << found << endl;
if( found != string::npos ) // если не равно значит есть такое выражение в строке есть
{
ident = 1;
output_file << WtoUTF8(L"<h2>Задача " << numbZad << "</h2>") << endl;
lines = find_str;
numbZad++;
};
};
Автор: bomzzz
Дата сообщения: 30.11.2011 23:30
как вот это реализовать.
[more]
Очевидно искать лазейки много зависит от того самого админа от его уровня =)
Описание: Уязвимость обнаружена в ярлыках в Windows 2000/XP/2003. Локальный пользователь может, при некоторых условиях, поднять свои привилегии.

Уязвимость обнаружена в приложениях, взаимодействующих с отдельными процессами или библиотеками. При взаимодействии приложения с отдельным приложением, или библиотекой, то можно подменить адрес дочернего процесса, то есть местонахождение приложения или библиотеки. Проблема состоит в том, что часто при написании приложений указывается не полный путь к файлу, если файл находится в директории с вызываемым приложением, а указывается просто имя файла. Если же подменить в свойствах ярлыка путь к рабочей папке программы, то программа будет искать библиотеку не в своей папке, а том месте, которое указано в свойствах ярлыка (свойства ярлыка -> "Рабочая папка"). Тем самым можно подменить библиотеку (приложение, которое вызывается как дочерний процесс), и выполнить произвольный код. Взломщик, имея права с ограниченными привилегиями, и не имеющий права на запись в директории рассматриваемого приложения, может подменить местонахождение библиотеки и позднее, когда пользователь с административными правами запустит уязвимое приложение (при этом выполнится произвольный код), получить привилегии администратора. Практической реализации данной уязвимости не существует в настоящее время.

Подробности смотрите в источнике сообщения

URL производителя: http://www.Microsoft.Com

Решение:Способов устранения обнаруженной уязвимости не существует в настоящее время.

Уязвимость обнаружил Иван Жданов (dokk21@rambler.ru)
[/more]
http://otvet.mail.ru/question/38535092
ну создал я дллку с именем как у одной из системных. но при запуске приложение выдает ошибку - что такой функции в системной дллке нет. то есть она все таки обращается к системной а не той что лежит рядом в папке.
Автор: panda3
Дата сообщения: 01.12.2011 07:12
bomzzz
Во-первых, если DLL уже загружена другой программой, то она и используется. Во-вторых, если DLL находится в списке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs то она грузится оттуда, в третьих, вот это:

Цитата:
Если же подменить в свойствах ярлыка путь к рабочей папке программы, то программа будет искать библиотеку не в своей папке,

неправда, если DLL находится в папке с программой, то она имеет безусловный приоритет в загрузке, перехватом рабочей папки можно перенаправить загрузку только DLL, которые ищутся в системных папках.
Автор: bomzzz
Дата сообщения: 01.12.2011 08:10
ну я и пытался подпихнуть программе дллку с системным именем. разные попробовал. ложил в папку с программой, при запуске программа выдавала, что в дллке нету вызываемой функции - то есть она все таки обращалась к системной, а не к той что в папке.

ни фига не вышло. начал уже разбираться с ZwQuerySystemInformation

я кстати взял прогу TuneUP - коммерческий продукт сурьезный, там процес експлорер тоже ни фига не показывает под ограниченной записью.
Автор: bomzzz
Дата сообщения: 01.12.2011 11:07
методом тыка wsock32.dll можно имя дать, только привелегии все равно не установились.
Автор: kenny5705
Дата сообщения: 01.12.2011 17:10
Abs62

Цитата:
В STL нет штатных средств преобразования, ЕМНИМС

ну да, самое лучшее что мне удалось нарыть это http://www.programmersclub.ru/Конвертирование-utf-8-в-windows-1251/
блин ты так то даешь, взял написал программу, и ведь работает, даж переделывать не пришлось, всю работу за меня сделал, весь кайф обломал млин...)))
ладно спасибо за помощь

как вариант кстати можно использовать консольные утилиты iconv или recode
Автор: bomzzz
Дата сообщения: 01.12.2011 19:49
никто загрузку процессора не считал? чета не получается у меня
Автор: ValidolX
Дата сообщения: 01.12.2011 21:09
может кто закинуть пару файлов из VC2010
mfc100.def
mfc100d.def
mfc100u.def
mfc100ud.def
(лучше все *.def из папки atlmfc)
благодарю
Автор: V0lt
Дата сообщения: 03.12.2011 18:48
Не могу понять, в чем проблема

Код: #define STR_A L"orange"
#define STR_B L"mandarin"
#define SUFFIX L" is sweet"

CStringW s1(STR_A);
CStringW s2(STR_A + SUFFIX); // ошибка
CStringW s3(STR_B + L" is sweet"); // ошибка
Автор: Abs62
Дата сообщения: 03.12.2011 19:18
V0lt

Цитата:
Получается _T("orange") и L"orange" полностью равнозначны? Или нет?

Равнозначны, если определено _UNICODE.

Код: #ifdef _UNICODE
...
#define __T(x) L ## x
...
#else /* ndef _UNICODE */
...
#define __T(x) x
...
#endif
Автор: V0lt
Дата сообщения: 03.12.2011 19:40
Abs62
Спасибо.

С конструктором я не самый удачный пример привел. У меня некая функция, которая на входе принимает строку.

Код: Func(STR_A + SUFFIX); // ошибка
Автор: Abs62
Дата сообщения: 03.12.2011 19:49
V0lt

Цитата:
А компактнее возможно? Никак нельзя обойтись без s2 ?

Можно. Надо просто учесть, что wchar_t* суммировать нельзя, а CString можно. Значит, нужно сделать явное преобразование.

Код: Func(CStringW(STR_A) + SUFFIX);
Автор: V0lt
Дата сообщения: 03.12.2011 19:59
Abs62
Спасибо, меня это устроит.
Автор: bomzzz
Дата сообщения: 03.12.2011 22:31
никто случайно не знает, разобрался с этой недокументированной фигней - ZwQuerySystemInformation, сделал, привилегий для получения информации о системных процессах не требуется. но эта функция возвращает информацию о всех системных процессах в одном блоке данных и хотя еще и возвращает его длину, вот только если запасти недостаточный буфер по размеру, его можно было БЫ скорректировать и вызвать функцию еще раз если бы за время вызова этой функции еще раз в системе не появились скажем еще процессы и размер опять увеличился. может есть какой то механизм чтоб знать сколько под нее места надо?
Автор: Abs62
Дата сообщения: 03.12.2011 22:53
bomzzz
А документацию сложно прочитать?

Цитата:
ReturnLength [out, optional]
An optional pointer to a location where the function writes the actual size of the information requested. If that size is less than or equal to the SystemInformationLength parameter, the function copies the information into the SystemInformation buffer; otherwise, it returns an NTSTATUS error code and returns in ReturnLength the size of buffer required to receive the requested information.

Автор: bomzzz
Дата сообщения: 03.12.2011 23:03
блин - первый раз ее вызвал получил размер буфера, зарезервировал размер требуемый вызываешь ее второй раз - но за время между вызовами размер может измениться. например вирус или программа какая то с ошибкой сама себя запускает и в секунду сотни новых процессов появляется
Автор: Abs62
Дата сообщения: 03.12.2011 23:11
bomzzz
А ты хочешь функцию, которая может точно предсказать, сколько процессов будет в системе через N секунд? Таких не бывает.
Автор: bomzzz
Дата сообщения: 03.12.2011 23:14
но в системе то они как то это реализовали. у меня неоднократно были ситуации когда из за ошибки в программе процессы плодились как кролики и менеджер задач запускался при этом. и функции типа CreateToolhelp32Snapshot как реализованы, что работают без ошибок

Добавлено:
можно поднять приоритет до реального времени между вызовами, или может как то можно узнать где этот буфер. или заблокировать запуск новых процессов. может кто то читал про это я нагуглить не могу ниче
Автор: kotlomoy
Дата сообщения: 04.12.2011 01:45
bomzzz
А в чем проблема? Выдели буфер сколько просит, если потом не хватает - выдели еще
Автор: bomzzz
Дата сообщения: 04.12.2011 01:52
чтоб программа вообще не запустилась. а так и выделяла больше больше...

вот тут именно так и советуется, но это любительское мнение, меня бы утроило если бы так было сделано на мсдн
http://wasm.ru/print.php?article=drvw2k06

Цитата:
Здесь я предполагаю, что между двумя вызовами ZwQuerySystemInformation в системе не появится ни одного нового модуля. Это весьма вероятно, т.к. случается не часто. В учебном примере это простительно, но в коде своего драйвера Вы можете использовать более надежный способ: вызывать ZwQuerySystemInformation в цикле, передавая ей каждый раз буфер большего размера, до тех пор, пока размер буфера не окажется достаточным.


у себя проверил, на 15 процессов требуется - 19776, это если нет имен процессов с длиной MAX PATH (260) можно считать средним значением. под 1.5 кбайта на процесс хватит и с именем 260 байт. можно прибавить 150 кбайт к значению. тогда памяти гарантированно хватит, даже если программа запускает свою копию, а те в свою очередь делают тоже самое (5!=120). но все равно как то некрасиво, лучше было бы поднять статус процесса до реального времени. и все равно как то...

хотя скорее всего процессор будет уделять время сначала вновь начавшемуся процессу
Автор: bomzzz
Дата сообщения: 04.12.2011 11:07
много гуглил и так и сяк, нигде другого решения не предлагается, и даже прибавку никто не прибавляет, в одной статье даже утверждается что дезасемблировали CreateToolhelp32Snapshot и она так же делает. ну фиг знает...
Автор: kotlomoy
Дата сообщения: 04.12.2011 11:50
bomzzz

Цитата:
чтоб программа вообще не запустилась. а так и выделяла больше больше...

Количество процессов не будет бесконечно увеличиваться. Если уж так хочется, выдели память заранее под большое количество процессов.
Проблема здесь надумана
Автор: bomzzz
Дата сообщения: 04.12.2011 12:31
ниче не надумана. где это видано чтоб гадать сколько выделять.


вот у меня к примеру проблема вылезла недавно. написал програмку все прекрасно работает и работала. пока три дня назад не смотрел ХД фильм, который поджирал от 70 до 100% проца и оказалось при критической загрузке треды запущенные позже обгоняют те что запущены раньше и это сказалось на приложении.

Добавлено:


у меня такие тултипики вылазят у иконки в трее, и когда появляются новые сообщения они стирают старые, вот получается, что новые вылазят до того как старые появятся, и старые вообще не исчезают так и висят на столе
Автор: I am not Liar
Дата сообщения: 04.12.2011 13:24
объявляю структуру


Код: struct machine
{
char name[100];
char color[15];
char serial[20];
char regnum[8];
int doors, year;
unsigned long price;
}
Автор: Abs62
Дата сообщения: 04.12.2011 13:28
I am not Liar

Код: machine m;
memset(&m,0,sizeof(m));
Автор: kotlomoy
Дата сообщения: 04.12.2011 17:37
bomzzz

Цитата:
треды запущенные позже обгоняют те что запущены раньше

Термин "синхронизация потоков" ни о чем не говорит?
Автор: akaGM
Дата сообщения: 04.12.2011 18:14
I am not Liar
а что, простая инициализация не подходит?

struct machine m = {0,0,0,0,0,0,0};
Автор: bomzzz
Дата сообщения: 04.12.2011 23:14
kotlomoy
а что тут синхронизировать, они вообще одновременно не должны были работать - между ними разница не менее 10 секунд. просто иконку надо удалять в другом месте
Автор: bomzzz
Дата сообщения: 05.12.2011 06:00
а никто случайно не знает точно чем лимитируется число процессов в системе.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.