1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Remote desktop

Тема в разделе "WASM.NETWORKS", создана пользователем art123, 30 апр 2019.

  1. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    Сегодня просто переписывают на "свежем" языке и все ок.
     
  2. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    делать больше нечего - переписывать - посмотрел на что сигнатура стоит переставил пару строк перекомпилил и все.
     
  3. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    Ну не только, или ... едва ли только.
    Ентропия, "поведенческие вещи" вызывают срабатывание триггеров AV.
    Спокойнее переписать модуль на python и спать спокойно. Тем более что
    он окажется, порой, в два раза короче чем сишка.
    ))
     
  4. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    Можно сделать как угодно, но по моему это не интересно, поэтом пусть остается так как есть. В архиве памятник тупиковой ветви эволюции :)
    --- Сообщение объединено, 1 июн 2019 ---
    У каждого есть свое драгоценное мнение - по моему это чушь - не вдаваясь в подробности.
     

    Вложения:

    • Plugin_ver.rar
      Размер файла:
      258 КБ
      Просмотров:
      10
  5. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    Понял.
    Все равно спасибо.

    Вот пытаюсь разобраться как ты подключаешь плагины.
    Плагин. Их у меня два :
    plgDesktop
    plgTelnet

    ... и пока одинаковые :)
    Код (ASM):
    1. .586
    2. .model flat, stdcall
    3. option casemap :none   ; case sensitive
    4. include \masm32\include\windows.inc
    5. include \masm32\include\kernel32.inc
    6. include \masm32\include\masm32.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\msvcrt.inc
    9. includelib \masm32\lib\kernel32.lib
    10. includelib \masm32\lib\masm32.lib
    11. includelib \masm32\lib\user32.lib
    12. includelib \masm32\lib\msvcrt.lib
    13. include     macros.mac
    14. CALL_BACK_VTBL struct
    15.      pAddConnectionData dd ?
    16.      DelConnectionData  dd ?
    17. CALL_BACK_VTBL  ends
    18. .data?
    19. hDefaultProcessHeap  dd ?
    20. G_ServMain   dd ?
    21. .data
    22. G_Clbck          CALL_BACK_VTBL <>
    23. .code
    24. ; ##########################################################################
    25. LibMain proc hInstDLL:DWORD, reason:DWORD, unused:DWORD
    26.         .if reason == DLL_PROCESS_ATTACH
    27.             invoke GetProcessHeap
    28.             mov    hDefaultProcessHeap, eax
    29.             mov  eax, 1      
    30.         .elseif reason == DLL_PROCESS_DETACH
    31.         .elseif reason == DLL_THREAD_ATTACH
    32.         .elseif reason == DLL_THREAD_DETACH
    33.      
    34.         .endif
    35.         ret
    36. LibMain Endp
    37. ; ##########################################################################
    38. SetCallBacks proc uses esi edi  ebx pVtbl:dword
    39.       .if pVtbl != 0
    40.           invoke memcpy, addr G_Clbck, pVtbl, sizeof CALL_BACK_VTBL
    41.       .endif
    42.       ret
    43. SetCallBacks endp
    44. ; ##########################################################################
    45. ;#############################################
    46. PluginMain proc uses esi edi ebx  hsokt:dword
    47.         LOCAL  lSockt            : dword
    48.         push    hsokt
    49.         pop     lSockt    
    50.         Scall G_Clbck.pAddConnectionData, lSockt
    51.         Scall G_Clbck.DelConnectionData, lSockt
    52.         ret
    53.  
    54. PluginMain endp
    55. ;#############################################
    56. End LibMain
    Не понимаю пока смысла PluginMain , но хотел бы чтобы в Ядро попала строка - "I'm from Plug Desktop". И Ядро соответственно эту строку вывело.
    Не знаю как туда передать эту строку.



    Ядро
    Код (ASM):
    1. .686
    2. .mmx
    3. .xmm
    4. .model flat, stdcall
    5. option casemap :none   ; case sensitive
    6. include \masm32\include\windows.inc
    7. include \masm32\include\kernel32.inc
    8. include \masm32\include\masm32.inc
    9. include \masm32\include\user32.inc
    10. include \masm32\include\msvcrt.inc
    11. includelib \masm32\lib\kernel32.lib
    12. includelib \masm32\lib\masm32.lib
    13. includelib \masm32\lib\user32.lib
    14. includelib \masm32\lib\msvcrt.lib
    15. include     macros.mac
    16. CALL_BACK_VTBL struct
    17.     pAddConnectionData dd ?
    18.       DelConnectionData  dd ?
    19. CALL_BACK_VTBL  ends
    20. .data?
    21.       g_isPlug    dd ?
    22.       ptDeskPlg db 300 dup (?)
    23.       ptTelnPlg db 300 dup (?)
    24.       pDesktopSession dd ?
    25.       pTelnetSession dd ?
    26.       hDeskPlg dd ?
    27.       hTelnPlg dd ?
    28. .data
    29. g_calback  CALL_BACK_VTBL <offset AddConnectionData, offset DelConnectionData>
    30. szDeskPlg  db "plgDesktop.dll",0
    31. szTelnPlg  db "plgTelnet.dll",0
    32. szplmain db "PluginMain",0
    33. sxsetclb db "SetCallBacks",0
    34. sznoplug db "You have not installed a single plug-in",0dh,0ah
    35.                 db "  - server operation is not possible!!!",0
    36. szRerror   db      "Server Errror",0
    37. .code
    38. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    39. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    40. start:
    41. call GetPlugins
    42. invoke ExitProcess, 0
    43. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    44.  GetPlugins proc uses esi edi ebx
    45.       LOCAL   lsMonm[300]:byte
    46.       mov     g_isPlug, 0
    47.       invoke  GetModuleFileName, 0, addr lsMonm, 300
    48.       lea     esi, lsMonm
    49.       .while eax != 0
    50.          .if byte ptr [esi+eax] == 5ch
    51.             mov [esi+eax+1], byte ptr 0
    52.             invoke lstrcpy, addr ptDeskPlg, addr lsMonm
    53.             invoke lstrcat, addr ptDeskPlg, addr szDeskPlg
    54.             invoke lstrcpy, addr ptTelnPlg, addr lsMonm
    55.             invoke lstrcat, addr ptTelnPlg, addr szTelnPlg
    56.      
    57.             .break
    58.          .endif    
    59.          dec  eax
    60.       .endw
    61.       invoke  LoadLibrary, addr szDeskPlg
    62.       mov     hDeskPlg, eax
    63.       .if  eax != 0
    64.          invoke GetProcAddress,  hDeskPlg,   addr szplmain
    65.          mov    pDesktopSession, eax
    66.          invoke GetProcAddress,  hDeskPlg,   addr sxsetclb
    67.          Scall  eax, offset g_calback
    68.          inc    g_isPlug
    69.       .endif
    70.       invoke  LoadLibrary, addr szTelnPlg
    71.       mov     hTelnPlg, eax
    72.       .if  eax != 0
    73.          invoke GetProcAddress,  hTelnPlg,   addr szplmain
    74.          mov    pTelnetSession, eax
    75.          invoke GetProcAddress,  hTelnPlg,   addr sxsetclb
    76.          Scall  eax, offset g_calback
    77.          inc    g_isPlug
    78.       .endif
    79.       .if  g_isPlug == 0      
    80.          invoke MessageBox, 0, addr sznoplug, addr szRerror, 0
    81.         invoke ExitProcess, 0
    82.       .endif
    83.       ret
    84. GetPlugins endp
    85. end start
    86.  

    Вроде все учел, НО мое Ядро НЕ собирается.
    Пишет
    Код (Text):
    1.  
    2.  Assembling: core.asm
    3. error A4910: cannot open file: C:\masm32\bin\ml.err
    4. core.asm(42) : error A2006:  : AddConnectionData
    5. core.asm(42) : error A2006:  : DelConnectionData
    ... тоже не понимаю как устранить.

    Подскажи пожалуйста. Тебе все равно плагины не нравятся )))
    Спасибо.
    Вот архивчик с моими страданиями :)))
     

    Вложения:

    • _plg01.rar
      Размер файла:
      7,1 КБ
      Просмотров:
      11
  6. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    ошибка тут
    g_calback CALL_BACK_VTBL <offset AddConnectionData, offset DelConnectionData>

    Тела этих функций находятся в коде сервера в плагине только адреса для обратного вызова. Адреса заполняются при загрузке плагина. По сути проблемы - структура должна быть пустая. G_Clbck CALL_BACK_VTBL <>
     
  7. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    Не ну в плагинах она есть и пустая.

    А, то есть прототипы я должен прописать же в core.asm ?
    Код (ASM):
    1. .686
    2. .mmx
    3. .xmm
    4. .model flat, stdcall
    5. option casemap :none   ; case sensitive
    6. include \masm32\include\windows.inc
    7. include \masm32\include\kernel32.inc
    8. include \masm32\include\masm32.inc
    9. include \masm32\include\user32.inc
    10. include \masm32\include\msvcrt.inc
    11. includelib \masm32\lib\kernel32.lib
    12. includelib \masm32\lib\masm32.lib
    13. includelib \masm32\lib\user32.lib
    14. includelib \masm32\lib\msvcrt.lib
    15. include     macros.mac
    16. DelConnectionData       proto :dword
    17. AddConnectionData       proto :dword
    18. CALL_BACK_VTBL struct
    19.     pAddConnectionData dd ?
    20.       DelConnectionData  dd ?
    21. CALL_BACK_VTBL  ends
    22. .data?
    23.       g_isPlug    dd ?
    24.       ptDeskPlg db 300 dup (?)
    25.       ptTelnPlg db 300 dup (?)
    26.       pDesktopSession dd ?
    27.       pTelnetSession dd ?
    28.       hDeskPlg dd ?
    29.       hTelnPlg dd ?
    30. .data
    31. g_calback  CALL_BACK_VTBL <offset AddConnectionData, offset DelConnectionData>
    32. ;G_Clbck CALL_BACK_VTBL <>
    33. szDeskPlg  db "plgDesktop.dll",0
    34. szTelnPlg  db "plgTelnet.dll",0
    35. szplmain db "PluginMain",0
    36. sxsetclb db "SetCallBacks",0
    37. sznoplug db "You have not installed a single plug-in",0dh,0ah
    38.                 db "  - server operation is not possible!!!",0
    39. szRerror   db      "Server Errror",0
    40. .code
    41. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    42. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
    43. start:
    44. call GetPlugins
    45. invoke ExitProcess, 0
    46. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    47.  GetPlugins proc uses esi edi ebx
    48.       LOCAL   lsMonm[300]:byte
    49.       mov     g_isPlug, 0
    50.       invoke  GetModuleFileName, 0, addr lsMonm, 300
    51.       lea     esi, lsMonm
    52.       .while eax != 0
    53.          .if byte ptr [esi+eax] == 5ch
    54.             mov [esi+eax+1], byte ptr 0
    55.             invoke lstrcpy, addr ptDeskPlg, addr lsMonm
    56.             invoke lstrcat, addr ptDeskPlg, addr szDeskPlg
    57.             invoke lstrcpy, addr ptTelnPlg, addr lsMonm
    58.             invoke lstrcat, addr ptTelnPlg, addr szTelnPlg
    59.          
    60.             .break
    61.          .endif        
    62.          dec  eax
    63.       .endw
    64.       invoke  LoadLibrary, addr szDeskPlg
    65.       mov     hDeskPlg, eax
    66.       .if  eax != 0
    67.          invoke GetProcAddress,  hDeskPlg,   addr szplmain
    68.          mov    pDesktopSession, eax
    69.          invoke GetProcAddress,  hDeskPlg,   addr sxsetclb
    70.          Scall  eax, offset g_calback
    71.          inc    g_isPlug
    72.       .endif
    73.       invoke  LoadLibrary, addr szTelnPlg
    74.       mov     hTelnPlg, eax
    75.       .if  eax != 0
    76.          invoke GetProcAddress,  hTelnPlg,   addr szplmain
    77.          mov    pTelnetSession, eax
    78.          invoke GetProcAddress,  hTelnPlg,   addr sxsetclb
    79.          Scall  eax, offset g_calback
    80.          inc    g_isPlug
    81.       .endif
    82.       .if  g_isPlug == 0          
    83.          invoke MessageBox, 0, addr sznoplug, addr szRerror, 0
    84.         invoke ExitProcess, 0
    85.       .endif    
    86.       ret
    87. GetPlugins endp
    88. end start
    ... все равно не собирается :dntknw:

    Код (Text):
    1. C:\_temp\_plg01>\masm32\bin\Link /SUBSYSTEM:CONSOLE   /FIXED:NO core.obj
    2. Microsoft (R) Incremental Linker Version 5.12.8078
    3. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    4. core.obj : error LNK2001: unresolved external symbol _DelConnectionData@4
    5. core.obj : error LNK2001: unresolved external symbol _AddConnectionData@4
    6. core.exe : fatal error LNK1120: 2 unresolved externals
     
  8. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    я только сейчас увидел что ты делаешь - ты типа ядро собираешь для плагинов :) У тебя немного странное представление о структуре программы. Ядро не только грузит плагины - оно обеспечивает авторизацию и транспортировку данных клиенту. В твоем ядре как я понял только одна функция загрузки плагинов - маловато будет.
     
  9. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    ... еще не понятно. один адрес "pAddConnectionData" а другой "DelConnectionData" - без "p"
    Код (ASM):
    1. CALL_BACK_VTBL struct
    2.     pAddConnectionData dd ?
    3.       DelConnectionData  dd ?
    4. CALL_BACK_VTBL  ends
    а прототипы :

    DelConnectionData proto :dword
    AddConnectionData proto :dword

    без буквы "p"
    Ну да. Я же учусь. :)
    Моя задача - подгрузить плагин и вывести в ядре строку из плагина. Например "I'm from Plugue #N", где N - количеств номер dll - ки
    Чисто для расширения собственных горизонтов.
     
  10. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    правильно с р. потому что ссылка на элементы используется в плагине. ядру все рано что там написано - просто два дворда.
    --- Сообщение объединено, 1 июн 2019 ---
    может ты просто хочешь отладить процедуру загрузки плагинов - сделай заглушки для этих функций.
     
  11. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    Понял, спасибо , так и сделал.

    Далее рисунок с вопросом )))
    Не терпится просто , а писать долго )))


    [​IMG]
     

    Вложения:

  12. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    Вроде все правильно нарисовано.
    Но, ты очень много значения придаешь этим функциям - они нужны только чтобы показать ИП адреса актуальных подключений в окошке вызванном из трея. Закомментируй это ;
    Scall G_Clbck.pAddConnectionData, lSockt в плагине и пересобери его. Эти калбаки не мешают основной работе - они для информации.
    Не очень понятно куда ты хочешь выводить строку ? Ядро принимает вызов от клиента, проводит авторизацию, потом по ИДу сервиса передает соответствующему плагину клиентский сокет и все. Что плагин пишет в сокет ядру плевать. Так что я не понимаю твоей инициативы ;)
     
  13. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    Спасибо.
    Ну я просто пока разбираюсь.
    А вот вопрос - как наладить "общение" между плагинами?
     
  14. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    Исключительно для образовательных целей - больше ничего с плагинами делать не буду. В архиве клиент(ядро+4 плагина) и сервер (ядро+4 плагина) 4-тый плагин клиента шлет 4-тому плагину сервера строку из эдит бокса - плагин сервера ее получает и отправляет назад - клиентский плагин выводит ее в мессбоксе. В прицепе если тебе хочется понять как взаимодействует ядро с плагинами, то это облегчит тебе задачу.
     

    Вложения:

    • plugins_ver.rar
      Размер файла:
      316 КБ
      Просмотров:
      13
  15. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    Спасибо за твое время.
    Буду разбираться
    )))
     
  16. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    Из всей истории с плагинами мне показалось немного интересно только если клиент будет полагинный, а сервер нет. И то только потому. что легко можно урезать функциональность - убрал плагин для телнет и нет телнета :) Больше ничего.
     
  17. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    ... ну да, получится что и сам сервер становится "плагином",
    своего рода, для такого КЛИЕНТА
    ))
     
  18. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    В результате экскримента ) со скринлогерами победителем оказался вариант openGL. Так что использую его. Всем спасибо за внимание.
     
  19. __sheva740

    __sheva740 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2017
    Сообщения:
    223
    Спасибо.
     
  20. art123

    art123 Member

    Публикаций:
    0
    Регистрация:
    7 мар 2019
    Сообщения:
    73
    На здоровье.