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

 eXeL@B —› Программирование —› Windows I/o без Kernel32.dll и Advapi32.dll
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

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

Добрый день.
Необходимо в Windows XP SP3 распечатать в стандартный поток "some text here" без прямого или косвенного использования kernel32.dll и advapi32.dll (в иделе программа вообще с этими библиотеками слинкована быть не должна). В распоряжении С и ассемблер x86; Microsoft Visual Studio 2005 и MASM.

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

В чем сложность: сложно получить ответ от гугла, если в строке поиска указать "bla bla bla без kernel32.dll". Получаешь непременно с "kernel32.dll".

Почему пишу на этот форум:
[QUOTE=winasm]
You try to make a hello world example wihout kernel.lib?
If this correct if not allowed in this forum,this is virus-Technology[/QUOTE]

Насколько я вижу решение задачи - нужно обойти API используя native API, тоесть прямиком к ntdll.dll.
Проблема в том, что даже минимальное приложение на MASM32 у меня не получается собрать без kernel32.dll.

Я хотябы в правильную сторону смотрю?




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

Создано: 20 июня 2010 16:57
· Личное сообщение · #2

Плохо стараешься, если не получается без кернела собрать любое приложение. Юзай натив апи, линкуй с нтдлл да и всё, на асме вообще без проблем. Ну если на сях, немножко больше гемора, типа убирать рантайм ещё, свою точку входа определить.
И что подразумевается под стандартным потоком? Вывод в консоль? В файл? Вообще любой поток сишный?



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

Создано: 20 июня 2010 22:46 · Поправил: s0l
· Личное сообщение · #3

а что мешает в гугле сделать запрос:
Code:
  1. бла-бла-бла "без kernel32.dll"

или
Code:
  1. bla-bla-bla "without kernel32.dll"




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 июня 2010 09:35
· Личное сообщение · #4

Archer пишет:
Плохо стараешься, если не получается без кернела собрать любое приложение. Юзай натив апи, линкуй с нтдлл да и всё, на асме вообще без проблем.

Стало стыдно, спасибо. Уполз обратно в пещеру до появления умных вопросов.

Archer пишет:
И что подразумевается под стандартным потоком? Вывод в консоль? В файл? Вообще любой поток сишный?

Ну, вообще, хотелось бы, чтобы программа работала так:
при запуске ее C:\>program она выводила на консоль
При запуске c:\>program > file она выводила в файл file
При запуске c:\>program | more она выводила в трубу.
Но это уже потом.

s0l пишет:
а что мешает в гугле сделать запрос:
Code:
бла-бла-бла "без kernel32.dll"


А ты попробуй




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

Создано: 21 июня 2010 17:10
· Личное сообщение · #5

Ну если надо фактически любой сишный поток, ну будет несколько больше порнографии с парсингом этого всего дела, но в принципе суть не меняется: выяснить, какие нужны натив апи (отревёрсить нужные функи до самого низа), писать софт на нативе и линковать с нтдлл.
Гугли, что такое натив апи, как его вызывать, как линковать, не вижу ничего такого, что гугл бы не дал.




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

Создано: 21 июня 2010 18:50
· Личное сообщение · #6

не знаю поможет или нет, но чтобы записать в консоль надо вызывать CsrClientCallServer с какими то параметрами там (не помню)



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 июня 2010 22:02
· Личное сообщение · #7

Всем принявшим участие спасибо!

Задачу решил BaGiE, за что ему честь и хвала!

d626_24.06.2010_CRACKLAB.rU.tgz - HelloWorld.JPG



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 25 июня 2010 13:10
· Личное сообщение · #8

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




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

Создано: 25 июня 2010 15:44 · Поправил: BaGiE
· Личное сообщение · #9

cppasm
я такое решение автору предложил. тестировалось только на xpsp3.

Code:
  1. format PE Console 5.0
  2.  
  3. include 'win32wx.inc'
  4. include 'encoding/win1251.inc'
  5.  
  6. struct CLIENT_ID
  7.        UniqueProcess dd ?
  8.        UniqueThread dd ?
  9. ends
  10.  
  11. struct PORT_MESSAGE
  12.        Length dd ?
  13.        ZeroInit dd ?
  14.        ClientId CLIENT_ID
  15.        Unknown dq ?
  16.        MessageId dd ?
  17.        CallbackId dd ?
  18. ends
  19.  
  20. struct CSRSS_WRITE_CONSOLE_REQUEST
  21.        Header PORT_MESSAGE
  22.        Unknown dq ?
  23.        ConsoleHandle dd ?
  24.        StdHandle dd ?
  25.        Buffer du 40 dup ?  ; 0x50 bytes max (40 WCHARs)
  26.        BufferAddress dd ? ; ???
  27.        BufferLength dd ?
  28.        Unknown2 dd ?
  29.        UnknownFlag db ?
  30.        IsUnicode db ?
  31.        Unknown4 db 42 dup ?
  32.        Unknown5 dd ?
  33.        Unknown6 db 116 dup ?
  34. ends
  35.  
  36. .code
  37.  
  38. entry Main
  39.  
  40. proc Main
  41.  
  42.      locals
  43.          Request CSRSS_WRITE_CONSOLE_REQUEST
  44.      endl
  45.  
  46.      xor eax,eax
  47.      lea edi,[Request]
  48.      mov ecx,sizeof.CSRSS_WRITE_CONSOLE_REQUEST
  49.      rep stosb
  50.  
  51.      xor eax,eax
  52.      mov eax,[fs:eax+0x30]
  53.      mov eax,[eax+0x10] ; RTL_USER_PROCESS_PARAMETERS
  54.      mov edx,[eax+0x10] ; ProcessParameters.ConsoleHandle
  55.      mov [Request.ConsoleHandle],edx
  56.      mov edx,[eax+0x1c] ; ProcessParameters.StdOutputHandle
  57.      mov [Request.StdHandle],edx
  58.      mov [Request.UnknownFlag],1
  59.      mov [Request.IsUnicode],1
  60.      mov [Request.Unknown5],-1
  61.  
  62.      lea esi,[wstrMessage]
  63.      lea edi,[Request.Buffer]
  64.      mov [Request.BufferAddress],edi
  65.      mov [Request.BufferLength],sizeof.wstrMessage
  66.      mov ecx,sizeof.wstrMessage shr 1
  67.      rep movsw
  68.  
  69.      invoke CsrClientCallServer,addr Request,NULL,0x0002021e,0x0000006c
  70.  
  71.      ret
  72. endp
  73.  
  74. .data
  75.  
  76.      wstrMessage du 'Hello, World!'
  77.      sizeof.wstrMessage = $-wstrMessage
  78.  
  79.      data import
  80.  
  81.          library ntdll,'NTDLL.DLL'
  82.  
  83.          import ntdll,\
  84.                 CsrClientCallServer,'CsrClientCallServer'
  85.  
  86.      end data





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

Создано: 26 июня 2010 05:58 · Поправил: BaGiE
· Личное сообщение · #10

кому интересно то вот вариант без CsrClientCallServer и вообще без импортов к тому же на WinXP SP0 тоже заработало как и на SP3 и наверняка на SP1,SP2 робит

Code:
  1. format PE Console 5.0 on 'empty.bin'
  2.  
  3. include 'win32wxp.inc'
  4. include 'encoding/win1251.inc'
  5.  
  6. struct CLIENT_ID
  7.        UniqueProcess dd ?
  8.        UniqueThread dd ?
  9. ends
  10.  
  11. struct PORT_MESSAGE
  12.        Length dd ?
  13.        ZeroInit dd ?
  14.        ClientId CLIENT_ID
  15.        Unknown dq ?
  16.        MessageId dd ?
  17.        CallbackId dd ?
  18. ends
  19.  
  20. struct CSRSS_WRITE_CONSOLE_REQUEST
  21.        Header PORT_MESSAGE
  22.        Unknown dq ?
  23.        ConsoleHandle dd ?
  24.        StdHandle dd ?
  25.        Buffer du 40 dup ?  ; 0x50 bytes max (40 WCHARs)
  26.        BufferAddress dd ?
  27.        BufferLength dd ?
  28.        Unknown2 dd ?
  29.        UnknownFlag db ?
  30.        IsUnicode db ?
  31.        Unknown4 db 42 dup ?
  32.        Unknown5 dd ?
  33.        Unknown6 db 116 dup ?
  34. ends
  35.  
  36. section '' code data readable executable
  37.  
  38. entry _main
  39.  
  40. proc _main
  41.  
  42.      stdcall _write,0x18,wstrMessage,sizeof.wstrMessage
  43.      cmp eax,0xc0000008 ; handle not valid
  44.      jne @f
  45.      stdcall _write,0x07ec,wstrMessage,sizeof.wstrMessage
  46. @@:
  47.  
  48.      ret
  49. endp
  50.  
  51. proc _write uses esi edi,CsrPortHandle:DWORD,Buf,Length
  52.  
  53.      local Request:CSRSS_WRITE_CONSOLE_REQUEST
  54.  
  55.      xor eax,eax
  56.      lea edi,[Request]
  57.      mov ecx,sizeof.CSRSS_WRITE_CONSOLE_REQUEST
  58.      rep stosb
  59.  
  60.      xor eax,eax
  61.      mov eax,[fs:eax+0x30]
  62.      mov eax,[eax+0x10] ; RTL_USER_PROCESS_PARAMETERS
  63.      mov edx,[eax+0x10] ; ProcessParameters.ConsoleHandle
  64.      mov [Request.ConsoleHandle],edx
  65.      mov edx,[eax+0x1c] ; ProcessParameters.StdOutputHandle
  66.      mov [Request.StdHandle],edx
  67.      mov [Request.UnknownFlag],1
  68.      mov [Request.IsUnicode],1
  69.  
  70.      mov esi,[Buf]
  71.      lea edi,[Request.Buffer]
  72.      mov ecx,[Length]
  73.      mov [Request.BufferLength],ecx
  74.      shr ecx,1
  75.      rep movsw
  76.  
  77.      mov [Request.Header.Length],0x0098007c
  78.      mov [Request.Header.CallbackId],0x0002021e
  79.  
  80.      lea edx,[Request]
  81.      push edx edx [CsrPortHandle] @f
  82.      mov eax,0xc8
  83.      lea edx,[esp+4]
  84.      int 0x2e
  85. @@:  add esp,16
  86.  
  87.      ret
  88. endp
  89.  
  90.      wstrMessage du 'I ',0x2665,' FASM : )'
  91.      sizeof.wstrMessage = $-wstrMessage
  92.  


//походу еще и баг нашелся на форуме. в {ASM}{/ASM} смайлы пытается тоже подменять на картинки. там в коде в строке смайл du ': )' выглядит как
Code:
  1. du '<img src="http://exelab.ruimg/smilies/s1.gif" border="0" align="" alt="">'




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 26 июня 2010 12:03
· Личное сообщение · #11


Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 26 июня 2010 14:23 · Поправил: DenCoder
· Личное сообщение · #12

BaGiE
Раз XP, то можно sysenter вместо int 2E, быстрее будет.

-----
IZ.RU




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 26 июня 2010 16:33
· Личное сообщение · #13

DenCoder
Шлюзы напрямую юзаются очень редко. Быдло их использовать не может изза проблем с совместимостью.




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

Создано: 27 июня 2010 06:11 · Поправил: BaGiE
· Личное сообщение · #14

Clerk
да, спасибо, но изначально смотрелось только для xp, а в других виндах, видимо, формат и структуры LPC-сообщений другие. на 64-битных виндах читал еще какая-то особенность с LPC есть. а переносить код с WriteConsoleA(W) автор не разрешает к тому же в требованиях именно xp (вопрос совместимости не стоит) и коду поменьше.
кстати, может знаете где почитать я не в курсе почему если приложение запускаем непосредственно CsrPortHandle==$18, а если через cmd.exe, например, то $7ec
; кстати, разобрался почему. ключевое слово bInheritHandles

DenCoder
да, тут лучше так. вариации по сабжу)



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

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

DenCoder
Зависит от TF. Если выполнен фасткал с взведённым TF, то скорость исполнения падает в 1.48 раза(по сравнению с Int 0x2e). Trap.asm, 1083:
> ; This is NOT a performance path.
> PUBLIC _KiFastCallEntry2
Иногда это важно.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 14 июля 2010 21:08
· Личное сообщение · #16

О, как раз сейчас смотрю KiSystemService, KiFastCallEntry и KiFastCallEntry2. KiFastCallEntry2 отличается от KiFastCallEntry тем, что в нем взводится TF перед джампом на общий фрагмент. Вот вопрос: при каких условиях вызывается KiFastCallEntry2 вместо 1-ой?

-----
IZ.RU




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 14 июля 2010 22:06
· Личное сообщение · #17

DenCoder
Сказал ведь что взведён TF. Инструкция Sysenter не маскирует этот флаг, изза чего генерится #DB после смены кпл. ISR #DB проверяет адрес останова и если он равен KiFastCallEntry(), то трап откатывается - управление передаётся на KiFastCallEntry2(), она формирует часть трап-фрейма для поправки флагов, взводит TF, так как при возврате в юзермод он должен быть взведён и продолжает исполнение нормальным путём.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 14 июля 2010 22:14
· Личное сообщение · #18

Ага, точно, нашел. Спасибо!

-----
IZ.RU





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 14 июля 2010 22:44 · Поправил: Модератор
· Личное сообщение · #19

От модератора: Если читающий не знает что такое кпл, то ему не форум надо читать...

P.S. Для личных вопросов НЕ модератору есть Личные сообщения. В следующий раз бан для профилактики.

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 16 июля 2010 17:20
· Личное сообщение · #20

Мой пост можно было и оставить

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes



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


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