webshell-analyzer 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. webshell_analyzer/__init__.py +0 -0
  2. webshell_analyzer/cli/__init__.py +0 -0
  3. webshell_analyzer/cli/cli.py +151 -0
  4. webshell_analyzer/extractor/ast_extraction/composer.json +5 -0
  5. webshell_analyzer/extractor/ast_extraction/composer.lock +77 -0
  6. webshell_analyzer/extractor/ast_extraction/src/NodeVisitor.php +85 -0
  7. webshell_analyzer/extractor/ast_extraction/src/astBuilder.php +50 -0
  8. webshell_analyzer/extractor/ast_extraction/src/astExtractor.php +50 -0
  9. webshell_analyzer/extractor/ast_extraction/src/featuresDeclare.php +36 -0
  10. webshell_analyzer/extractor/ast_extraction/vendor/autoload.php +25 -0
  11. webshell_analyzer/extractor/ast_extraction/vendor/composer/ClassLoader.php +579 -0
  12. webshell_analyzer/extractor/ast_extraction/vendor/composer/InstalledVersions.php +378 -0
  13. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_classmap.php +10 -0
  14. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_namespaces.php +9 -0
  15. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_psr4.php +10 -0
  16. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_real.php +38 -0
  17. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_static.php +36 -0
  18. webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.json +67 -0
  19. webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.php +32 -0
  20. webshell_analyzer/extractor/ast_extraction/vendor/composer/platform_check.php +26 -0
  21. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +150 -0
  22. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php +151 -0
  23. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +50 -0
  24. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +86 -0
  25. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +116 -0
  26. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +73 -0
  27. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php +67 -0
  28. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +94 -0
  29. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php +147 -0
  30. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +45 -0
  31. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php +171 -0
  32. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php +223 -0
  33. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +65 -0
  34. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +145 -0
  35. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +83 -0
  36. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php +49 -0
  37. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder.php +12 -0
  38. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php +375 -0
  39. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +338 -0
  40. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php +6 -0
  41. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment.php +209 -0
  42. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +6 -0
  43. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +237 -0
  44. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Error.php +173 -0
  45. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +43 -0
  46. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +17 -0
  47. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php +12 -0
  48. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +31 -0
  49. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php +178 -0
  50. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +71 -0
  51. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +237 -0
  52. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +282 -0
  53. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php +108 -0
  54. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +230 -0
  55. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php +93 -0
  56. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +49 -0
  57. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +26 -0
  58. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +45 -0
  59. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +60 -0
  60. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +19 -0
  61. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +60 -0
  62. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.php +45 -0
  63. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php +19 -0
  64. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +31 -0
  65. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +31 -0
  66. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +37 -0
  67. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +30 -0
  68. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/VoidCastEmulator.php +98 -0
  69. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer.php +116 -0
  70. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Modifiers.php +85 -0
  71. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NameContext.php +284 -0
  72. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php +44 -0
  73. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +43 -0
  74. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php +33 -0
  75. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +27 -0
  76. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +36 -0
  77. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +13 -0
  78. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php +36 -0
  79. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +37 -0
  80. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +33 -0
  81. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +15 -0
  82. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +34 -0
  83. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +84 -0
  84. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +33 -0
  85. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +11 -0
  86. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +11 -0
  87. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +11 -0
  88. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +11 -0
  89. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +11 -0
  90. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +11 -0
  91. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +11 -0
  92. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +11 -0
  93. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +11 -0
  94. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +11 -0
  95. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +11 -0
  96. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +11 -0
  97. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +11 -0
  98. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +29 -0
  99. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +33 -0
  100. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +15 -0
  101. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +15 -0
  102. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +15 -0
  103. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +15 -0
  104. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +15 -0
  105. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +15 -0
  106. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +15 -0
  107. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +15 -0
  108. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +15 -0
  109. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +15 -0
  110. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +15 -0
  111. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +15 -0
  112. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +15 -0
  113. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +15 -0
  114. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +15 -0
  115. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +15 -0
  116. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +15 -0
  117. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +15 -0
  118. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +15 -0
  119. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +15 -0
  120. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.php +15 -0
  121. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +15 -0
  122. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +15 -0
  123. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +15 -0
  124. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +15 -0
  125. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +15 -0
  126. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +15 -0
  127. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +15 -0
  128. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +37 -0
  129. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +29 -0
  130. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +29 -0
  131. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +60 -0
  132. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +11 -0
  133. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +15 -0
  134. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +16 -0
  135. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +15 -0
  136. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +11 -0
  137. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +15 -0
  138. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +11 -0
  139. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Void_.php +11 -0
  140. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +25 -0
  141. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +36 -0
  142. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +29 -0
  143. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +86 -0
  144. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +15 -0
  145. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +30 -0
  146. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +29 -0
  147. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +30 -0
  148. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +29 -0
  149. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +29 -0
  150. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +33 -0
  151. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +38 -0
  152. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +38 -0
  153. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +35 -0
  154. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +29 -0
  155. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +34 -0
  156. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +32 -0
  157. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +45 -0
  158. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +40 -0
  159. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +45 -0
  160. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +35 -0
  161. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +29 -0
  162. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +29 -0
  163. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +29 -0
  164. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +29 -0
  165. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +29 -0
  166. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +35 -0
  167. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +30 -0
  168. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +45 -0
  169. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +36 -0
  170. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +37 -0
  171. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +29 -0
  172. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +29 -0
  173. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +29 -0
  174. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +29 -0
  175. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +29 -0
  176. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +33 -0
  177. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php +8 -0
  178. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +40 -0
  179. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php +85 -0
  180. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +32 -0
  181. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +27 -0
  182. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +29 -0
  183. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +49 -0
  184. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +49 -0
  185. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php +278 -0
  186. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php +29 -0
  187. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php +123 -0
  188. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php +105 -0
  189. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +37 -0
  190. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +15 -0
  191. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +15 -0
  192. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +17 -0
  193. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +78 -0
  194. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +82 -0
  195. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +34 -0
  196. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +15 -0
  197. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +15 -0
  198. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +15 -0
  199. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +15 -0
  200. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +15 -0
  201. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +15 -0
  202. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +15 -0
  203. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +15 -0
  204. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php +15 -0
  205. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +15 -0
  206. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +27 -0
  207. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +161 -0
  208. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php +6 -0
  209. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +39 -0
  210. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +29 -0
  211. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +29 -0
  212. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +33 -0
  213. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +40 -0
  214. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +77 -0
  215. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +109 -0
  216. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +154 -0
  217. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +94 -0
  218. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +37 -0
  219. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +29 -0
  220. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +17 -0
  221. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +34 -0
  222. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +33 -0
  223. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +29 -0
  224. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +33 -0
  225. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +29 -0
  226. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +36 -0
  227. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +44 -0
  228. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +32 -0
  229. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +29 -0
  230. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +47 -0
  231. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +50 -0
  232. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +81 -0
  233. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +29 -0
  234. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +30 -0
  235. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +41 -0
  236. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +29 -0
  237. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +46 -0
  238. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +29 -0
  239. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +40 -0
  240. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +30 -0
  241. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +37 -0
  242. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +16 -0
  243. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +121 -0
  244. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +17 -0
  245. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +29 -0
  246. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +15 -0
  247. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +30 -0
  248. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +33 -0
  249. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +33 -0
  250. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +37 -0
  251. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +33 -0
  252. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +12 -0
  253. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +34 -0
  254. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +37 -0
  255. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +29 -0
  256. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +17 -0
  257. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +47 -0
  258. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +33 -0
  259. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php +8 -0
  260. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php +27 -0
  261. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php +55 -0
  262. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +16 -0
  263. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +27 -0
  264. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node.php +150 -0
  265. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php +181 -0
  266. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php +299 -0
  267. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php +90 -0
  268. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +287 -0
  269. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +26 -0
  270. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +19 -0
  271. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +82 -0
  272. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +47 -0
  273. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +49 -0
  274. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +269 -0
  275. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +73 -0
  276. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +51 -0
  277. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php +124 -0
  278. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +24 -0
  279. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php +2919 -0
  280. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php +2917 -0
  281. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser.php +24 -0
  282. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php +1335 -0
  283. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php +42 -0
  284. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php +175 -0
  285. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +1232 -0
  286. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +51 -0
  287. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +1706 -0
  288. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Token.php +18 -0
  289. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +71 -0
  290. webshell_analyzer/extractor/extractor.py +73 -0
  291. webshell_analyzer/extractor/lexical_extraction/lexicalExtractor.py +31 -0
  292. webshell_analyzer/extractor/statistical_extraction/statisticalExtractor.py +60 -0
  293. webshell_analyzer/model/features_selected.json +1 -0
  294. webshell_analyzer/model/model_loader.py +19 -0
  295. webshell_analyzer/model/rf_webshell_model.joblib +0 -0
  296. webshell_analyzer/modules/__init__.py +0 -0
  297. webshell_analyzer/modules/detector.py +174 -0
  298. webshell_analyzer/modules/scanner.py +68 -0
  299. webshell_analyzer-1.0.0.dist-info/METADATA +105 -0
  300. webshell_analyzer-1.0.0.dist-info/RECORD +304 -0
  301. webshell_analyzer-1.0.0.dist-info/WHEEL +5 -0
  302. webshell_analyzer-1.0.0.dist-info/entry_points.txt +2 -0
  303. webshell_analyzer-1.0.0.dist-info/licenses/LICENSE +21 -0
  304. webshell_analyzer-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,18 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ /**
6
+ * A PHP token. On PHP 8.0 this extends from PhpToken.
7
+ */
8
+ class Token extends Internal\TokenPolyfill {
9
+ /** Get (exclusive) zero-based end position of the token. */
10
+ public function getEndPos(): int {
11
+ return $this->pos + \strlen($this->text);
12
+ }
13
+
14
+ /** Get 1-based end line number of the token. */
15
+ public function getEndLine(): int {
16
+ return $this->line + \substr_count($this->text, "\n");
17
+ }
18
+ }
@@ -0,0 +1,71 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ if (!\function_exists('PhpParser\defineCompatibilityTokens')) {
6
+ function defineCompatibilityTokens(): void {
7
+ $compatTokens = [
8
+ // PHP 8.0
9
+ 'T_NAME_QUALIFIED',
10
+ 'T_NAME_FULLY_QUALIFIED',
11
+ 'T_NAME_RELATIVE',
12
+ 'T_MATCH',
13
+ 'T_NULLSAFE_OBJECT_OPERATOR',
14
+ 'T_ATTRIBUTE',
15
+ // PHP 8.1
16
+ 'T_ENUM',
17
+ 'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG',
18
+ 'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG',
19
+ 'T_READONLY',
20
+ // PHP 8.4
21
+ 'T_PROPERTY_C',
22
+ 'T_PUBLIC_SET',
23
+ 'T_PROTECTED_SET',
24
+ 'T_PRIVATE_SET',
25
+ // PHP 8.5
26
+ 'T_PIPE',
27
+ 'T_VOID_CAST',
28
+ ];
29
+
30
+ // PHP-Parser might be used together with another library that also emulates some or all
31
+ // of these tokens. Perform a sanity-check that all already defined tokens have been
32
+ // assigned a unique ID.
33
+ $usedTokenIds = [];
34
+ foreach ($compatTokens as $token) {
35
+ if (\defined($token)) {
36
+ $tokenId = \constant($token);
37
+ if (!\is_int($tokenId)) {
38
+ throw new \Error(sprintf(
39
+ 'Token %s has ID of type %s, should be int. ' .
40
+ 'You may be using a library with broken token emulation',
41
+ $token, \gettype($tokenId)
42
+ ));
43
+ }
44
+ $clashingToken = $usedTokenIds[$tokenId] ?? null;
45
+ if ($clashingToken !== null) {
46
+ throw new \Error(sprintf(
47
+ 'Token %s has same ID as token %s, ' .
48
+ 'you may be using a library with broken token emulation',
49
+ $token, $clashingToken
50
+ ));
51
+ }
52
+ $usedTokenIds[$tokenId] = $token;
53
+ }
54
+ }
55
+
56
+ // Now define any tokens that have not yet been emulated. Try to assign IDs from -1
57
+ // downwards, but skip any IDs that may already be in use.
58
+ $newTokenId = -1;
59
+ foreach ($compatTokens as $token) {
60
+ if (!\defined($token)) {
61
+ while (isset($usedTokenIds[$newTokenId])) {
62
+ $newTokenId--;
63
+ }
64
+ \define($token, $newTokenId);
65
+ $newTokenId--;
66
+ }
67
+ }
68
+ }
69
+
70
+ defineCompatibilityTokens();
71
+ }
@@ -0,0 +1,73 @@
1
+ import os
2
+ import subprocess
3
+ import json
4
+ from webshell_analyzer.extractor.statistical_extraction.statisticalExtractor import extract_statistical_features
5
+ from webshell_analyzer.extractor.lexical_extraction.lexicalExtractor import extract_lexical_features
6
+ from webshell_analyzer.model.model_loader import load_feature_columns
7
+
8
+ feature_columns = load_feature_columns()
9
+
10
+ base_dir = os.path.dirname(os.path.dirname(__file__))
11
+
12
+ def extract_ast(filepath):
13
+ #call the AST extractor script
14
+ php_ast_path = os.path.abspath(os.path.join(base_dir, "extractor", "ast_extraction", "src", "astExtractor.php"))
15
+ target_file = os.path.abspath(filepath)
16
+
17
+ try:
18
+ result = subprocess.run(["php", php_ast_path, target_file], capture_output=True, text=True)
19
+
20
+ #Handle errors if the PHP script execution fails
21
+ if result.returncode != 0:
22
+ return None
23
+
24
+ try:
25
+ return json.loads(result.stdout)
26
+
27
+ #error handling for invalid JSON output from the PHP script
28
+ except json.JSONDecodeError:
29
+ print(f"[WARNING] invalid ast output")
30
+
31
+ except Exception:
32
+ return None
33
+
34
+
35
+ def align_features(features_dict):
36
+ return [features_dict.get(col, 0) for col in feature_columns]
37
+
38
+
39
+ def extract_features(filepath):
40
+ features = {}
41
+
42
+ #Extract AST features
43
+ ast_features = extract_ast(filepath)
44
+ if ast_features is not None:
45
+ features.update(ast_features)
46
+
47
+
48
+ try:
49
+ #read file content for lexical and statistical extraction
50
+ with open(filepath, "r", encoding="utf-8", errors="ignore") as f:
51
+ code = f.read().strip()
52
+ except Exception:
53
+ print("[ERROR] Failed to read file")
54
+ return None
55
+
56
+ try:
57
+ #extract lexical features
58
+ lexical_features = extract_lexical_features(code)
59
+ features.update(lexical_features)
60
+ except Exception:
61
+ print("[WARNING] Lexical feature extraction failed")
62
+
63
+ try:
64
+ #extract statistical features
65
+ statistical_features = extract_statistical_features(code)
66
+ features.update(statistical_features)
67
+ except Exception:
68
+ print("[WARNING] statistical feature extraction failed")
69
+
70
+ if not features:
71
+ return None
72
+
73
+ return features
@@ -0,0 +1,31 @@
1
+ import re
2
+
3
+ DANGEROUS_FUNCS = ["eval", "system", "exec"]
4
+ USER_INPUTS = [r"\$_POST", r"\$_REQUEST", r"\$_FILES"]
5
+ INCLUDE_FUNCS = ["require_once"]
6
+ SYMBOL_PATTERN = r"[{}\[\]\(\);$]"
7
+
8
+
9
+ def count_regex(pattern, text):
10
+ return len(re.findall(pattern, text, flags=re.IGNORECASE))
11
+
12
+
13
+ def extract_lexical_features(code):
14
+ features = {}
15
+ #dangerous functions
16
+ for f in DANGEROUS_FUNCS:
17
+ features[f"lex_func_{f}"] = count_regex(rf"\b{f}\b", code)
18
+
19
+ #user input variable
20
+ for var in USER_INPUTS:
21
+ clean_name = var.replace("\\", "").replace("$", "")
22
+ features[f"lex_input_{clean_name}"] = count_regex(var, code)
23
+
24
+ #include function
25
+ for inc in INCLUDE_FUNCS:
26
+ features[f"lex_include_{inc}"] = count_regex(rf"\b{inc}\b", code)
27
+
28
+ #special symbols
29
+ features["lex_symbol_count"] = count_regex(SYMBOL_PATTERN, code)
30
+
31
+ return features
@@ -0,0 +1,60 @@
1
+ import re
2
+ import math
3
+ import zlib
4
+ from collections import Counter
5
+
6
+ #calculate shannon entropy from PHP code
7
+ def calculate_entropy(text):
8
+ if not text:
9
+ return 0.0
10
+
11
+ counter = Counter(text)
12
+ length = len(text)
13
+
14
+ #shanon entropy formula
15
+ return -sum(
16
+ (count / length) * math.log2(count / length)
17
+ for count in counter.values()
18
+ )
19
+
20
+ def compression_ratio(text):
21
+ if not text:
22
+ return 0.0
23
+
24
+ #convert text into bytes before compression
25
+ encoded = text.encode("utf-8", errors="ignore")
26
+
27
+ if len(encoded) == 0:
28
+ return 0.0
29
+
30
+ #compress text using zlib
31
+ compressed = zlib.compress(encoded)
32
+ return len(compressed) / len(encoded)
33
+
34
+ #extract statistical features from PHP code
35
+ def extract_statistical_features(php_code):
36
+ if not isinstance(php_code, str):
37
+ php_code = ""
38
+
39
+ length = len(php_code)
40
+
41
+ features = {
42
+ "stat_entropy": 0,
43
+ "stat_digit_ratio": 0,
44
+ "stat_symbol_ratio": 0,
45
+ "stat_compression_ratio": 0
46
+ }
47
+
48
+ if length == 0:
49
+ return features
50
+
51
+ features["stat_entropy"] = calculate_entropy(php_code)
52
+ #calculate ratios of numeric characters
53
+ features["stat_digit_ratio"] = sum(c.isdigit() for c in php_code) / length
54
+ #calculate ratio of special symbols (non-alphanumeric characters)
55
+ features["stat_symbol_ratio"] = sum(not c.isalnum() for c in php_code) / length
56
+ #calculate compression ratio
57
+ features["stat_compression_ratio"] = compression_ratio(php_code)
58
+
59
+ return features
60
+
@@ -0,0 +1 @@
1
+ ["lex_func_eval", "stat_digit_ratio", "classDefExists", "lex_input__POST", "stat_entropy", "dynamicFuncCallExists", "lex_input__FILES", "lex_func_exec", "varUsageCount", "funcDefCount", "lex_symbol_count", "superglobalAsFuncArg", "suspiciousConcat", "lex_include_require_once", "stat_compression_ratio", "stat_symbol_ratio", "varExists", "lex_func_system", "lex_input__REQUEST", "assignmentCount"]
@@ -0,0 +1,19 @@
1
+ import os
2
+ import pickle
3
+ import pandas as pd
4
+ import json
5
+ from joblib import dump, load
6
+
7
+
8
+ base_dir = os.path.dirname(os.path.dirname(__file__))
9
+
10
+ def load_feature_columns():
11
+ feature_path = os.path.join(base_dir, "model", "features_selected.json")
12
+ with open(feature_path, "r") as f:
13
+ cols = json.load(f)
14
+ return cols
15
+
16
+ def load_model():
17
+ model_path = os.path.join(base_dir, "model", "rf_webshell_model.joblib")
18
+ return load(model_path)
19
+
File without changes
@@ -0,0 +1,174 @@
1
+ import os
2
+ import sys
3
+ import json
4
+ from colorama import Fore, Style
5
+ import pandas as pd
6
+ from sklearn.inspection import permutation_importance
7
+ from webshell_analyzer.extractor.extractor import extract_features
8
+ from webshell_analyzer.model.model_loader import load_feature_columns, load_model
9
+
10
+ feature_columns = load_feature_columns()
11
+ model = load_model()
12
+
13
+ max_file_size = 10_000_000 # 10 MB
14
+
15
+ def check_file_content(filepath):
16
+ try:
17
+ #Read only the first 2000 bytes to check for PHP tags
18
+ with open(filepath, 'r', encoding='utf-8', errors='ignore') as file:
19
+ content = file.read(2000).lower()
20
+
21
+ #check if the file contains PHP opening tags
22
+ if "<?php" in content or "<?=" in content:
23
+ return True
24
+ else:
25
+ return False
26
+ except Exception as e:
27
+ print(f"[ERROR] Could not read file '{filepath}': {e}")
28
+ return False
29
+
30
+ def validate_file(filepath):
31
+ size = os.path.getsize(filepath)
32
+
33
+ #check whether the file is empty
34
+ if size == 0:
35
+ return False, "Empty File, No Content to Analyze"
36
+
37
+ #validate maximum allowed file size
38
+ if size > max_file_size:
39
+ return False, "File too Large"
40
+
41
+ #check whether the file contains PHP code or not, if not skip the file
42
+ if not check_file_content(filepath):
43
+ return False, "No PHP Code Detected"
44
+
45
+ return True, None
46
+
47
+
48
+ def processing_file(filepath):
49
+ is_valid, reason = validate_file(filepath)
50
+
51
+ result = {
52
+ "filepath": filepath,
53
+ "filename": os.path.basename(filepath),
54
+ "file_size": os.path.getsize(filepath)
55
+ }
56
+
57
+ #if the file is not valid, return the result with status "invalid" and reason for skipping the file
58
+ if not is_valid:
59
+ result.update({
60
+ "status": "invalid",
61
+ "prediction": "N/A",
62
+ "reason": reason,
63
+ })
64
+ return result
65
+
66
+ #feature extraction
67
+ features = extract_features(filepath)
68
+
69
+ #return the result with status "error", if feature extraction fails
70
+ if features is None:
71
+ result.update({
72
+ "status": "error",
73
+ "prediction": "N/A",
74
+ "reason": "Feature extraction failed",
75
+ })
76
+ return result
77
+
78
+ features_df = pd.DataFrame([features])
79
+ features_df = features_df.reindex(columns=feature_columns, fill_value=0)
80
+
81
+ #model prediction
82
+ pred = model.predict(features_df)[0]
83
+ proba = model.predict_proba(features_df)[0]
84
+
85
+ proba_normal = proba[0]
86
+ proba_webshell = proba[1]
87
+
88
+ #determine the confidence score based on the predicted class with the highest probability
89
+ if proba_webshell > proba_normal:
90
+ proba = f"{proba_webshell:.2%}"
91
+ else:
92
+ proba = f"{proba_normal:.2%}"
93
+
94
+ label = "webshell" if str(pred).lower() == "webshell" or pred == 1 else "normal"
95
+
96
+ result.update({
97
+ "status": "processed",
98
+ "prediction": label,
99
+ "confidence": proba,
100
+ "features": features
101
+ })
102
+
103
+ return result
104
+
105
+ #saving the output detection to json file
106
+ def save_result_to_json(result, output_file):
107
+ if os.path.exists(output_file):
108
+ with open(output_file, "r") as f:
109
+ try:
110
+ data = json.load(f)
111
+
112
+ if not isinstance(data, list):
113
+ data = [data]
114
+ except json.JSONDecodeError:
115
+ data = []
116
+ else:
117
+ data = []
118
+ data.append(result)
119
+
120
+ with open(output_file, "w") as f:
121
+ json.dump(data, f, indent=4)
122
+
123
+
124
+ def get_status_color(status):
125
+ if status == "processed":
126
+ return Fore.GREEN
127
+ elif status == "skipped":
128
+ return Fore.YELLOW
129
+ elif status == "error":
130
+ return Fore.RED
131
+ else:
132
+ return Fore.CYAN
133
+
134
+ def show_save_message(output_file):
135
+ print(Fore.GREEN + "\n" + "-" * 50)
136
+ print(Fore.GREEN + f"OUTPUT FILE SAVED".center(50))
137
+ print(Fore.GREEN + "-" * 50)
138
+ print(Fore.GREEN + f"Location: {output_file}")
139
+ print(Fore.GREEN + "-" * 50)
140
+ print(Style.RESET_ALL)
141
+
142
+
143
+ def detect_file(filepath, output_file=None):
144
+ result = processing_file(filepath)
145
+ color = get_status_color(result["status"])
146
+
147
+
148
+ if result["status"] == "processed" and "features" in result:
149
+ print(color + "\n" + "=" * 50)
150
+ print(color + "EXTRACTION FEATURES".center(50))
151
+ print(color + "=" * 50)
152
+ for k, v in result["features"].items():
153
+ nilai = f"{v:.4f}" if isinstance(v, float) else str(v)
154
+ print(color + f"{k:<35} : {nilai}")
155
+ print(color + "=" * 50 + Style.RESET_ALL)
156
+
157
+ print(color + "\n" + "=" * 50)
158
+ print(color + "SUMMARY RESULT".center(50))
159
+ print(color + "=" * 50)
160
+ print(color + f"Status : {result['status']}")
161
+ print(color + f"File Size : {os.path.getsize(filepath)} bytes")
162
+ if result["status"] == "processed":
163
+ print(color + f"Prediction : {result['prediction'].upper()}")
164
+ print(color + f"Confidence : {result['confidence']}")
165
+ else :
166
+ print(color + f"Reason : {result['reason']}")
167
+ print(color + "=" * 50)
168
+
169
+ if output_file:
170
+ save_result_to_json(result, output_file)
171
+ show_save_message(output_file)
172
+ return result
173
+
174
+
@@ -0,0 +1,68 @@
1
+ import os
2
+ import sys
3
+ from colorama import Style, Fore
4
+ import json
5
+ from webshell_analyzer.modules.detector import processing_file, show_save_message
6
+
7
+ def scan_directory(directorypath, output_file=None):
8
+
9
+ total_files = 0
10
+ total_processed_files = 0
11
+ total_filewebshells = 0
12
+ total_filenormal = 0
13
+
14
+ results = []
15
+
16
+ for root, _, files in os.walk(directorypath):
17
+ for file in files:
18
+ filepath = os.path.join(root, file)
19
+ total_files += 1
20
+
21
+ result = processing_file(filepath)
22
+
23
+ results.append(result)
24
+
25
+ if result["status"] == "processed":
26
+ print(Fore.GREEN + f"[{result['prediction'].upper()}] {filepath}")
27
+ total_processed_files += 1
28
+
29
+ if result["prediction"].lower() == "webshell":
30
+ total_filewebshells += 1
31
+ else :
32
+ total_filenormal += 1
33
+ else:
34
+ print(Fore.YELLOW + f"[SKIPPED] {result['reason']}: {filepath}")
35
+
36
+ summary = {
37
+ "total files": total_files,
38
+ "processed_files": total_processed_files,
39
+ "skipped files": total_files - total_processed_files,
40
+ "normal files": total_filenormal,
41
+ "webshell files": total_filewebshells
42
+ }
43
+
44
+ final_output = {
45
+ "results" : results,
46
+ "summary": summary
47
+ }
48
+
49
+ print(Fore.GREEN + "\n" + "=" * 50)
50
+ print(Fore.GREEN + "SCAN SUMMARY".center(50))
51
+ print(Fore.GREEN + "=" * 50)
52
+ print(Fore.GREEN + f"Total files: {total_files}")
53
+ print(Fore.GREEN + f"Processed files: {total_processed_files}")
54
+ print(Fore.GREEN + f"Skipped files: {total_files - total_processed_files}")
55
+ print(Fore.GREEN + f"normal files: {total_filenormal}")
56
+ print(Fore.GREEN + f"webshell files: {total_filewebshells}")
57
+ print(Fore.GREEN + "=" * 50 + "\n")
58
+ if output_file:
59
+ with open(output_file, "w") as f:
60
+ json.dump(final_output, f, indent=4)
61
+ show_save_message(output_file)
62
+
63
+ sys.stdout.write(Style.RESET_ALL)
64
+ sys.stdout.flush()
65
+
66
+ return output_file, results
67
+
68
+
@@ -0,0 +1,105 @@
1
+ Metadata-Version: 2.4
2
+ Name: webshell-analyzer
3
+ Version: 1.0.0
4
+ Summary: Webshell Detection Tool integrating Machine Learning based on Static Feature Extraction
5
+ Author-email: Adelia Saputri <adelias.dev@gmail.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 Adelia saputri
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Keywords: webshell,detection,machine learning,security,php
29
+ Classifier: Programming Language :: Python :: 3
30
+ Classifier: License :: OSI Approved :: MIT License
31
+ Classifier: Operating System :: OS Independent
32
+ Classifier: Topic :: Security
33
+ Classifier: Intended Audience :: System Administrators
34
+ Requires-Python: >=3.8
35
+ Description-Content-Type: text/markdown
36
+ License-File: LICENSE
37
+ Requires-Dist: pandas
38
+ Requires-Dist: scikit-learn
39
+ Requires-Dist: colorama
40
+ Requires-Dist: pyfiglet
41
+ Requires-Dist: joblib
42
+ Dynamic: license-file
43
+
44
+ # Webshell-Analyzer
45
+ ![Webshell Analyzer Home Screen](/assets/images/home-screen.png "Home Screen")
46
+ webshell analyzer is command line based webshell detection tool that utillizes static feature extraction and using Random Forest classification to detect malicious PHP webshell.
47
+
48
+ # Table of Contens
49
+ - About
50
+ - Features
51
+ - Requirements
52
+ - Instalation
53
+ - Usage
54
+ - Commands
55
+
56
+ # About
57
+ webshell analyzer was developed to assist security analysts, researchers, and system administrators in identifying potentially malicious PHP files before they are executed on a web server. the tool helps to mitigate the risk of unauthorised access, web defacement attacks, and persistent backdoor attacks, which are commonly associated with webshells.
58
+
59
+ this system combines three static code analysis methods: lexical analysis, statistical analysis, and Abstract Syntax Tree (AST) analysis. this approach enables the detection process to identify suspicious functions, code structure patterns, and statistical characteristics that may indicate malicious behavior.
60
+
61
+ # Features
62
+ - Scan individual PHP files for webshell indicators
63
+ - Recursively scan entire directories
64
+ - Static feature extraction (no code execution required)
65
+ - Machine learning classification using Random Forest
66
+ - Export results to only JSON file
67
+ - Interactive CLI environment
68
+
69
+ # Requirements
70
+ before installing and running webshell analyzer, ensure that your system meets the following requirements :
71
+
72
+ - Python 3.10 or later
73
+ - Pip (oython package manager)
74
+ - Git
75
+
76
+ **Python Dependencies**
77
+ The required python packages are listed in the ```requirements.txt``` file and can be installed automatically using :
78
+
79
+ ```pip install -r requirements.txt```
80
+
81
+ # Installation
82
+ to install webshell analyzer, clone this repository to your local machine using the following command :
83
+
84
+ ```git clone https://github.com```
85
+
86
+ After the installation process is complete, the system is ready to use.
87
+
88
+ # Usage
89
+ To get started with Webshell Analyzer:
90
+
91
+ Start ```bash wsanalyzer```: this is the main command to enter the Webshell Analyzer interactive environment.
92
+ You will be greeted with the Webshell Analyzer prompt:
93
+
94
+ From here, you can run all available commands such as `scan`, `detect`, `--output`, `help`, `exit`.
95
+
96
+ # Command
97
+ 1. ```scan <directory_path> [--output <output_file.json>]``` -> scan all PHP files in a directory for webshell detection
98
+ 2. ```detect <file_path> [--output <output_file.json>]``` -> detect a specific file for webshell activity
99
+ 3. ```help``` -> for show this help message
100
+ 4. ```exit``` -> For Exit the Webshell Analyzer
101
+ 5. ```--output <output_file.json>``` -> Save the detection results to a JSON file
102
+
103
+
104
+
105
+