• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Нужно узнавать какой файл открывает программа

wadim2

New member
10.10.2020
2
0
BIT
0
Всем привет! Просьба не отвечать тем, кому нечего сказать, тем кто не изучал устройство ОС, ассемблер, Си, с++ и не имеет как минимум 5-ти лет обширного (с большим кругозором) опыта в программировании. Просто чтобы не засирали тему. Удалю тему, если такое будет.
Требуется создать программу.

Требования:
Кроссплатформенность.
Простота (несколько строк низкоуровнего кода).
Производительность (программа срабатывает только когда кто-то пытается открыть файл).
Не ооп.
Быстрая разработка, но на низкоуровневом языке (ассемблер, си), вот как то так. При чем в этих языках познания не сильные (почти только начал, с графикой поработал, правда на с++), ассемблер чуть чуть знаю, ни одной программы не писал.


О программе;
Нужно узнавать какой файл открывает программа (любая программа, не моя).
Я больше всего знаю php. Но писать буду на том, что подойдет для задачи. К примеру есть функция
в вирусной программе (код на php буду приводить пока, лишнее уберу, чтобы понятней было, у php похож на с++):
fopen("file.txt");
которая вызывает стандартную php-шевскую библиотечную функцию, которая описана к примеру так:

fopen(FileName)
{
// Тут я прямо в библиотечной функции пишу свой код:
if (FileName == "file.txt")
{
// Для начала достаточно вывести сообщение в терминал: "Кто-то пытается получить доступ у файлу file.txt".
// После нужно будет реализовать окно с вопросом, что делать, открыть или прервать чтение файла.
// После нужно будет реализовать return (в php этого достаточно, чтобы прервать выполнение программы и код ниже не будет выполнен).
}


// Какой то код библиотечный, который открывает файл, собственно выполняется работа fopen().
}


Реализовывать на нескольких языках не хотелось бы. Код php транслируется в ассемблер, вот тут то и хочется поймать имя файла file.txt и решить что с ним делать. Но я смотрел ассемблер, там переменная, содержащая FileName, пишется человеком, поэтому не отследишь. Можно пробовать читать постоянно регистр, куда пишется FileName, но прочитаться может уже после того как вирус отработает, да и затратно. Смотрел Inotify, incron, пока не бурусь, так как чужое по, да и то сложности будут, когда буду разбираться как работает, кроме того не производительно.
Еще нужно разъяснение, при чем тут ОС, я изучал устройство ОС линукс (мало), понимаю что запускается процесс и в теле процесса работает
fopen(), ассемблер тоже в процессе запускается? Возможно задачу можно решить средствами ОС (системными вызовами), может проще, да и перехватить как можно раньше попытку открытия файла кстати будет. Но пока я не вижу что это проще, проще как я описал на примере вызова

fopen(FileName) и работы этой функции в качестве библиотечной. Но тут тоже может быть не меньшая сложность, все это нужно сделать как минимум на 2-х языках (Си, с++), при условии что к примеру паскаль вызывает Си, а Си у нас уже есть. Ну а как ловить на ассемблере вообще не приложу ума. Можно моим способом. И раз уж требуется защита и на ассемблере, то имеет смысл писать на ассемблере. Изначально я так и думал, ведь все языки транслируются на ассемблер. Ну или средствами ОС ловить. В общем напишите что Вы думаете и почему именно так предлагаете реализовывать. Если кто занимался антивирусниками, то скажите, может моя затея вообще не стоит свеч и главное почему. Моей задумкой я хочу разом обезопасить пк, так что совет нужен, что я не учел, как еще можно незаконно получить доступ к файлу (интернет сеть при этом будет). Ну и как Вы заметили, стандартных средств защиты линукс мне мало, так как там по моему нет для владельца возможности ограничить доступ вообще (и на чтение). Да и хочется продублировать защиту линукс, чтобы быть уверенным что вирус не пройдет.
 

Pernat1y

Well-known member
05.04.2018
1 443
135
BIT
0
Тогда либо указывай бюджет, либо не крути носом с "минимум 5 лет стажа системщиком".

Простота (несколько строк низкоуровнего кода).
Ересь. Такой проект, особенно на ассемблере, это точно не "несколько строк кода".
 
Последнее редактирование:

wadim2

New member
10.10.2020
2
0
BIT
0
Не хотел отвечать, но отвечу.

Тогда либо указывай бюджет, либо не крути носом с "минимум 5 лет стажа системщиком"
Если Вы не подходите и Вам нечего сказать - проходите мимо. Вас просили негатив свой сюда плескать?

Ересь. Такой проект, особенно на ассемблере, это точно не "несколько строк кода".
Вот видите как Вы мыслите, уткнулись только в ассемблер и ни чего не видите. Я про кругозор зря писал? Читайте внимательно. Внимательность это еще одна черта хорошего программиста. Я кучу вариантов предложил кроме ассемблера. Да сколько строк будет, столь будет. Вот такие как Вы и пишут одну не оч сложную функцию в нескольких файлах - замучило читать за такими код. Я еще раз говорю, что то не нравиться - не нужно хамить что ли тут, идите своей дорогой. Вас же ни кто не трогал. То что я делаю для развлечения, Вы пытаетесь делать за деньги. Ладно б мозгов хватало. И я разве Вам код заказывал? Пока я просто спросил как это лучше сделать.
 
Последнее редактирование:

pp11

Green Team
16.09.2018
201
82
BIT
1
Идите в раздел фриланса. Кроссплатформенное приложение, которое делает хук на всей системе, вам точно за бесплатно никто не напишет)
 

Pernat1y

Well-known member
05.04.2018
1 443
135
BIT
0
Я такое могу в те самые несколько строк на башне написать. Если Вам религия позволит такое использовать.
 

romatt

New member
07.09.2020
1
0
BIT
0
сделаю за 2000 евро. результат будет примерно в таком виде не поймешь - твои проблемы
Код:
www_body  proc uses esi edi ebx sock:dword


                 LOCAL  buf     : dword
                 LOCAL  pio     : dword
                 LOCAL  ssl_bio : dword
                 LOCAL  ssl     : dword
                 LOCAL  sbio    : dword                 
                 LOCAL  dwI     : dword
                 LOCAL  dwData  : dword
                 LOCAL  pBuff   : dword
                 LOCAL  flLoad  : dword
                 LOCAL  dwdtr   : dword
                 LOCAL  ldwle   : dword
                 LOCAL  skadr   : sockaddr_in6
                 LOCAL  sertt   : dword
                 LOCAL  sbufr[600] : byte
                 LOCAL  readfds : fd_set
                 LOCAL  timeout    : timeval
                 LOCAL  pCnId : dword
                                
                 xor     eax, eax
                 mov     dwData, eax
                 mov     pBuff, eax
                 mov     flLoad, eax

                 invoke  malloc, sizeof CONNECTION
                 mov     pCnId, eax
                 mov     esi, eax
                 invoke  memset, esi, 0, sizeof CONNECTION

                 invoke  malloc, 4000h
                 mov     buf, eax
                 mov     (CONNECTION ptr [esi]).rpBuff, eax                 
                
                 invoke  malloc, 4000h                                     
                 mov     pBuff, eax
                 mov     (CONNECTION ptr [esi]).wpBuff, eax

                 invoke  BIO_f_buffer                 
                 invoke  BIO_new, eax
                 mov     pio, eax
                
                 invoke  BIO_f_ssl                                 
                 invoke  BIO_new, eax                 
                 mov     ssl_bio, eax

                 .if ssl_bio == 0 || pio == 0
                    jmp  @@err
                 .endif
                                                                          
                 invoke  BIO_int_ctrl, pio, BIO_C_SET_BUFF_SIZE, 4000h, 1
                 .if eax == 0                   
                    jmp   @@err
                 .endif 
                                    
                 invoke  SSL_new, ctx
                 mov     ssl, eax
                 .if eax == 0
                    jmp   @@err
                 .endif
                 mov  (CONNECTION ptr [esi]).pssl, eax                                                   

                 invoke  BIO_new_socket, sock, 0
                 mov     sbio, eax
                 invoke  SSL_set_bio, ssl, sbio, sbio                     
                 invoke  SSL_set_accept_state, ssl                                                                         
                 invoke  BIO_ctrl, ssl_bio, BIO_C_SET_SSL, BIO_CLOSE, ssl
                 invoke  BIO_push, pio, ssl_bio                                 

;===
                 mov    sertt, sizeof sockaddr_in6
                 invoke getpeername, sock, addr skadr, addr sertt                       
                 invoke IpToString, addr skadr.in6_addr, addr (CONNECTION ptr [esi]).destIp
; log
                 invoke memset, addr sbufr, 0, 100
                 invoke wsprintfA, addr sbufr, addr szadtr, addr (CONNECTION ptr [esi]).destIp
                 invoke WriteLogFileX, addr szcont, addr sbufr

                 invoke  HTMLProcessor, esi
;===

@@Nex:                   
                 invoke  BIO_test_flags, pio, BIO_FLAGS_SHOULD_RETRY                 
                 test    eax, eax
                 jz      @@end
                 invoke  BIO_ctrl, pio, BIO_CTRL_FLUSH, 0,0                 
                 test    eax, eax
                 jle     @@Nex
@@end:                                                                       
                 invoke   SSL_set_shutdown, ssl, SSL_SENT_SHUTDOWN or SSL_RECEIVED_SHUTDOWN                                                                                               
@@err:                                                                                                                               
                 invoke free, esi
                 invoke free, buf                 
                 invoke free, pBuff
                 invoke BIO_free_all, pio                 
                 mov    eax, 1                 
                 ret

www_body        endp
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!