From 88bbf81e0fbca7226f4069e685cc18e9805049ff Mon Sep 17 00:00:00 2001 From: Prabhu Subramanian Date: Thu, 30 Nov 2023 13:33:06 +0000 Subject: [PATCH] Added tags for windows drivers Signed-off-by: Prabhu Subramanian --- build.sbt | 2 +- codemeta.json | 2 +- .../scala/io/appthreat/console/Console.scala | 4 +- meta.yaml | 2 +- .../appthreat/c2cpg/parser/FileDefaults.scala | 2 +- .../x2cpg/passes/taggers/CdxPass.scala | 25 +++++++++++- .../x2cpg/passes/taggers/EasyTagsPass.scala | 40 +++++++++++++++++++ pyproject.toml | 2 +- 8 files changed, 71 insertions(+), 8 deletions(-) diff --git a/build.sbt b/build.sbt index 64e7afd7..18228687 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ name := "chen" ThisBuild / organization := "io.appthreat" -ThisBuild / version := "1.0.4" +ThisBuild / version := "1.0.5" ThisBuild / scalaVersion := "3.3.1" val cpgVersion = "1.4.22" diff --git a/codemeta.json b/codemeta.json index c140d9bd..e3e6ddbb 100644 --- a/codemeta.json +++ b/codemeta.json @@ -7,7 +7,7 @@ "downloadUrl": "https://github.com/AppThreat/chen", "issueTracker": "https://github.com/AppThreat/chen/issues", "name": "chen", - "version": "1.0.4", + "version": "1.0.5", "description": "Code Hierarchy Exploration Net (chen) is an advanced exploration toolkit for your application source code and its dependency hierarchy.", "applicationCategory": "code-analysis", "keywords": [ diff --git a/console/src/main/scala/io/appthreat/console/Console.scala b/console/src/main/scala/io/appthreat/console/Console.scala index be7a844e..7070e9b0 100644 --- a/console/src/main/scala/io/appthreat/console/Console.scala +++ b/console/src/main/scala/io/appthreat/console/Console.scala @@ -499,7 +499,7 @@ class Console[T <: Project]( ): String = if tree then val rootTree = richTreeLib.Tree(title, highlight = true) - atom.file.whereNot(_.name("")).foreach { f => + atom.file.whereNot(_.name("<(unknown|includes)>")).foreach { f => val childTree = richTreeLib.Tree(f.name, highlight = true) f.method.foreach(m => val addedMethods = mutable.Map.empty[String, Boolean] @@ -528,7 +528,7 @@ class Console[T <: Project]( val table = richTableLib.Table(title = title, highlight = true, show_lines = true) table.add_column("File Name") table.add_column("Methods") - atom.file.whereNot(_.name("")).foreach { f => + atom.file.whereNot(_.name("<(unknown|includes)>")).foreach { f => table.add_row( f.name, f.method.filterNot(m => diff --git a/meta.yaml b/meta.yaml index a108bbed..e94b974f 100644 --- a/meta.yaml +++ b/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "1.0.4" %} +{% set version = "1.0.5" %} package: name: chen diff --git a/platform/frontends/c2cpg/src/main/scala/io/appthreat/c2cpg/parser/FileDefaults.scala b/platform/frontends/c2cpg/src/main/scala/io/appthreat/c2cpg/parser/FileDefaults.scala index fe63847e..bb2766a8 100644 --- a/platform/frontends/c2cpg/src/main/scala/io/appthreat/c2cpg/parser/FileDefaults.scala +++ b/platform/frontends/c2cpg/src/main/scala/io/appthreat/c2cpg/parser/FileDefaults.scala @@ -13,7 +13,7 @@ object FileDefaults: val SOURCE_FILE_EXTENSIONS: Set[String] = Set(C_EXT, CC_EXT, CPP_EXT) val HEADER_FILE_EXTENSIONS: Set[String] = - Set(C_HEADER_EXT, CPP_HEADER_EXT, OTHER_HEADER_EXT, ".h.in") + Set(C_HEADER_EXT, CPP_HEADER_EXT, OTHER_HEADER_EXT, ".h.in", ".tmh") private val CPP_FILE_EXTENSIONS = Set(CC_EXT, CPP_EXT, CPP_HEADER_EXT, ".ccm", ".cxxm", ".c++m") diff --git a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/CdxPass.scala b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/CdxPass.scala index 9ddcfbb9..c0896bf2 100644 --- a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/CdxPass.scala +++ b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/CdxPass.scala @@ -43,9 +43,24 @@ class CdxPass(atom: Cpg) extends CpgPass(atom): ) private def PY_REQUEST_PATTERNS = Array(".*views.py:.*") + private def C_REQUEST_PATTERNS = Array( + "Routes::(Post|Get|Delete|Head|Options|Put).*", + "API_CALL", + "API_CALL_ASYNC", + "ENDPOINT", + "ENDPOINT_ASYNC", + "ENDPOINT_INTERCEPTOR", + "ENDPOINT_INTERCEPTOR_ASYNC", + "registerHandler", + "PATH_ADD", + "ADD_METHOD_TO", + "ADD_METHOD_VIA_REGEX", + "WS_PATH_ADD", + "svr\\.(Post|Get|Delete|Head|Options|Put)" + ) private def containsRegex(str: String) = - Pattern.quote(str) == str || str.contains("*") || str.contains("(") || str.contains(")") + Pattern.quote(str) != str || str.contains("*") || str.contains("(") || str.contains(")") private val BOM_JSON_FILE = ".*(bom|cdx).json" @@ -82,6 +97,14 @@ class CdxPass(atom: Cpg) extends CpgPass(atom): dstGraph ) ) + if language == Languages.NEWC || language == Languages.C + then + C_REQUEST_PATTERNS + .foreach(p => + atom.method.fullName(p).parameter.newTagNode("framework-input").store()( + dstGraph + ) + ) components.foreach { comp => val PURL_TYPE = "purl" val compPurl = comp.hcursor.downField(PURL_TYPE).as[String].getOrElse("") diff --git a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/EasyTagsPass.scala b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/EasyTagsPass.scala index c3e46f24..3cedde4b 100644 --- a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/EasyTagsPass.scala +++ b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/taggers/EasyTagsPass.scala @@ -26,4 +26,44 @@ class EasyTagsPass(atom: Cpg) extends CpgPass(atom): if language == Languages.NEWC || language == Languages.C then atom.method.internal.name("main").parameter.newTagNode("cli-source").store()(dstGraph) + atom.method.internal.name("wmain").parameter.newTagNode("cli-source").store()(dstGraph) + atom.method.external.name("(cuda|curl_|BIO_).*").parameter.newTagNode( + "library-call" + ).store()( + dstGraph + ) + atom.method.external.name("DriverEntry").parameter.newTagNode("driver-source").store()( + dstGraph + ) + atom.method.external.name("WdfDriverCreate").parameter.newTagNode( + "driver-source" + ).store()(dstGraph) + atom.method.external.name("OnDeviceAdd").parameter.newTagNode( + "driver-source" + ).store()(dstGraph) + atom.method.external.fullName( + "(Aws|Azure|google|cloud)(::|\\.).*" + ).parameter.newTagNode( + "cloud" + ).store()(dstGraph) + atom.method.external.fullName("(CDevice|CDriver)(::|\\.).*").parameter.newTagNode( + "device-driver" + ).store()(dstGraph) + atom.method.external.fullName( + "(Windows|WEX|WDMAudio|winrt|wilEx)(::|\\.).*" + ).parameter.newTagNode("windows").store()(dstGraph) + atom.method.external.fullName("(RpcServer)(::|\\.).*").parameter.newTagNode( + "rpc" + ).store()( + dstGraph + ) + atom.method.external.fullName( + "(Pistache|Http|Rest|oatpp|HttpClient|HttpRequest|WebSocketClient|HttpResponse|drogon|chrono|httplib)(::|\\.).*" + ).parameter.newTagNode( + "http" + ).store()( + dstGraph + ) + end if + end run end EasyTagsPass diff --git a/pyproject.toml b/pyproject.toml index 345cbdd9..00ecdcf2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "appthreat-chen" -version = "1.0.4" +version = "1.0.5" description = "Code Hierarchy Exploration Net (chen)" authors = ["Team AppThreat "] license = "Apache-2.0"