Сейчас на форуме: _MBK_, tyns777, UniSoft (+11 невидимых)

 eXeL@B —› Программирование —› Реверсинг диалога о завершении работы Windows
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 14 июня 2012 15:52
· Личное сообщение · #1

Всем хай. Ситуация следующая, Windows XP SP3, в течении некоторого времени пытаюсь отреверсить и воспроизвести функционал меню Пуск -> Завершение работы. Т.е. хочу создать такой диалог программно. После определённого исследования (всего исследования я уж не помню, буду описывать то, что ещё помнится) удалось выяснить, что в explorer.exe подгружается msgina.dll, потом по ординалу ищется и вызывается функция под номером 16 (10h). Внутри этой функции CreateWindowExW создаёт окно, потом после ShowWindow моё приложение ведёт себя странно, а explorer.exe - адекватно. Т.е. эксплорер отображает окно, а мой софт, в случае, если пашет под Olly - вешает систему (выходом является нажатие Ctrl+Alt+Del и завершение процесса отладчика). Без отладчика софт просто не отображает окно, но система не вешается. В дебаггере решил ресёрчить причину. Т.к. перед созданием окно вызывается RegisterClassExW, отсюда можно определить lpfnWndProc, определил - это CDimmedWindow__WndProc. Поставил на него бряк, последний (перед зависанием) бряк показал, что обрабатывается сообщение WM_WINDOWPOSCHANGING. Вышел я из этой CDimmedWindow__WndProc, дотопал до XyCallbackReturn, а потом (собственно, как и описывается --> Здесь <--), отправился в ядро посредством int 2Bh . После чего всё подвисло.

Пробовал зайти с другой стороны, запускал оконное приложение, через Spy++ отслеживал очередь сообщений, и смотрел, что произойдёт после отображения пресловутого окна. Так вот пока окно активно - очередь пуста (может, она не пуста, просто строки в эдите Spy++ появляются только после того, как отмену нажать), а как только нажимаю отмену, то множество сообщений сразу передаются оконной процедуре. Первым из них обрабатывается WM_SYNCPAINT. Так вот я в своём оконном софте сделал так, чтоб при обработке этого сообщения моя софтина просто входила бы в бесконечный цикл, но это не повесило систему, значит моя догадка о том, что при создании этого окна о завершении работы система рассылает некие сообщения топ-левел окнам, неверна. Да, рассылка происходит, но при выборе какого-то из пунктов (перезагрузка, завершение работы), но не при отрисовке окна выбора.

А началось всё с того, что на одном из компов этот диалог завершения работы перестал отображаться. Причём эффект тот же, что и для моей самописной софтины - попытка завершения работы вешает систему. WTF? Натолкните на мысль, что бы ещё можно бы такое сделать/посмотреть/поресёрчить и как, а то уже идеи закончились. Проект на 2010 студии прикладываю, где моё приложение вызывает зависание под олькой, и завершается без неё, но не рисует диалог.

4098_14.06.2012_EXELAB.rU.tgz - GinaTest.rar

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 47.6 (посетитель), 15thx
Активность: 0.030.02
Статус: Участник

Создано: 14 июня 2012 17:01 · Поправил: mdscorp
· Личное сообщение · #2

"rundll32 ExitWindowsEx"
а через командную строку параметр завершения работы передать не проще ?
Code:
  1. ShellExecute(handle, "open", shutdown ---0, NULL, NULL, SW_SHOWNORMAL);


"shutdown -f -s -t 0 "

и да, сами ресурсы окна находятся в ntoskrnl.exe




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 14 июня 2012 17:03
· Личное сообщение · #3

возможно, чуть не в тему
из своих экспериментов я помню, что этот диалог открывается также,
если послать WM_CLOSE окну с заголовком "Program Manager" и классом "Progman"

btw. а в чём суть исследования?
вернуть на поврежденный комп диалог завершения работы?
или просто сымитировать функционал оригинального диалога?

| Сообщение посчитали полезным: TLN


Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 14 июня 2012 17:15
· Личное сообщение · #4

У Руссиновича почитайте главу 4 "Запуск и завершение работы системы"

-----
Nulla aetas ad discendum sera




Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 14 июня 2012 20:11
· Личное сообщение · #5

Возможно, система не вешается, а пытается отобразить какой-то диалог и не может это сделать.
Вообще подозреваю, что DimmedWindow берет текущую картинку десктопа, а потом в ней палитру крутит в сторону обесцвечивания. Соответственно, если это не десктоп, а статик картинка, то ничего программа отобразить не сможет. Тем более через ГУЙ, который остановлен в это время.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 14 июня 2012 21:26 · Поправил: ARCHANGEL
· Личное сообщение · #6

Ответы по порядку.

mdscorp
Написать софт, который бы также вызывал ExitWindowsEx - не проблема, и тут можно обойтись без rundll32.exe, тем более, что так как вы указали - работать не будет, ибо надо указать имя_либы имя_функи в качестве параметров, но я вас понял. Интерес именно знать, почему вдруг стандартный диалог перестал работать.

-=AkaBOSS=- пишет:
из своих экспериментов я помню, что этот диалог открывается также,
если послать WM_CLOSE окну с заголовком "Program Manager" и классом "Progman"


Да, но только потом произойдёт всё тоже самое - explorer подгрузит msgina.dll и начнётся та же канитель.

Flint пишет:
У Руссиновича почитайте главу 4 "Запуск и завершение работы системы"

Читал, но там не то, ибо там описывается, что происходит при завершении работы системы, а мне нужно знать, что происходит при отрисовке предложения о завершении работы, т.е. если вывелось это окно, то я могу и не завершать работу - нажму "отмена" и дальше буду работать, и завершения не произойдёт.

yagello
Вот и я так подумал. Поэтому стал трейсить функцию с ординалом 16. В ней CreateWindowEx завершается норм, куда дальше смотреть - я не догадался пока. Но у вас так много идей, не подскажете, как оно может "крутить палитру в сторону обесцвечивания", а я попробую это проверить.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 14 июня 2012 22:12
· Личное сообщение · #7

ARCHANGEL пишет:
как оно может "крутить палитру в сторону обесцвечивания"

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

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 14 июня 2012 22:25 · Поправил: neomant
· Личное сообщение · #8

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

-----
Следуй за белым кроликом




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 15 июня 2012 00:33 · Поправил: Hexxx
· Личное сообщение · #9

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

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 15 июня 2012 00:34
· Личное сообщение · #10

neomant пишет:
Как то странно, что функа получает указатели на два нулевых дворда.
На такую мысль натолкнули два вызова IsBadWritePtr в начале функции, где ucb был равен 4. Но ещё посмотрю - может, высмотрю что-то.

ajax
Пока не нашёл там ничего полезного.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 15 июня 2012 10:21
· Личное сообщение · #11

ARCHANGEL
Большая часть функций есть в MSDN, есть исходники msgina, к чему реверс?
В атаче сурсы, грузи dll в IDA, грузи PDB и сравнивай с исходниками ибо я никогда сам не интересовался вызовом этого диалога, ибо он мне не нужен, так что мне лень для тебя искать.

1c1c_15.06.2012_EXELAB.rU.tgz - gina.rar




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 15 июня 2012 11:32 · Поправил: ARCHANGEL
· Личное сообщение · #12

F_a_u_s_t
Такие сорцы я видел в составе пака сорцов Windows 2000, но, несмотря на то, что папка называется gina, сорцов самой джины там нет, есть только winlogon.exe и userenv.dll.

Не знаю, правильно ли я понял содержимое MSDN, но, похоже, аналогичный диалог должен вызваться при обращении к WlxActivateUserShell. В описании меня смущают такие строки:

Before calling WlxActivateUserShell, Winlogon sets the desktop state so that the current desktop is the Winlogon desktop and sets the workstation state so that the desktop is locked.

Т.е. если этого не сделать, может ли происходить такое зависание?

Hexxx
Прочитал про отладку джины --> Здесь <--. Получается, что я не могу так просто подгружать её к своему процессу и что-то из неё вызывать? Я должен все вызовы делать из Winlogon.exe, что ли? Но тогда почему вызов этого диалога из explorer.exe работает. Нет, там видимо, имели ввиду отладку функций завршения сеанса, блокирования рабочего стола, аутентификации и т.д., т.е. спец.функций джины. Да и нигде не говорится, что без отладочных флажков и отладочной версии винлогона система будет виснуть, откуда такая информация?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 15 июня 2012 11:51 · Поправил: F_a_u_s_t
· Личное сообщение · #13

ARCHANGEL
В исходниках есть часть wlx функций.
Судя по написанному может виснуть, сам не сталкивался.
Вот что ахтунги с microsoft советуют юзать, сам не пробовал.
--> Link <--

Add:
Посмотрел твой семпл...
ShellDimScreen эта функа дает только эффект затенения, она ничего не выключает.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 15 июня 2012 12:21
· Личное сообщение · #14

F_a_u_s_t
Да, этот эффект мне и надо воспроизвести. А то у меня (если запускать этот сэмпл) нет никакого эффекта.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 74.4 (постоянный), 76thx
Активность: 0.050.1
Статус: Участник

Создано: 15 июня 2012 14:01
· Личное сообщение · #15

ARCHANGEL
Может не по теме , вроде такой эффект CureIt! от веба делает. Посмотри что там да как.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 15 июня 2012 14:20 · Поправил: F_a_u_s_t
· Личное сообщение · #16

typedef HRESULT (__stdcall *ShellDimScreen) (IUnknown* *Unknown, HWND* hWindow);
HMODULE _ShellDimScreen(HWND hWindow)
{
HMODULE Dll = LoadLibraryA("msgina.dll");
if (Dll != NULL)
{
IUnknown* Unknown;
ShellDimScreen Func = (ShellDimScreen) GetProcAddress(Dll,(LPSTR) 16);
Func(&Unknown, &hWindow);
return Dll;
}
else
return NULL;
}

Add:
Надо было сразу уточнить.
Ждемс новый винлокер.

Скомпиленный семпл.


335e_15.06.2012_EXELAB.rU.tgz - GinaTest.rar

| Сообщение посчитали полезным: ==DJ==[ZLO], ARCHANGEL, Flint


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 15 июня 2012 14:56 · Поправил: ARCHANGEL
· Личное сообщение · #17

F_a_u_s_t
Вау, какой эффект Блин, прав был neomant - надо было мне больше ресёрчить эту #16, и там действительно не указатели на два нулевых дворда. Ладно, буду разбираться.

Но, что интересно, этот эффект серости возникает только если я не дебажу софт отладчиком (OllyDbg). Под дебаггером стабильно вешает все приложения. Но это уже что-то.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 15 июня 2012 15:02
· Личное сообщение · #18

ARCHANGEL
CureIt на сколько я помню свое окно создает которое перекрывает рабочий стол, ибо совместимость с другими осями.
А проблемы с отладкой из за того что gina это часть winlogon, плюс com == ахтунг, ms вообще пугает что винда может слететь, там специально встроена такая куйня, как логирование.




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 15 июня 2012 15:22
· Личное сообщение · #19

F_a_u_s_t пишет:
Ждемс новый винлокер.


Code:
  1.          .386
  2.          .model small, stdcall
  3.          option casemap :none
  4.          assume fs:nothing
  5.          include \MASM32\INCLUDE\kernel32.inc
  6.          include \MASM32\INCLUDE\user32.inc
  7.          include \MASM32\INCLUDE\ntdll.inc
  8.          include \MASM32\INCLUDE\gdi32.inc
  9.          include \MASM32\INCLUDE\windows.inc
  10.          
  11.          
  12.          includelib \MASM32\LIB\kernel32.lib
  13.          includelib \MASM32\LIB\user32.lib
  14.          includelib \MASM32\LIB\ntdll.lib
  15.          includelib \MASM32\LIB\gdi32.lib
  16.          
  17.  
  18.  
  19. ; #########################################################################
  20.  
  21. .data
  22. text db "ВАШ КОМПЬЮТЕР ЗАБЛОКИРОВАН.", 0
  23. fontname db "Arial", 0
  24.  
  25. msgina db "msgina.dll",0
  26. ptitle db "Эффект затенения", 0
  27. ptext db "Проверка программы", 0
  28.  
  29. .data?
  30. DC       db 4 dup (?)
  31. ShellDimScreen dd ?
  32. dd ?
  33.  
  34.  
  35. .code
  36.  
  37. start:
  38.  
  39. call GetDesktopWindow
  40. push eax
  41. call GetWindowDC  
  42.  
  43. mov dword ptr ds:[DC], eax
  44.  
  45. push TRANSPARENT
  46. push dword ptr ds:[DC]
  47. call SetBkMode
  48.  
  49. push White
  50. push dword ptr ds:[DC]
  51. call SetTextColor
  52.  
  53. push offset fontname
  54. push DEFAULT_PITCH or FF_ROMAN
  55. push DEFAULT_QUALITY
  56. push CLIP_DEFAULT_PRECIS
  57. push OUT_DEFAULT_PRECIS
  58. push RUSSIAN_CHARSET
  59. push 0
  60. push FALSE
  61. push FALSE
  62. push 400
  63. push 0
  64. push 0
  65. push 0
  66. push 50
  67. call CreateFontA   
  68.  
  69. push eax
  70. push dword ptr ds:[DC]
  71. call SelectObject
  72.  
  73. push offset text
  74. call lstrlenA
  75.  
  76. push eax
  77. push offset text
  78. push 150
  79. push 150
  80. push dword ptr ds:[DC]
  81. call TextOutA
  82.  
  83. call GetDesktopWindow
  84.  
  85. push dword ptr ds:[DC]
  86. push eax
  87. call ReleaseDC
  88.  
  89. push offset msgina
  90. call LoadLibraryA
  91.  
  92. push 16
  93. push eax
  94. call GetProcAddress
  95.  
  96. mov dword ptr ds:[ShellDimScreen], eax
  97.  
  98. push offset x
  99. push offset x
  100. call eax
  101.  
  102. push 0
  103. push offset ptext
  104. push offset ptitle
  105. push 0
  106. call MessageBoxA
  107.  
  108. push 0
  109. call ExitProcess
  110. end start
  111.  
  112. ; #########################################################################


))

-----
Nulla aetas ad discendum sera




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 15 июня 2012 18:56 · Поправил: F_a_u_s_t
· Личное сообщение · #20

Flint
Зачет.

ARCHANGEL
Тут знакомый семпл подкинул (где то подобрал на просторах интронета) там этот эффект реализован без зависимости от msgin, будет работать и на XP и на Seven.
Код на Delphi но WinApi так что с переводом проблем не будет.
Даешь винлокеры с поддержкой скинов пролетариату.

Add:
Атач забыл.

4e18_15.06.2012_EXELAB.rU.tgz - Attach.rar



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 15 июня 2012 19:04
· Личное сообщение · #21

F_a_u_s_t пишет:
Даешь винлокеры с поддержкой скинов пролетариату.

А был же какой-то винлокермэйкер, можно было менять цвет текст и еще что-то.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 15 июня 2012 19:14
· Личное сообщение · #22

Не надоело ещё ерундой заниматься с локерами? Посты выпиливать лишние буду.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 18 июня 2012 13:00 · Поправил: ARCHANGEL
· Личное сообщение · #23

F_a_u_s_t

Смотрел я на ваш пример, сделал свой, вроде бы, один в один, а не работает. Не подскажете, что не так?
--> Пример <-- Код, который на Delphi - это хороршо, но мне нужно изучить именно алго работы ShellDimScreen для устранения вышеописанной проблемы, а, как я понял, этот код и код на делфях - не одно и то же.

А к локерам мои изыскания никаких отношений не имеют, ибо я не пытаюсь его (локер) написать, и не пытаюсь после него восстанавливать систему.

Добавлено

Уже и так делал:
Code:
  1. IUnknown* lp;
, а ничего не меняется и не работает.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 18 июня 2012 13:26
· Личное сообщение · #24

ARCHANGEL
Code:
  1. typedef HRESULT (__stdcall *ShellDimScreen) (IUnknown* *Unknown, HWND* hWindow);
  2. HMODULE _ShellDimScreen(HWND hWindow)
  3. {
  4. HMODULE Dll = LoadLibraryA("msgina.dll");
  5. if (Dll != NULL)
  6. {
  7. IUnknown* Unknown; // Обязательно ибо com.
  8. ShellDimScreen Func = (ShellDimScreen) GetProcAddress(Dll,(LPSTR) 16);
  9. // hWindow HANDLE окна в котором вызываешь функу.
  10. Func(&Unknown, &hWindow);
  11. return Dll;
  12. }
  13. else
  14. return NULL;
  15. }


Мой семпл, в написании использовался самопальный класс типа mfc ну думаю суть поймешь.

Code:
  1. typedef HRESULT (__stdcall *ShellDimScreen) (IUnknown* *Unknown, HWND* hWindow);
  2.  
  3. HMODULE _ShellDimScreen(HWND hWindow)
  4. {
  5. HMODULE Dll = LoadLibraryA("msgina.dll");
  6. if (Dll != NULL)
  7. {
  8. IUnknown* Unknown;
  9. ShellDimScreen Func = (ShellDimScreen) GetProcAddress(Dll,(LPSTR) 16);
  10. Func(&Unknown, &hWindow);
  11. return Dll;
  12. }
  13. else
  14. return NULL;
  15. }
  16.  
  17. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int CmdShow)
  18. {
  19.     CWindow window;
  20.     char* ClassName = "MyApp";
  21.     char* Name = "Example";
  22.     window.Create(hInstance, ClassName, Name);
  23.  
  24.     HMODULE Dll = _ShellDimScreen(window.hWindow); // Вызываем функцию
  25.  
  26.     window.Show(CmdShow); // Тут идет цикл обработки сообщений окна, суть не важна, можно прям там //воткнуть вызов.
  27.     if (Dll != NULL)
  28.     FreeLibrary(Dll); // тут понятно, освобождаем хендл джины.
  29. // еще надо Uncnown.Release(); забыл написать. <img src="http://exelab.ruimg/smilies/s1.gif" border="0" align="" alt="">
  30.     return 0;
  31. }


У тебя просто нет задержки, оно срабатывает и сразу закрывается, делай или в цикле обработки сообщений или перед ним.

| Сообщение посчитали полезным: ARCHANGEL


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 18 июня 2012 13:47
· Личное сообщение · #25

F_a_u_s_t

Добавил

Code:
  1. ShowWindow((HWND) a2,nCmdShow);
  2. while (GetMessageA(&Mess,NULL,0,0))
  3. {
  4.          TranslateMessage(&Mess);
  5.          DispatchMessageA(&Mess);
  6. }


И всё заработало!

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 18 июня 2012 14:01
· Личное сообщение · #26

ARCHANGEL
Мои поздравления.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 20 июня 2012 11:29
· Личное сообщение · #27

В ходе изучения проблемы выяснилась следующая, весьма интересная, ситуация. При выключении компьютера диалог Завершения работы не то, чтоб не создавался, а создавался очень долго - появления этого диалога можно ожидать минутами. В ходе поиска в гугле, ресёрча с дизассемблером и активной помощи F_a_u_s_t была проведена аналогия с диалогом ShellShutdownDialog, и ситуация - идентичная. Проблема оказалась в функции WUCheckForUpdatesAtShutdown, знаете, иногда возникает такая ситуация, что перед выключением система предлагает установить обновления, и уже только потом выключить комп, либо же не устанавливать апдейты и выйти. Вот эта функа и проверяет, есть ли такие апдейты, которые следует установить. Внутри неё торможение происходит при вызове CoCreateInstance, и вообще жутко тормозит любая работа с COM - объектами. Что самое интереное, так это то, что всё неизменно тормозит на ZwRequestWaitReplyPort, и тут возникает вопрос - возможна ли такая ситуация, что проблема кроется ни в COM-интерфейсах и объектах, а в RPC или же LPC? И что по этому поводу можно почитать?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 20 июня 2012 11:35
· Личное сообщение · #28

ARCHANGEL
У меня как то был косяк с RPC так все через попу работало, так что вполне может, с LPC не разу проблем не было.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 20 июня 2012 13:34
· Личное сообщение · #29

А решение проблемы было (и есть) --> Здесь <--. Спасибо F_a_u_s_t.

-----
Stuck to the plan, always think that we would stand up, never ran.



 eXeL@B —› Программирование —› Реверсинг диалога о завершении работы Windows
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати