Конференция "WinAPI" » Получить путь и имя процесса [D7, WinXP]
 
  • Cj © (26.12.07 10:36) [0]
    САБЖ. Сделал прогу (экспериментальная), которая скывает свой путь, не исползуя хакерские приемы.
    Пытаюсь теперь узнать путь и имя проги,а Process Explorer, PHunter, и ДЗ показывают не-то, что надо.
    Вот задумался, а если я вирус такой подцеплю, как тогда путь/ имя к нему узнать?
    Ссылка вот http://webfile.ru/1656755

    посмотрите. Ручаюсь -это не вирус.
    Подскажите как сделать САБЖ.
    Сильно не пинайте, если где неправ.
    Спасибо заранее.
    И скажите мне если узнаете, путь к проге.
  • DVM © (26.12.07 10:42) [1]

    > Ручаюсь -это не вирус.

    Ты бы исходником свои заверения подкрепил.
  • Cj © (26.12.07 11:00) [2]

    > > Ручаюсь -это не вирус.Ты бы исходником свои заверения
    > подкрепил.

    вот этого я и боюсь: если до меня такого не делали, то как только выложу - сразу такие проги(вири) полезут.

    из жизни
    Один раз стоило показать экспериментальный код (там про проводник(не вирь))в институте, как сразу вири самопальные полезли. Я то знал, как их удалять, но хотелось в морду надавать всем у кого я флэхи брал, тк на ВСЕХ были самопалки.


    Вот поэтому исходники я не хочу вылаживать до тех пор, пока не найду/найдут способ узнать путь процесса(даже кстати Каспер не определяет).

    Я не заставляю тебя запускать его, даже при максимальной выкрутке защиты твоего Антивируса. Но если вири такие полезут?

    И еще, за такое меня могуть засадить, как тех двоих.
  • slow!alfamoon!com (26.12.07 11:22) [3]
    Че, переписываешь в PEBе? А что, идея занятная, кстати. Но найти в нужном EPROCESSе имя труда не составит.
  • Cj © (26.12.07 11:37) [4]

    > slow!alfamoon!com   (26.12.07 11:22) [3]
    > Че, переписываешь в PEBе? А что, идея занятная, кстати.
    > Но найти в нужном EPROCESSе имя труда не составит.


    Заинтересовался?
    Нет, PEB я даже не задеваю.
    Но насчет EPROCESS (может, это я быстро)- запускаю pHunter(ms-rem) и ставлю только по EPROCESS - и показывает, то-же не то.
    Но может это я все-таки не так делаю, попробуй ты поищи.
    И заметь - я все операции провожу со СВОИМ процессом, никаких драйверов и dll(если думаешь, что руткит).
  • Rouse_ © (26.12.07 15:45) [5]
    Он мувит себя в корень диска с именем Char($7F), и запускает с параметрами свою копию указывая в параметрах путь, откуда был запущен оригинал, после чего прибивает себя.
    Новый процесс, зная из параметров командной строки путь, возвращает копию себя на место. После чего он читает адрес в котором содержится путь к текущему модулю примерно вот таким кодом:
    program Project1;

    {$APPTYPE CONSOLE}

    uses
     Windows;

    var
     P: PByte;
     Data, BytesRead: DWORD;
     S: String;
    begin
     P := GetProcAddress(GetModuleHandle(kernel32), 'GetCommandLineA');
     if P <> nil then
     begin
       Inc(P);
       BytesRead := 0;
       ReadProcessMemory(GetCurrentProcess, P, @Data, 4, BytesRead);
       ReadProcessMemory(GetCurrentProcess, Pointer(Data), @Data, 4, BytesRead);
       S := PChar(Data);
       writeln(S);
       readln;
     end;
    end.



    после чего трет нулями юникодный и ансишный варианты.
    Проблема в том что GetCommandLine возвращает данные из BaseAnsi(Unicode)CommandLine, а не из PEB, таким образом ничто не скрывается и даже банальный CreateToolhelp32Snapshot покажет эту гадость :)
  • Cj © (26.12.07 16:28) [6]

    >  а не из PEB, таким образом ничто не скрывается и даже банальный
    > CreateToolhelp32Snapshot покажет эту гадость :)


    Ну попробуй.
    Покажи код, который показывает.
    Интересно, как это у Slow не показалось, а у тебя показывает.

    Toolhelp показывает только X:\[], а на самом деле файл там-же(откуда запускал)
  • Cj © (26.12.07 16:31) [7]

    > Rouse_ ©   (26.12.07 15:45) [5]


    Молодец, про действия догадался.
    Только он еще текущую директорию сменяет на X:\ чтобы не узнали в какой он папке
  • Rouse_ © (26.12.07 17:44) [8]

    > Молодец, про действия догадался.

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

    > Toolhelp показывает только X:\[], а на самом деле файл там-
    > же

    У меня он показывает там где находится сейчас реально исполняемый файл, а не то откуда он запускался.
    Если хочешь увидеть кто его толкнул первым, запусти аудит и будет тебе счастье.
    Тож мне - технологию придумал :)

    Вот тебе утилитка которая показывает все твои запущенные творчества:
    http://webfile.ru/1657256
  • Cj © (26.12.07 18:01) [9]

    > Вот тебе утилитка которая показывает все твои запущенные
    > творчества:http://webfile.ru/1657256


    ща посмотрю...
  • Cj © (26.12.07 18:07) [10]

    > Вот тебе утилитка которая показывает все твои запущенные
    > творчества:http://webfile.ru/1657256


    Вот смотрите что она говорит.

    Какая у вас система(версия и.т.д.) у меня:

    Имя ОС Microsoft Windows XP Professional
    Версия 5.1.2600 Service Pack 2 Сборка 2600
    Изготовитель ОС Microsoft Corporation
    Имя системы ASUS
    Изготовитель ASUSTeK Computer Inc.
    Модель F3JP
    Тип Компьютер на базе X86
    Процессор x86 Family 6 Model 15 Stepping 2 GenuineIntel ~1662 МГц
    Процессор x86 Family 6 Model 15 Stepping 2 GenuineIntel ~1662 МГц
    Версия BIOS American Megatrends Inc. 208, 23.05.2007
    Версия SMBIOS 2.4
    Папка Windows D:\MUSTDIE
    Системная папка D:\MUSTDIE\system32
    Устройство загрузки \Device\HarddiskVolume1
    Язык Россия
    Аппаратно-зависимый уровень (HAL) Версия = "5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)"
    Имя пользователя ASUS\Cj
    Часовой пояс Владивосток (зима)
    Полный объем физической памяти 2 048,00 МБ
    Доступно физической памяти 1,45 ГБ
    Всего виртуальной памяти 2,00 ГБ
    Доступно виртуальной памяти 1,96 ГБ
    Файл подкачки 3,54 ГБ
    Файл подкачки C:\pagefile.sys
  • Cj © (26.12.07 18:09) [11]

    > Вот смотрите что она говорит.


    затупил я, вот ссылка http://webfile.ru/1657288
  • Rouse_ © (26.12.07 18:17) [12]
    Все верно говорит, именно по этому пути у тебя запущен исполняемый файл :) Посмотри под отладчиком :)
  • Cj © (26.12.07 18:22) [13]
    да это понятно, но а файла в корне диска нету же
  • Rouse_ © (26.12.07 18:27) [14]
    В корне нету, потомучто ты перетолкнул его в другую папку через MoveFileA, что позволяет только NTFS. Я же еще раз говорю - включи аудит и тебя все на блюдечке покажут...
  • Cj © (26.12.07 18:35) [15]

    > Rouse_ ©   (26.12.07 18:27) [14]
    > В корне нету, потомучто ты перетолкнул его в другую папку
    > через MoveFileA, что позволяет только NTFS. Я же еще раз
    > говорю - включи аудит и тебя все на блюдечке покажут...


    Я понял вас.
    я это все знаю. Просто мне надо получить реальный путь к EXE.
    Будет например сидеть юзер и вирь такой запустится, он посмотрит- типа на диске C , посмотрит, а его там нет, завершит процесс, а файл на компе остается. Не всякому же охото хранить на компе вредную прогу.
    Вот и бъесь над этой задачей.

    ДЗ кстати тоже самое показывает.
  • Rouse_ © (26.12.07 22:22) [16]
    Я понял о чем ты говоришь, да, с такой постановкой именно то, что ты спросил простым способом решить не получиться, по крайней мере обычными методами. С завязкой PEB-а на BaseAnsi(Unicode)CommandLine я сам удивился, судя по моим данны под 2000 такого случиться не должно. Значит ошибся.
    Но сам понимаешь, даже обычный файл - всегда угроза для пользователя :)
    Кстати можешь ребятам показать код, бо он уже не секретен :)
  • Riply © (26.12.07 22:57) [17]
    > [16] Rouse_ ©   (26.12.07 22:22)
    > Кстати можешь ребятам показать код, бо он уже не секретен :)

    А может не стоит ?
    Кто может сам написать - пользоваться не будет,
    а вот кто не может - не знаю :)
  • Rouse_ © (27.12.07 00:55) [18]

    > Riply ©   (26.12.07 22:57) [17]
    > А может не стоит ?

    Хорошо, добавлю ИМХО к моему предыдущему посту :)
  • Cj © (27.12.07 02:56) [19]
    Хорошо, домой вернусь код выложу
  • Cj © (27.12.07 10:38) [20]
    Вернулся вот код, но предупреждаю может получится как в 2.

    Данный код может использоваться только в целях обучения.
    Автор не гарантирует работоспобность этого кода на компьютере с системами не Windows XP и вообще на чем угодно.
    Особенно не гарантируется совместимость с звуковыми платами, принтерами, сканерами, холодильниками и другими устройствами которые код не использует непосредственно.
    Больше автор ничего не гарантирует.
    Автор не отвечает за испорченные в результате использования этой программы данные, компьютеры, локальные, глобальные компьютерные сети, пище-продукты и все что теоретически может испортиться.
    Если вы используете эту код для противозаконной деятельности, вся ответственность ложиться на вас.


    program hp1;

    uses
     Forms,
     Windows,
     Unit1 in 'Unit1.pas' {Form1};

    {$R *.res}

    var
      j:cardinal;
      b:byte;
     procadr: pointer;
     adr,r:cardinal;
    begin
    //проверка на параметр
    if paramstr(1)=''then
    begin
        movefile(pchar(application.exename),pchar(application.exename[1]+':\'+#127));
        winexec(pchar(application.exename[1]+':\'+#127+' \"'+application.exename+'\"'),sw_show);
        exitprocess(1);
    end else
    begin  //перемещаемся обратно
    movefile(pchar(application.exename),pchar(paramstr(1)));
    end;

     //получаем адреса параметров
     procadr := GetProcAddress(getmodulehandle('kernel32.dll'), 'GetCommandLineA');
     readprocessmemory(getcurrentprocess, ptr(cardinal(procadr) + 1), @adr, 4, r);
     readprocessmemory(getcurrentprocess, ptr(adr), @adr, 4, r);
     b:=0;
     for j:=0  to 255 do
         WriteProcessMemory(getcurrentprocess, ptr(adr + j), @b, 1, r);

     //трем строки параметров
     procadr := GetProcAddress(getmodulehandle('kernel32.dll'), 'GetCommandLineW');
     readprocessmemory(getcurrentprocess, ptr(cardinal(procadr) + 1), @adr, 4, r);
     readprocessmemory(getcurrentprocess, ptr(adr), @adr, 4, r);
     b:=0;
     for j:=0  to 255 do
         WriteProcessMemory(getcurrentprocess, ptr(adr + j), @b, 1, r);

    //меняем директорию
    windows.SetCurrentDirectory('C:\');

    //запускаемся дальше
     Application.Initialize;
     Application.Title:='';
     Application.CreateForm(TForm1, Form1);
     Application.Run;
    end.

  • slow!alfamoon!com (27.12.07 11:19) [21]
    2 Cj

    я только предположил.. проверять было лень
  • Cj © (27.12.07 13:58) [22]

    > slow!alfamoon!com   (27.12.07 11:19) [21]
    > 2 Cjя только предположил.. проверять было лень


    да ладно,с кем не бывает
  • MetalFan © (27.12.07 18:31) [23]
    а для чего Read(Write)ProcessMemory для своего процесса???
  • Cj © (28.12.07 08:44) [24]

    > MetalFan ©   (27.12.07 18:31) [23]
    > а для чего Read(Write)ProcessMemory для своего процесса?
    > ??

    да это я наскоряк
  • slow!alfamoon!com (28.12.07 12:07) [25]
    ну точнее я тоже экспериментировал с прятанием пути к процессу :) Но немного иначе, примерно так как я тебе написал.
  • Cj © (29.12.07 16:48) [26]
    > Но немного иначе, примерно так как я тебе написал.


    где ?
  • MetalFan © (29.12.07 21:34) [27]
    у меня кстати прога падает сразу после запуска... после "зачистки" пути до исп.файла.
    д2006
  • Cj © (30.12.07 08:54) [28]

    > MetalFan ©   (29.12.07 21:34) [27]
    > у меня кстати прога падает сразу после запуска... после
    > "зачистки" пути до исп.файла.д2006


    компиль на Д7
  • slow!alfamoon!com (30.12.07 13:02) [29]
    slow!alfamoon!com   (26.12.07 11:22) [3]

    Че, переписываешь в PEBе? А что, идея занятная, кстати. Но найти в нужном EPROCESSе имя труда не составит.
  • Cj © (31.12.07 18:08) [30]

    > slow!alfamoon!com   (30.12.07 13:02) [29]
    > slow!alfamoon!com   (26.12.07 11:22) [3]Че, переписываешь
    > в PEBе? А что, идея занятная, кстати. Но найти в нужном
    > EPROCESSе имя труда не составит.


    ага понял
 
Конференция "WinAPI" » Получить путь и имя процесса [D7, WinXP]
Есть новые Нет новых   [134431   +14][b:0][p:0.002]