Modyfikacja uruchamianego pliku

0

Witam.Mam problem:chciałbym, żeby gdy użytkownik będzie w systemie otwierał jakiś plik np. film ,mój program przyblokuje uruchamianie tego pliku,zmodyfikuje go i dopiero po za kończeniu operacji, uruchomi w odpowiednim programie jakim miałby normalnie miał się otwierać.Podobnie ma się sprawa w antywirusach, chociaż nie wiem czy one kontrolują wszystkie uruchamiane pliki czy tylko *.exe.Chce takie coś zastosować, żeby uniknąć takiego rozwiązania, gdzie wszystkie rozszerzenia byłby przypisane do mojego programu, a użytkownik w moim programie musiałby ewentualnie modyfikować czy ustawiać listę programów,które mają dane pliki uruchamiać.Czy wie ktoś jak mogę to rozwiązać ? :)

Pozdrawiam.

0

Nie wiem jak z modyfikacją plików w locie, ale hook na odpowiednie funkcje musisz zrobić przy użyciu dll. Pod XP byly to inne funkcje, pod Windowsem 7 jest pewnie nieco inaczej. Zobacz sobie przykładowy kod dołaczony do tego posta. Po uruchomieniu blokuje on możliwośc utworzenia katalogu "test" w glownym katalogu dysku - na przykład C:\ lub D:. Działa dopóki go nie zamkniesz. A jakimś API Monitorem możesz przeanalizować jakie funkcje wykorzystuje Total Commander lub inne programy do uruchomienia i zalożyć na te daną funkcje Hook'a i wtedy w funkcji obsługi Hooka możesz spróbowac wykonać swój kod.

0

Dzięki za tą podpowiedź z hookiem. Znalazłem takie coś jak HookAPI 1.6 ma dużo możliwość m.in. hook na otwierane plików.Powstaje tylko problem, że zakłada on hook tylko w przypadku, gdy otworzę normalnie plik przez Eksplorer'a,a gdy np. wejdę w notatnik i otworzę go przez niego to już nie przyblokuje tej operacji. Ale wpadłem na taki pomysł, żeby zrobić tak, aby program sprawdzał cały czas listę plików używanych przez procesy, zakładał hook na danych proces, który używa jakiegoś pliku,modyfikował plik i puszczał proces. Jak myślicie może takie coś chodzić ?

0

Bo Hook na uruchamianie pliku będzie bazowal na - na przykład - ShellExecute, czy CreateProcess a otwieranie pliku w notatniku to wiadomo na przykład OpenFile. Dlatego trzeba przewidzieć albo dużo funkcji albo może jest jakaś inna metoda, której nie znam. To co proponujesz sam nie bardzo wiem jak wykonać, ale jeżeli Ty wiesz to po prostu wykonaj testy u siebie - może wszystko będzie działać tak jak sobie założyłeś. A pod jakąś wirtualną maszyną dysponując obrazami iso lub płytami z innymi systemami możesz sprawdzić jak zachowa się Twój program pod nimi i stwierdzić czy wszystko działa jak chciałeś i w zależności od systemu, na którym uruchomiono program.

0

Po pierwsze, wielu antywirusom i temu podobnym nie spodoba się to co robisz.
Po drugie, nie ma sensu kombinować z infekowaniem procesu, to się albo nie uda, albo zostanie zablokowane przez jakiegoś AV (ew. Twój program trafi na listy wirusów itp.).
Jest tylko jeden prosty, logiczny i 'legalny' (z widzenia AV) sposób, założenie hooka na OpenFile (dokładnej nazwy nie znam), ale to też grozi fałszywym wykryciem przez AV/jakiś anty-rootkit czy coś takiego. I jeśli masz takiego hooka, to po prostu sprawdzasz co trzeba i jeśli jest ok to puszczasz dalej, jeśli nie, to nie dajesz dostępu (zwracasz 0) i już otwarcie pliku nie powiodło się. Tylko z dokumentacją hooków może być trudno.

0

Rzeczywiście, zawsze może być jakiś problem...
A osobiście co do hooka to nie wiem, czy nie lepiej byłoby polecić NtOpenFile (funkcja z ntdll.dll); przez tą funkcję chodzą już niemal wszystkie programy (bo funkcja OpenFile zawsze będzie wywoływała funkcję NtOpenFile); no, chyba że ktoś piszący program wpadłby na pomysł używania pseudoinstrukcji asma sysenter do używania funkcji kernelowych, wtedy musiałbyś podrobić jądro. Jednak kody odpowiedzialne za funkcję zmieniają się z każdą nową wersją systemu, więc nie ma co się tym zamartwiać.

Edit: trzeba zauważyć też, że do czytania pliku wcale nie trzeba go otwierać - można przecież też otworzyć do czytania dysk fizyczny i korzystając ze struktury FAT/NTFS znaleźć sektory, w których jest plik; żeby tego uniknąć, trzeba jeszcze byłoby shookować funkcję NtReadFile do czytania pliku/dysku... ale to też jest nieprawdopodobne, choć być może stosowane przez jakieś wyszukiwacze rootkitów itp.

0

"Edit: trzeba zauważyć też, że do czytania pliku wcale nie trzeba go otwierać - można przecież też otworzyć do czytania dysk fizyczny i korzystając ze struktury FAT/NTFS znaleźć sektory, w których jest plik; żeby tego uniknąć, trzeba jeszcze byłoby shookować funkcję NtReadFile do czytania pliku/dysku... ale to też jest nieprawdopodobne, choć być może stosowane przez jakieś wyszukiwacze rootkitów itp." (ojoj, quote nie działa)
To my piszemy rootkita czy program do ochrony przed otwieraniem plików? :D OpenFile jest jedynym mądrym rozwiązaniem. Użyj go, nie baw się w atakowanie procesów - bo zaboli jak zaatakujesz AV...

0

Ciekawe co to za program będzie, bo za modyfikowanie plików bez mojej zgody a już szczególnie filmów to bym bił po łapach ;)
A sa jakies programy które odczytują plik szukając ich w sektorach na dysku ? Chyba po to jest system operacyjny aby pomóc to robić, a jak ktoś sie uprze to i tak odczyta wiec jako zabezpieczeni to jest to żadne

0

Po pierwsze,program ma nie zablokować otwierania pliku,tylko przyblokować je na jakiś czas, aby pewne operacje mogły zostać wykonane.Poza tym wątpię ,żeby antywirus przeczepił się do debugowania.Chociaż może się mylę.
Po drugie co do grzebania w plikach bez wiedzy użytkownika, to nie do końca tak, bo użytkownik będzie o tym widział, tylko ,że będzie wyręczany w pewnych czynnościach :) Nie wiem jak to wyjdzie z tym co proponowałem, bo chce zrobić tak, żeby gdy program wykryje uruchomienie pliku,wstrzymał przez debugowanie na chwilę proces, który dobiera się do pliku,zmodyfikował go i potem puścił proces.Dzięki za porady,spróbuje coś z tym NtOpenFile,a jak nie to zobaczę, może będzie dało się tak,żeby w pętli kontrolować listę otwartych plików i jak tylko pojawiłby się nowy na liście to proces byłby wstrzymywany itd. Część już wykodziłem, za resztę zabiorę się jak będę miał czas.

PS. Nie jest to program do ochrony plików (i o żadną ochronę tutaj nie chodzi),ani żaden wirus.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1