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.
- webshell_analyzer/__init__.py +0 -0
- webshell_analyzer/cli/__init__.py +0 -0
- webshell_analyzer/cli/cli.py +151 -0
- webshell_analyzer/extractor/ast_extraction/composer.json +5 -0
- webshell_analyzer/extractor/ast_extraction/composer.lock +77 -0
- webshell_analyzer/extractor/ast_extraction/src/NodeVisitor.php +85 -0
- webshell_analyzer/extractor/ast_extraction/src/astBuilder.php +50 -0
- webshell_analyzer/extractor/ast_extraction/src/astExtractor.php +50 -0
- webshell_analyzer/extractor/ast_extraction/src/featuresDeclare.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/autoload.php +25 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/ClassLoader.php +579 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/InstalledVersions.php +378 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_classmap.php +10 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_namespaces.php +9 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_psr4.php +10 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_real.php +38 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_static.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.json +67 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.php +32 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/platform_check.php +26 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +150 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php +151 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +50 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +86 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +116 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +73 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php +67 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +94 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php +147 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php +171 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php +223 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +65 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +145 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +83 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder.php +12 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php +375 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +338 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php +6 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment.php +209 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +6 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +237 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Error.php +173 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +43 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php +12 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +31 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php +178 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +71 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +237 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +282 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php +108 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +230 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php +93 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +26 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +60 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +19 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +60 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php +19 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +31 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +31 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/VoidCastEmulator.php +98 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer.php +116 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Modifiers.php +85 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NameContext.php +284 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php +44 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +43 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +13 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +84 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +60 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +16 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Void_.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +25 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +86 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +38 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +38 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +35 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +32 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +40 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +35 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +35 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php +8 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +40 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php +85 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +32 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php +278 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php +123 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php +105 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +78 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +82 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +161 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php +6 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +39 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +40 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +77 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +109 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +154 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +94 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +44 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +32 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +47 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +50 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +81 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +41 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +46 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +40 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +16 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +121 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +12 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +47 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php +8 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php +55 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +16 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node.php +150 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php +181 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php +299 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php +90 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +287 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +26 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +19 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +82 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +47 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +269 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +73 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +51 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php +124 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +24 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php +2919 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php +2917 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser.php +24 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php +1335 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php +42 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php +175 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +1232 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +51 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +1706 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Token.php +18 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +71 -0
- webshell_analyzer/extractor/extractor.py +73 -0
- webshell_analyzer/extractor/lexical_extraction/lexicalExtractor.py +31 -0
- webshell_analyzer/extractor/statistical_extraction/statisticalExtractor.py +60 -0
- webshell_analyzer/model/features_selected.json +1 -0
- webshell_analyzer/model/model_loader.py +19 -0
- webshell_analyzer/model/rf_webshell_model.joblib +0 -0
- webshell_analyzer/modules/__init__.py +0 -0
- webshell_analyzer/modules/detector.py +174 -0
- webshell_analyzer/modules/scanner.py +68 -0
- webshell_analyzer-1.0.0.dist-info/METADATA +105 -0
- webshell_analyzer-1.0.0.dist-info/RECORD +304 -0
- webshell_analyzer-1.0.0.dist-info/WHEEL +5 -0
- webshell_analyzer-1.0.0.dist-info/entry_points.txt +2 -0
- webshell_analyzer-1.0.0.dist-info/licenses/LICENSE +21 -0
- webshell_analyzer-1.0.0.dist-info/top_level.txt +1 -0
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import pyfiglet
|
|
2
|
+
import cmd
|
|
3
|
+
import os
|
|
4
|
+
import shlex
|
|
5
|
+
import json
|
|
6
|
+
import sys
|
|
7
|
+
from colorama import Fore, Style, init
|
|
8
|
+
from webshell_analyzer.modules.detector import detect_file
|
|
9
|
+
from webshell_analyzer.modules.scanner import scan_directory
|
|
10
|
+
|
|
11
|
+
sys.stdout.reconfigure(encoding='utf-8')
|
|
12
|
+
init(autoreset=True)
|
|
13
|
+
|
|
14
|
+
def banner ():
|
|
15
|
+
f = pyfiglet.figlet_format("W3bshell-Analyzer", font="big_money-se")
|
|
16
|
+
print(Fore.MAGENTA + f)
|
|
17
|
+
print(Fore.MAGENTA + "Webshell Analyzer Tool Integrating Machine Learning".center(80))
|
|
18
|
+
print(Fore.MAGENTA + "Based on Extracting Features from PHP Source Code".center(80))
|
|
19
|
+
print(Fore.MAGENTA + "=" * 80)
|
|
20
|
+
print(Fore.MAGENTA + "Author : Adelia Saputri")
|
|
21
|
+
print(Fore.MAGENTA + "Github : https://github.com/adeliasaputri")
|
|
22
|
+
print(Fore.MAGENTA + "Email : adelias.dev@gmail.com")
|
|
23
|
+
print(Fore.MAGENTA + "Engine : AST + Lexical + Statistical Features")
|
|
24
|
+
print(Fore.MAGENTA + "=" * 80 + "\n")
|
|
25
|
+
|
|
26
|
+
def parse_args(args):
|
|
27
|
+
path = None
|
|
28
|
+
output = None
|
|
29
|
+
output_missing = False
|
|
30
|
+
|
|
31
|
+
i = 0
|
|
32
|
+
while i < len(args):
|
|
33
|
+
if args[i] == "--output":
|
|
34
|
+
if i + 1 < len(args) and not args[i + 1].startswith("--"):
|
|
35
|
+
output = args[i + 1]
|
|
36
|
+
i += 1
|
|
37
|
+
else:
|
|
38
|
+
output_missing = True
|
|
39
|
+
else:
|
|
40
|
+
path = args[i]
|
|
41
|
+
i += 1
|
|
42
|
+
return path, output, output_missing
|
|
43
|
+
|
|
44
|
+
class webshell_cmd(cmd.Cmd):
|
|
45
|
+
prompt = Fore.MAGENTA + "w3bshell-analyzer> "
|
|
46
|
+
|
|
47
|
+
def do_scan(self, arg):
|
|
48
|
+
"""Scan Directory: scan <directory_path>"""
|
|
49
|
+
try :
|
|
50
|
+
args = shlex.split(arg)
|
|
51
|
+
except :
|
|
52
|
+
print(Fore.RED + "Error: Invalid arguments. Usage: scan <path> [--output <output_file>]")
|
|
53
|
+
return
|
|
54
|
+
|
|
55
|
+
if len(args) == 0:
|
|
56
|
+
print(Fore.RED + "[ERROR] Path is required. Usage: scan <path> [--output <output_file>]")
|
|
57
|
+
return
|
|
58
|
+
|
|
59
|
+
directorypath, output, output_missing = parse_args(args)
|
|
60
|
+
|
|
61
|
+
if output_missing:
|
|
62
|
+
print(Fore.RED + "[ERROR] flag '--output' is requires a filename argument. Usage: detect <file_path> --output <output_file.json>")
|
|
63
|
+
return
|
|
64
|
+
|
|
65
|
+
if not os.path.isdir(directorypath):
|
|
66
|
+
print(Fore.RED + f"[ERROR] Path '{directorypath}' is not a valid directory.")
|
|
67
|
+
return
|
|
68
|
+
|
|
69
|
+
#Validasi output
|
|
70
|
+
if output is not None:
|
|
71
|
+
output_dir = os.path.dirname(output)
|
|
72
|
+
if output_dir != "" and not os.path.isdir(output_dir):
|
|
73
|
+
print(Fore.RED + f"[ERROR] Cannot save output to Directory \"{output_dir}\". Please ensure the destination folder exists before saving!")
|
|
74
|
+
return
|
|
75
|
+
if not output.endswith(".json"):
|
|
76
|
+
print(Fore.RED + f"[ERROR] Output file must have a .json extension")
|
|
77
|
+
return
|
|
78
|
+
|
|
79
|
+
print(Fore.GREEN + f"[SCANNING DIRECTORY..]: {directorypath}\n")
|
|
80
|
+
result = scan_directory(directorypath, output_file=output)
|
|
81
|
+
|
|
82
|
+
def do_detect(self, arg):
|
|
83
|
+
"""Detect File: detect <file_path>"""
|
|
84
|
+
try :
|
|
85
|
+
args = shlex.split(arg)
|
|
86
|
+
except :
|
|
87
|
+
print(Fore.RED + "[ERROR] Invalid arguments. Usage: detect <file_path> [--output <output_file>]")
|
|
88
|
+
return
|
|
89
|
+
|
|
90
|
+
if len(args) == 0:
|
|
91
|
+
print(Fore.RED + "[ERROR] Path is required. Usage: detect <path> [--output <output_file>]")
|
|
92
|
+
return
|
|
93
|
+
|
|
94
|
+
filepath, output, output_missing = parse_args(args)
|
|
95
|
+
|
|
96
|
+
if output_missing:
|
|
97
|
+
print(Fore.RED + "[ERROR] flag '--output' is requires a filename argument. Usage: detect <file_path> --output <output_file.json>")
|
|
98
|
+
return
|
|
99
|
+
|
|
100
|
+
if not os.path.isfile(filepath):
|
|
101
|
+
print(Fore.RED + f"[ERROR] File '{filepath}' does not exist.")
|
|
102
|
+
return
|
|
103
|
+
|
|
104
|
+
#Validasi output
|
|
105
|
+
if output is not None:
|
|
106
|
+
output_dir = os.path.dirname(output)
|
|
107
|
+
if output_dir != "" and not os.path.isdir(output_dir):
|
|
108
|
+
print(Fore.RED + f"[ERROR] Cannot save output to Directory {output_dir}")
|
|
109
|
+
print(Fore.RED + f"Please ensure the destination folder exists before saving")
|
|
110
|
+
return
|
|
111
|
+
if not output.endswith(".json"):
|
|
112
|
+
print(Fore.RED + f"[ERROR] Output file must have a .json extension")
|
|
113
|
+
return
|
|
114
|
+
|
|
115
|
+
print (Fore.GREEN + f"[ANALYZING..] {filepath}")
|
|
116
|
+
detect_file(filepath, output_file=output)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def do_help(self, arg):
|
|
120
|
+
"""Show help message"""
|
|
121
|
+
print(Fore.CYAN + "=" * 50)
|
|
122
|
+
print(Fore.CYAN + "AVAILABLE COMMANDS: \n")
|
|
123
|
+
print(Fore.CYAN + "scan <directory_path> [--output <output_file.json>] -> scan all PHP files in a directory for webshell detection")
|
|
124
|
+
print(Fore.CYAN + "detect <file_path> [--output <output_file.json>] -> detect a specific file for webshell activity")
|
|
125
|
+
print(Fore.CYAN + "help -> for show this help message")
|
|
126
|
+
print(Fore.CYAN + "exit -> For Exit the Webshell Analyzer")
|
|
127
|
+
print(Fore.CYAN + "=" * 50)
|
|
128
|
+
print(Fore.CYAN + "OPTIONAL ARGUMENTS: \n")
|
|
129
|
+
print(Fore.CYAN + "--output <output_file.json> -> Save the detection results to a JSON file")
|
|
130
|
+
print(Fore.CYAN + "=" * 50 + "\n")
|
|
131
|
+
|
|
132
|
+
def do_exit(self, arg):
|
|
133
|
+
"""Exit the webshell analyzer"""
|
|
134
|
+
print(Fore.GREEN + "Exiting webshell analyzer, Goodbye!")
|
|
135
|
+
return True
|
|
136
|
+
|
|
137
|
+
def default(self, line):
|
|
138
|
+
"""Handle unknown commands"""
|
|
139
|
+
print(Fore.RED + "Unknown command: " + f'{line}')
|
|
140
|
+
print("Type 'help' for a list of available commands.\n")
|
|
141
|
+
|
|
142
|
+
def emptyline(self):
|
|
143
|
+
pass
|
|
144
|
+
|
|
145
|
+
def main() :
|
|
146
|
+
banner()
|
|
147
|
+
webshell_cmd().cmdloop()
|
|
148
|
+
|
|
149
|
+
if __name__ == "__main__":
|
|
150
|
+
main()
|
|
151
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_readme": [
|
|
3
|
+
"This file locks the dependencies of your project to a known state",
|
|
4
|
+
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
|
5
|
+
"This file is @generated automatically"
|
|
6
|
+
],
|
|
7
|
+
"content-hash": "efef34747d233325e6e1b13c0f9b9df0",
|
|
8
|
+
"packages": [
|
|
9
|
+
{
|
|
10
|
+
"name": "nikic/php-parser",
|
|
11
|
+
"version": "v5.7.0",
|
|
12
|
+
"source": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/nikic/PHP-Parser.git",
|
|
15
|
+
"reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
|
|
16
|
+
},
|
|
17
|
+
"dist": {
|
|
18
|
+
"type": "zip",
|
|
19
|
+
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
|
|
20
|
+
"reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
|
|
21
|
+
"shasum": ""
|
|
22
|
+
},
|
|
23
|
+
"require": {
|
|
24
|
+
"ext-ctype": "*",
|
|
25
|
+
"ext-json": "*",
|
|
26
|
+
"ext-tokenizer": "*",
|
|
27
|
+
"php": ">=7.4"
|
|
28
|
+
},
|
|
29
|
+
"require-dev": {
|
|
30
|
+
"ircmaxell/php-yacc": "^0.0.7",
|
|
31
|
+
"phpunit/phpunit": "^9.0"
|
|
32
|
+
},
|
|
33
|
+
"bin": [
|
|
34
|
+
"bin/php-parse"
|
|
35
|
+
],
|
|
36
|
+
"type": "library",
|
|
37
|
+
"extra": {
|
|
38
|
+
"branch-alias": {
|
|
39
|
+
"dev-master": "5.x-dev"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"autoload": {
|
|
43
|
+
"psr-4": {
|
|
44
|
+
"PhpParser\\": "lib/PhpParser"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"notification-url": "https://packagist.org/downloads/",
|
|
48
|
+
"license": [
|
|
49
|
+
"BSD-3-Clause"
|
|
50
|
+
],
|
|
51
|
+
"authors": [
|
|
52
|
+
{
|
|
53
|
+
"name": "Nikita Popov"
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"description": "A PHP parser written in PHP",
|
|
57
|
+
"keywords": [
|
|
58
|
+
"parser",
|
|
59
|
+
"php"
|
|
60
|
+
],
|
|
61
|
+
"support": {
|
|
62
|
+
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
|
63
|
+
"source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
|
|
64
|
+
},
|
|
65
|
+
"time": "2025-12-06T11:56:16+00:00"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"packages-dev": [],
|
|
69
|
+
"aliases": [],
|
|
70
|
+
"minimum-stability": "stable",
|
|
71
|
+
"stability-flags": {},
|
|
72
|
+
"prefer-stable": false,
|
|
73
|
+
"prefer-lowest": false,
|
|
74
|
+
"platform": {},
|
|
75
|
+
"platform-dev": {},
|
|
76
|
+
"plugin-api-version": "2.6.0"
|
|
77
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace NodeVisitor;
|
|
4
|
+
|
|
5
|
+
require_once __DIR__ . '/../vendor/autoload.php';
|
|
6
|
+
require_once __DIR__ . '/featuresDeclare.php';
|
|
7
|
+
|
|
8
|
+
use Features\featureWrapper;
|
|
9
|
+
use PhpParser\NodeVisitorAbstract;
|
|
10
|
+
use PhpParser\Node;
|
|
11
|
+
use PhpParser\Node\Name;
|
|
12
|
+
use PhpParser\Node\Expr;
|
|
13
|
+
use PhpParser\Node\Stmt;
|
|
14
|
+
|
|
15
|
+
class NodeVisitor extends NodeVisitorAbstract {
|
|
16
|
+
private featureWrapper $features;
|
|
17
|
+
private array $superglobal = ['_GET', '_POST', '_COOKIE', '_REQUEST', '_FILES', '_ENV', '_SERVER', '_SESSION', 'GLOBALS'];
|
|
18
|
+
|
|
19
|
+
public function __construct(featureWrapper $features){
|
|
20
|
+
$this->features = $features;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public function enterNode(Node $node) {
|
|
24
|
+
$this->handleDynamicFeatures($node);
|
|
25
|
+
$this->handleStructuralFeatures($node);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private function getFuncName(Node $node): ?string {
|
|
29
|
+
if($node instanceof Expr\FuncCall && $node->name instanceof Name){
|
|
30
|
+
return strtolower($node->name->toString());
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private function isSuperglobal(Node $node): bool {
|
|
36
|
+
return $node instanceof Expr\ArrayDimFetch && $node->var instanceof Expr\Variable && is_string($node->var->name) && in_array($node->var->name, $this->superglobal);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private function handleDynamicFeatures(Node $node){
|
|
40
|
+
#dynamic function call exists (dynamicFuncCallExists feature)
|
|
41
|
+
if($node instanceof Expr\FuncCall && $node->name instanceof Expr\Variable){
|
|
42
|
+
$this->features->dynamicFeatures->dynamicFuncCallExists = true;
|
|
43
|
+
}
|
|
44
|
+
#check for variable variables (varExists feature)
|
|
45
|
+
if($node instanceof Expr\Variable && $node->name instanceof Expr\Variable){
|
|
46
|
+
$this->features->dynamicFeatures->varExists = true;
|
|
47
|
+
}
|
|
48
|
+
#count variable usage (varUsageCount feature)
|
|
49
|
+
if($node instanceof Expr\Variable){
|
|
50
|
+
$this->features->dynamicFeatures->varUsageCount++;
|
|
51
|
+
}
|
|
52
|
+
#count assignments (assignmentCount feature)
|
|
53
|
+
if($node instanceof Expr\Assign){
|
|
54
|
+
$this->features->dynamicFeatures->assignmentCount++;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private function handleStructuralFeatures(Node $node) {
|
|
59
|
+
|
|
60
|
+
#class definition exists (classDefExists feature)
|
|
61
|
+
if($node instanceof Stmt\Class_){
|
|
62
|
+
$this->features->structuralFeatures->classDefExists = true;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
#count function definitions (funcDefCount feature)
|
|
66
|
+
if($node instanceof Stmt\Function_ || $node instanceof Stmt\ClassMethod){
|
|
67
|
+
$this->features->structuralFeatures->funcDefCount++;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
#count superglobal used as function argument (superglobalAsFuncArg feature)
|
|
71
|
+
if($node instanceof Expr\FuncCall ){
|
|
72
|
+
foreach($node->args as $arg){
|
|
73
|
+
if($this->isSuperglobal($arg->value)){
|
|
74
|
+
$this->features->structuralFeatures->superglobalAsFuncArg++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
#count suspicious concatenation (suspiciousConcat feature)
|
|
80
|
+
if($node instanceof Expr\BinaryOp\Concat){
|
|
81
|
+
$this->features->structuralFeatures->suspiciousConcat = ($this->features->structuralFeatures->suspiciousConcat ?? 0) + 1;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
?>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
require_once __DIR__ . '/../vendor/autoload.php';
|
|
4
|
+
require_once __DIR__ . '/featuresDeclare.php';
|
|
5
|
+
require_once __DIR__ . '/NodeVisitor.php';
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
use PhpParser\ParserFactory;
|
|
9
|
+
use PhpParser\NodeTraverser;
|
|
10
|
+
use Features\featureWrapper;
|
|
11
|
+
use NodeVisitor\NodeVisitor;
|
|
12
|
+
use PhpParser\PhpVersion;
|
|
13
|
+
|
|
14
|
+
class astBuilder
|
|
15
|
+
{
|
|
16
|
+
public $parser;
|
|
17
|
+
|
|
18
|
+
public function __construct()
|
|
19
|
+
{
|
|
20
|
+
$factory = new ParserFactory();
|
|
21
|
+
$this->parser = $factory->createForVersion(PhpParser\PhpVersion::fromString('5.6'));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public function builder($code)
|
|
25
|
+
{
|
|
26
|
+
|
|
27
|
+
$feature = new featureWrapper();
|
|
28
|
+
#debug
|
|
29
|
+
$code = preg_replace('/\$(\w+)\{([^}]+)\}/', '$\1[\2]', $code);
|
|
30
|
+
$code = str_replace(["<?PHP", "<?Php"], "<?php", $code);
|
|
31
|
+
$code = str_replace('@', '', $code);
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
$stmts = $this->parser->parse($code);
|
|
35
|
+
} catch (\Throwable $e) {
|
|
36
|
+
error_log("Parse error in code: " . $e->getMessage());
|
|
37
|
+
return $feature->toArray();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
$traverser = new NodeTraverser();
|
|
41
|
+
$visitor = new NodeVisitor($feature);
|
|
42
|
+
$traverser->addVisitor($visitor);
|
|
43
|
+
$traverser->traverse($stmts);
|
|
44
|
+
|
|
45
|
+
return $feature->toArray();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
?>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
error_reporting(0);
|
|
3
|
+
ini_set('display_errors', 0);
|
|
4
|
+
ini_set('log_errors', 0);
|
|
5
|
+
|
|
6
|
+
ob_start();
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
require_once __DIR__ . '/../vendor/autoload.php';
|
|
10
|
+
require_once __DIR__ . '/astBuilder.php';
|
|
11
|
+
|
|
12
|
+
if($argc < 2) {
|
|
13
|
+
echo json_encode("Error: No file path provided") . "\n";
|
|
14
|
+
exit(1);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
$filepath = $argv[1];
|
|
18
|
+
|
|
19
|
+
if(!file_exists($filepath)) {
|
|
20
|
+
echo json_encode("Error: File not found: $filepath") . "\n";
|
|
21
|
+
exit(1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
$code = file_get_contents($filepath);
|
|
26
|
+
$code = trim($code);
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
if ($code === false || trim($code) === '') {
|
|
30
|
+
echo json_encode("Error Empty file");
|
|
31
|
+
exit(1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
$builder = new astBuilder();
|
|
35
|
+
|
|
36
|
+
$result = $builder->builder($code);
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if (!is_array($result)) {
|
|
40
|
+
echo json_encode(["error" => "Builder did not return array"]);
|
|
41
|
+
exit(1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if(ob_get_length()){
|
|
45
|
+
ob_clean();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Output valid
|
|
49
|
+
echo json_encode($result);
|
|
50
|
+
?>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Features;
|
|
4
|
+
|
|
5
|
+
class dynamicFeatures{
|
|
6
|
+
public bool $dynamicFuncCallExists = false;
|
|
7
|
+
public bool $varExists = false;
|
|
8
|
+
public int $varUsageCount = 0;
|
|
9
|
+
public int $assignmentCount = 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
class structuralFeatures{
|
|
13
|
+
public bool $classDefExists = false;
|
|
14
|
+
public int $funcDefCount = 0;
|
|
15
|
+
public int $superglobalAsFuncArg = 0;
|
|
16
|
+
public int $suspiciousConcat = 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
class featureWrapper{
|
|
20
|
+
public dynamicFeatures $dynamicFeatures;
|
|
21
|
+
public structuralFeatures $structuralFeatures;
|
|
22
|
+
|
|
23
|
+
public function __construct(){
|
|
24
|
+
$this->dynamicFeatures = new dynamicFeatures();
|
|
25
|
+
$this->structuralFeatures = new structuralFeatures();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public function toArray(): array {
|
|
29
|
+
return array_merge(
|
|
30
|
+
get_object_vars($this->dynamicFeatures),
|
|
31
|
+
get_object_vars($this->structuralFeatures)
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
?>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
// autoload.php @generated by Composer
|
|
4
|
+
|
|
5
|
+
if (PHP_VERSION_ID < 50600) {
|
|
6
|
+
if (!headers_sent()) {
|
|
7
|
+
header('HTTP/1.1 500 Internal Server Error');
|
|
8
|
+
}
|
|
9
|
+
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
|
|
10
|
+
if (!ini_get('display_errors')) {
|
|
11
|
+
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
|
12
|
+
fwrite(STDERR, $err);
|
|
13
|
+
} elseif (!headers_sent()) {
|
|
14
|
+
echo $err;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
trigger_error(
|
|
18
|
+
$err,
|
|
19
|
+
E_USER_ERROR
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
require_once __DIR__ . '/composer/autoload_real.php';
|
|
24
|
+
|
|
25
|
+
return ComposerAutoloaderInit9622dd827becd4430ae91af9e0a4face::getLoader();
|