Modyfikacja uruchamianego pliku

Modyfikacja uruchamianego pliku
GM
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 11 lat
  • Postów:152
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.

olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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.


Pozdrawiam.
GM
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 11 lat
  • Postów:152
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ć ?

edytowany 1x, ostatnio: Golden_Mind
olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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.


Pozdrawiam.
payl
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 13 lat
  • Postów:196
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.


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.
MX
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 13 lat
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.


Not Found
The requested URL /wypasiona_sygnaturka.txt was not found in this brain.
-----
Human/1.0.00 (Earth) Server at Poland Port 65535
edytowany 2x, ostatnio: mnbvcX
payl
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 13 lat
  • Postów:196
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...


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.
edytowany 1x, ostatnio: payl
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:5 minut
  • Postów:2079
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


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
GM
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 11 lat
  • Postów:152
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.

edytowany 1x, ostatnio: Golden_Mind
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)