ProcessClose("calc.exe")

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 16 окт 2009.

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Semiono
    А зачем Вы подключаете shell32.inc, если я дал нормальное описание импорта, содержащего необходимую функцию? Не всегда в инклудах есть необходимые функции.
    Аналогично. Зачем цеплять, если весь необходимый импорт уже описан? Хочется чего-то ещё, дописывайте по аналогии директорию импорта (список ф-ий между data import и end data).
     
  2. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    Ну теперь и я убедился, что лучше самому всё указывать! Однако обидно за дистрибутив, то что они
    не доводят до ума инклюды, или это не так просто как кажется? :) (среди всех win32 versions)
    Я просто хотел затестировать инклюд, ну вот и выяснил что лажа. Правда есть ещё pcount и equates,
    непонятного предназначения...
    это понятно, хотя я думал такие функции в win32wx.inc должны быть? Хотя я что-то слышал,
    типа это линки для совместимости ядра... типа в ascii версиях имена unicode...
    Лучше об этом не задумываится, всёравно темень! :)
     
  3. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Да, большинство функций SomeApiA это обёртки над SomeApiW.
    Они просто преобразуют параметры в юникод и вызывают W функцию.

    Но это не тот случай. CommandLineToArgvA нету вообще, только юникод версия.
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Semiono
    Никто не говорил, что это лучше. По большому счёту я бы даже сказал, что это не очень удобно: каждый раз описывать весь используемый импорт. Но это моё предпочтение, поэтому и описал отдельно... для наглядности.
    А вот в кучу смешивать, разумеется, не нужно. Если Вы засунули в импорт include '%fasm%\api\kernel32.inc', то будьте добры не объявляйте те же самые метки повторно.
    Это элементарно просто. Хотите, пополните. Можно написать довольно простой парсер экспорта произвольной dll, который будет строить соответствующую инклуду одним щелчком мыши. Почему в инклудах не все функции, не знаю... автору захотелось так.
    Вы бы заглянули в win32wx.inc да посмотрели, что там есть. Реальное описание всех меток для апи-функций находится только в соответствующей инклуде типа kernel32.inc или user32.inc и т.п. независимо от того, Unicode-версия Вам нужна или ASCII. После подключения оных явно или неявно (через инклуды с суффиксом x) Вы можете использовать любые указанные там апи. А вот во что будет раскрываться какой-нибудь GetCommandLine — в GetCommandLineA или в GetCommandLineW — определяется тем, какую инклуду Вы подключили для раскрытия макроса "api": win32a.inc или win32w.inc.
     
  5. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    Всё, я теперь гуру! =)
    Код (Text):
    1. include '%fasm%\win32ax.inc'
    2. entry start
    3.  
    4. section '.rsrc' resource data executable readable writeable
    5.         directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions
    6.  
    7.         resource icons,\
    8.         1,LANG_NEUTRAL,icon_data1,\
    9.         2,LANG_NEUTRAL,icon_data2,\
    10.         3,LANG_NEUTRAL,icon_data3,\
    11.         4,LANG_NEUTRAL,icon_data4
    12.         resource group_icons,17,LANG_NEUTRAL,main_icon
    13.         resource versions,1,LANG_NEUTRAL,version
    14.  
    15.         icon main_icon,\
    16.         icon_data1,'%icons%\16x16.ico',\
    17.         icon_data2,'%icons%\32x32.ico',\
    18.         icon_data3,'%icons%\48x48.ico',\
    19.         icon_data4,'%icons%\64x64.ico'
    20.  
    21.         versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\
    22.                     'FileDescription','psskill...',\
    23.                     'LegalCopyright','2001-2005 GmbH',\
    24.                     'FileVersion','1.0.0.0',\
    25.                     'ProductVersion','1.0.0.0',\
    26.                     'OriginalFilename','psskill.exe',\
    27.                     'Company','msdn'
    28.  
    29. start:  ; l_inc
    30.         invoke GetCommandLine
    31.         invoke CommandLineToArgv,eax,argsNum
    32.         cmp dword[argsNum],1
    33.         push eax
    34.         jbe @F  ; jump_if_below_or_equal
    35.                 push dword[eax+4]
    36.                 call AdjustMyToken
    37.                 stdcall findProcessID
    38.                 test eax,eax                    ; _\|/_
    39.                 jz @F                           ; _\|/_
    40.                 invoke OpenProcess,PROCESS_TERMINATE,FALSE,eax
    41.                 push eax
    42.                 invoke TerminateProcess,eax,1
    43.                 invoke CloseHandle
    44.                 jmp start                       ; _\|/_
    45.         @@:
    46. ;        invoke LocalFree
    47.         invoke ExitProcess,0
    48. ret
    49.  
    50.         argsNum dd ?
    51.  
    52. section '.idata' import data executable readable writeable
    53.         library advapi32,'ADVAPI32.dll',kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL'
    54.         include '%fasm%\api\advapi32.inc'
    55.         import kernel32,OpenProcess,'OpenProcess',\
    56.                         TerminateProcess,'TerminateProcess',\
    57.                         CloseHandle,'CloseHandle',\
    58.                         lstrcmpi,'lstrcmpiW',\
    59.                         CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\
    60.                         Process32First,'Process32FirstW',\
    61.                         Process32Next,'Process32NextW',\
    62.                         GetCommandLine,'GetCommandLineW',\
    63.                         LocalFree,'LocalFree',ExitProcess,'ExitProcess'
    64.         import shell32,CommandLineToArgv,'CommandLineToArgvW'
    65.  
    66.         TOKEN_ADJUST_PRIVILEGES equ 20h
    67.         TOKEN_QUERY             equ 8h
    68.         SE_PRIVILEGE_ENABLED    equ 2h
    69.  
    70. AdjustMyToken:
    71.         invoke LookupPrivilegeValue,emptyStr,privName,tokenPriv.LUID1
    72.         mov dword[tokenPriv.PrivilegeCount],1h
    73.         mov dword[tokenPriv.Attributes],SE_PRIVILEGE_ENABLED
    74.         invoke OpenProcessToken,-1,TOKEN_ADJUST_PRIVILEGES OR TOKEN_QUERY,hToken
    75.         invoke AdjustTokenPrivileges,[hToken],FALSE,tokenPriv,0,0,0
    76.         invoke CloseHandle,[hToken]
    77. ret
    78.  
    79.         emptyStr                db '',0
    80.         privName                db 'SeDebugPrivilege',0
    81.  
    82. struct TOKEN_PRIVILEGES
    83.         PrivilegeCount          dd ?
    84.         LUID1                   dd ?
    85.         LUID2                   dd ?
    86.         Attributes              dd ?
    87. ends
    88.  
    89.         hToken  dd ?
    90.  
    91.         TH32CS_SNAPPROCESS      equ 2
    92.  
    93. findProcessID: ; takes one parameter through stack: pointer to the process name
    94.         push ebp
    95.         invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
    96.         mov ebp,eax
    97.         mov dword[procEntry.dwSize],sizeof.PROCESSENTRY32W
    98.         invoke Process32First,eax,procEntry
    99.         @@:
    100.                 invoke Process32Next,ebp,procEntry
    101.                 test eax,eax
    102.                 jz @F
    103.                 invoke lstrcmpi,procEntry.szExeFile,dword[esp+8]
    104.                 test eax,eax
    105.         jnz @B
    106.         mov eax,dword[procEntry.th32ProcessID]
    107.         @@:
    108.         pop ebp
    109. retn 4
    110.  
    111. struct PROCESSENTRY32W
    112.         dwSize                  dd ?
    113.         cntUsage                dd ?
    114.         th32ProcessID           dd ?
    115.         th32DefaultHeapID       dd ?
    116.         th32ModuleID            dd ?
    117.         cntThreads              dd ?
    118.         th32ParentProcessID     dd ?
    119.         pcPriClassBase          dd ?
    120.         dwFlags                 dd ?
    121.         szExeFile               dw MAX_PATH dup (?)
    122. ends
    123.  
    124.         tokenPriv               TOKEN_PRIVILEGES <>
    125.         procEntry               PROCESSENTRY32W <>
    126.  
    127.         align 4
    самый баг был в том, что ExitProcess отсутствовало, я ж понадеялся что LocalFree закрывает всё корректно, и когда вылетало memory could not be "read" я думал у меня цикл кривой получается,
    и так по кругу пару ночей! старый добрый ExitProcess, 0 я ж его ещё когда очень-первые шаги делал
    именно на таком ерроре выхватил, а тут же знал но тупил :)
    но парни, может оптимизировать ещё больше можно чёнитьбудь? моджед есть покрасивше вариант?
     
  6. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    Кенгуру
    че за ежи?
     
  7. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    это код который я с укурки писал, а потом как выяснилось он правильный =)
     
  8. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    _\|/...
     
  9. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    Что такое треды? Каково практическое их применение?
    invoke Threads32First или даже invoke Heap32First
    можно ли так убить процесс? если нет то нафига они нужны?
     
  10. ant_man

    ant_man New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2004
    Сообщения:
    23
    Действительно, кому нужны операции, не приводящие к смерти хотя бы одного процесса...

    CreateRemoteThread(CalcProcessHandle, 0, 0, address_of_ExitProcess, 0, 0, 0);
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Semiono
    То, что Вы сделали с моим кодом, — это ужасно. Одними замечаниями тут трудно ограничиться, т.к. код превратился в бессмысленную кашу. Поэтому отвечу только на русскую часть сообщения.
    +1
    Самый баг в том, что Вы так решили. Одного ret вполне достаточно при условии правильности остального кода.
    В оригинале LocalFree освобождал память под распарсенные с помощью CommandLineToArgv аргументы. Причём LocalFree принимал параметр, переданный через расположенную перед jbe @F инструкцию push eax. Теперь параметр передаётся, а функция не вызывается.
    "Выяснилось", я полагаю, ещё до завершения "укурки".
    Главное что "некрасивше" вариант вряд ли найдётся. :derisive:
     
  12. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    l_inc, я не хотел Ваш код испортить! Я хотел только, добиться решения проблеммы.
    Но а как я это делаю, я по другому не могу, что я виноват чтоли! :)
    То что я секции двигал, это ради собственного познавательного процесса,
    но сам код я почти не трогал, там всё Вами написано, за исключением моих "ежей" )))
    Ещё Вы правы, насколько я понимаю, надо в процедуре findProcessID крутиться, ибо у меня
    получается наверное, что снапшёт создаётся многократно, что плохо. Я попытаюсь это исправить.
    Просто я так рад был когда получилось! Две ночи сидел и всё без толку, я же методом
    тыка практически кодю ))) (это мне заменяет укурку)
    Но благодаря этой программе я много пользы извлёк, хотяб я теперь твёрдо знаю анонимные джампы, раньше теоретически это до меня не доходило почему-то.
    Кстати, там размер файла варьировался от 85 504 bytes до 86016 bytes в зависимости от
    размещения данных.

    Ну я согласен, это в моей интерпретации ошибка.
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Semiono
    Ну Вы в общем исправляйте до максимально приемлемого вида, где нету многократного создания снимков и взятия/парсинга командной строки (которые теперь странным образом тоже выполняются в цикле), нету бессмысленных прыжков между столь же бессмысленными секциями, нету стрёмных ресурсов со строками вида "2001-2005 GmbH" и висячего align 4, утратившего свой смысл после отсылки на край исходника. Ну в общем когда в конце-концов размер файла будет варьироваться не "от 85 504 bytes до 86016 bytes", а между 1 024 и 1 536 байт, тогда выкладывайте, что получилось. :)
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    P.S. И пользуйтесь, наконец, MSDN и OllyDebug. Тогда уходить будет не две ночи, а полчаса.
     
  15. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    8-)
     
  16. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    OllyDebug - я знаю, но пока мне очень тяжело.
    Кроме статей введения в крекинг не знаю что почитать...
     
  17. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Semiono
    По-моему этих статей более, чем достаточно. Причём для понимания основных концепций работы с отладчиком первых 15-ти вполне хватит. Тем более для отладки собственных программ на асме.
     
  18. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    Одну мысль скажу пока не забыл. :)
    Понятное дело, что новичку тем более не следует начинать с этого, ну и вообщем кашеобразный код не есть хорошо! Однако, сиё существует, и как бы поразмыслить, какие нить хакеры наверняка
    используют такое чтоб запутать других :)
    Кароче, былоб не плохо в этом разбираться как-то! Я допустим загрузив в ольку свой бинарь
    нифига там не понимаю... у меня ж нет секций кода и данных.
    Написал бы какой нибудь Рикардо Нарваха на эту тему разъяснения!?
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Semiono
    Эм... вообще-то есть, если они были в исходнике. И они видны в окне "M" (Memory map) для каждого образа, загруженного в АП процесса. К тому же после загрузки в Olly отображаемый код практически идентичен коду в исходнике за исключением имён меток (которые, кстати, можно назначить самостоятельно прямо в Olly). Соответствено неясно, какие именно разъяснения Вам нужны.
    Все действительно необходимые разъяснения присутствуют в вышеупомянутых статьях.
     
  20. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    774
    А можно получить ввод с консоли и исполнить его?
    Типа такого, хотя это разумеетс неправильно
    Код (Text):
    1. start:
    2.         invoke GetCommandLine
    3.         invoke CommandLineToArgv,eax,argsNum
    4.         [argsNum]
    это не имеет отношения к (ProcessClose), это я просто другое задумал... вообщем Zen =)
    ???
    как чёнибудь исполнить? или в код нельзя впринцыпе водставить ввод?