├── .gitignore ├── README.md ├── UNLICENSE ├── cmsfinder ├── cmsfinder.png ├── create_sites_list.sample ├── makesignatures ├── noc.png ├── signatures.json └── signatures ├── PHPMailer.json ├── bitrix.json ├── creloaded.json ├── cscart.json ├── dle.json ├── drupal.json ├── e107.json ├── grav.json ├── joomla.json ├── magento.json ├── mambo.json ├── mediawiki.json ├── modx.json ├── oscommerce.json ├── phpbb3.json ├── piwigo.json ├── prestashop.json ├── redmine.json ├── revive.json ├── umicms.json ├── vbulletin.json ├── webasyst.json ├── whmcs.json ├── wordpress.json ├── xcart.json ├── xenforo.json ├── xoops.json └── zencart.json /.gitignore: -------------------------------------------------------------------------------- 1 | *\~ 2 | *.swp 3 | sitelist.lst 4 | create_sites_list 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | CMS Finder 2 | ========== 3 | 4 | Detect Web CMS software type and version in specified path. CMS signatures and actual versions database. 5 | 6 | Initially based on weakly maintained https://github.com/JamesDooley/VersionFinder 7 | 8 | Features 9 | -------- 10 | * Fast and simple 11 | * Only Python 2 in the requirements 12 | * Russian 1C-Bitrix, UMI.CMS and NetCat commercial CMS detection 13 | * It is possible to define outdated versions in different CMS branches 14 | * Single scan from argument and bulk scan paths from file available 15 | 16 | What for 17 | -------- 18 | 19 | It is designed to search for potentially vulnerable CMS. This helps sell customers a complementary service 20 | 21 | ![CMS Finder](cmsfinder.png) 22 | 23 | Usage 24 | ----- 25 | 26 | ### Command help 27 | 28 | ```sh 29 | ./cmsfinder --help 30 | usage: cmsfinder [-h] [-v] [-s FILENAME] [-l [FILENAME] | PATH] 31 | 32 | positional arguments: 33 | PATH Path to site 34 | 35 | optional arguments: 36 | -h, --help show this help message and exit 37 | -v increase verbosity of the logging, -vvv for debug 38 | -s FILENAME Signatures file 39 | -l [FILENAME] Site paths from file 40 | ``` 41 | 42 | ### Scan single path (DocumentRoot) 43 | 44 | ```sh 45 | ./cmsfinder -v /var/www/www-root/htdocs 46 | ``` 47 | 48 | ### Scan paths from file 49 | 50 | ```sh 51 | ./cmsfinder -v -l sitelist.lst >result.lst 52 | ``` 53 | 54 | ### Result string 55 | 56 | > PATH CMS VERSION LAST SUPPORT 57 | 58 | * PATH - path of site, i.e. DocumentRoot 59 | * CMS - friendly name of cms signature 60 | * VERSION - detected CMS version 61 | * LAST - newest version on detected branch with one of the prefix: 62 | * '<' - detected version is older than latest version on this branch 63 | * '=' - detected version is the freshest version on this branch 64 | * '>' - detected version is newer than latest version on this branch (oh!) 65 | * SUPPORT - support level 66 | * 'eol' - End Of Life - this branch not supported yet 67 | * 'limited' - may or may not get updates 68 | * 'supported' - fully supported 69 | * 'current' - the freshest supported branch 70 | 71 | ``` 72 | ~$ ./cmsfinder /var/www/www-root/htdocs 73 | /var/www/www-root/htdocs wordpress 4.6.2 <4.6.4 limited 74 | ~$ 75 | ``` 76 | 77 | TODO 78 | ---- 79 | 80 | * Anime chan mascot 81 | * Developers Guide 82 | * Implement github or gitlab flow 83 | * Make custom signature sets 84 | * Cover the code with comments 85 | * Fill in supported versions for all CMS. Only Drupal, WordPress and Joomla presents 86 | * Add more popular CMSes 87 | * Ansible role (good idea for outsourcing automation :) 88 | * Improve some check algorithms 89 | 90 | --- 91 | [![UNLICENSE](noc.png)](UNLICENSE) 92 | 93 | -------------------------------------------------------------------------------- /UNLICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /cmsfinder: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys,os 5 | import json 6 | import subprocess 7 | import logging 8 | import argparse 9 | import mmap 10 | import re 11 | 12 | logging.basicConfig(format="%(message)s") 13 | logger = logging.getLogger(__name__) 14 | 15 | def vcmp(version1, version2): 16 | def normalize(v): 17 | return [int(x) for x in re.sub(r'[^0-9\.]+', '', re.sub(r'(\.0+)*$', '', v)).split(".")] 18 | return cmp(normalize(version1), normalize(version2)) 19 | 20 | def fileContains(filename, string): 21 | logger.debug("Filename: %s String: %s", filename, string) 22 | with open(filename) as f: 23 | s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) 24 | if re.search(string, s): 25 | return True 26 | return False 27 | 28 | def checkcms(path): 29 | for app in signatures: 30 | fl_matched = False 31 | for f in signatures[app]['fingerprints']: 32 | testfile = path + '/' + f['file'] 33 | if not os.path.exists(testfile): 34 | continue 35 | logger.debug("Signature file %s found in %s for %s", f['file'], path, app) 36 | if 'signature' in f: 37 | if fileContains(testfile, f['signature']): 38 | logger.debug("Fingerprint match for %s found in %s", app, testfile) 39 | else: 40 | continue 41 | if 'exclude' in f: 42 | if fileContains(testfile, f['exclude']): 43 | logger.debug("Fingerprint matches exclude, skipping match") 44 | continue 45 | fl_matched = True 46 | break 47 | if not fl_matched: 48 | #logger.debug("No fingerprint matches for %s in %s", app, path) 49 | continue 50 | ver = last = supported = u"" 51 | for v in signatures[app]['versions']: 52 | testfile = path + '/' + v['file'] 53 | if not os.path.exists(testfile): 54 | continue 55 | logger.debug("Version file %s found in %s for %s", v['file'], path, app) 56 | with open(testfile) as t: 57 | s = mmap.mmap(t.fileno(), 0, access=mmap.ACCESS_READ) 58 | if 'regex' in v: 59 | r = v['regex'] 60 | if 'exclude' in v: 61 | e = v['exclude'] 62 | if re.search(e, s): 63 | logger.debug("Version file found but matched exclude") 64 | continue 65 | s.seek(0) 66 | if 'multiline' in v: 67 | a = re.finditer(r"(?m)"+r, s) 68 | if not a: 69 | continue 70 | for m in a: 71 | if m: 72 | ver += "." + m.group('version') 73 | ver = re.sub(r"^\.", "", ver) 74 | else: 75 | m = re.search(r, s) 76 | if m: 77 | ver = m.group('version') 78 | if 'flatfile' in v: 79 | a = re.finditer(r"(?m)^(?P.*)$", s) 80 | if not a: 81 | continue 82 | for m in a: 83 | if m: 84 | ver = m.group('version') 85 | break 86 | if ver != "": 87 | if 'filter' in v: 88 | ver = re.sub(v['filter'], ".", ver) 89 | ver = re.sub(r"\r", "", ver) 90 | ver = re.sub(r"\s+", "", ver) 91 | if ver == "": 92 | logger.warn("* %s CMS signature (%s) match but unable to get version information", path, app) 93 | else: 94 | break 95 | if ver != "": 96 | if 'last' in signatures[app]: 97 | lastv = "" 98 | if 'last' in signatures[app]['last']: 99 | lastv = signatures[app]['last']['last'] 100 | for br in signatures[app]['last']: 101 | if ver.startswith(br): 102 | logger.debug("Found known branch %s for version %s", br, ver) 103 | lastv = signatures[app]['last'][br] 104 | if lastv != "": 105 | c = vcmp(ver, lastv) 106 | if c == 0: 107 | last = "=" + lastv 108 | elif c < 0: 109 | last = "<" + lastv 110 | elif c > 0: 111 | last = ">" + lastv 112 | if 'support' in signatures[app]: 113 | for br in signatures[app]['support']: 114 | if ver.startswith(br): 115 | logger.debug("Found known branch %s for version %s", br, ver) 116 | supported = signatures[app]['support'][br] 117 | if supported == "" and 'eol' in signatures[app]['support']: 118 | c = vcmp(ver, signatures[app]['support']['eol']) 119 | if c == 0: 120 | supported = "current" 121 | elif c < 0: 122 | supported = "EOL" 123 | elif c > 0: 124 | supported = "current" 125 | if supported == "": 126 | supported = "EOL" 127 | if ver == "": 128 | ver = "unknown" 129 | if last == "": 130 | last = "unknown" 131 | if supported == "": 132 | supported = "unknown" 133 | print("%s %s '%s' '%s' %s" % (path, app, ver, last, supported)) 134 | 135 | if __name__ == "__main__": 136 | parser = argparse.ArgumentParser() 137 | parser.add_argument( 138 | '-v', action='count', default=0, 139 | help='increase verbosity of the logging, -vvv for debug', 140 | ) 141 | parser.add_argument( 142 | '-s', metavar="FILENAME", nargs='?', action='store', default='signatures.json', 143 | help='Signatures file', 144 | ) 145 | group = parser.add_mutually_exclusive_group() 146 | group.add_argument( 147 | '-l', metavar="FILENAME", nargs='?', action='store', 148 | help='Site paths from file', 149 | ) 150 | group.add_argument( 151 | 'PATH', type=str, nargs='?', help='Path to site' 152 | ) 153 | args = parser.parse_args() 154 | try: 155 | if args.v >= 3: 156 | logger.setLevel(logging.DEBUG) 157 | elif args.v >= 2: 158 | logger.setLevel(logging.INFO) 159 | elif args.v >= 1: 160 | logger.setLevel(logging.WARNING) 161 | elif args.v == 0: 162 | logger.setLevel(logging.ERROR) 163 | signaturesfile = os.path.abspath(args.s) 164 | path = "" 165 | listfile = "" 166 | if args.PATH: 167 | path = os.path.abspath(args.PATH) 168 | elif args.l: 169 | listfile = os.path.abspath(args.l) 170 | except: 171 | logging.error("%s", sys.exc_info()[1]) 172 | sys.exit(1) 173 | signatures = {} 174 | if not os.path.exists(signaturesfile): 175 | logger.error("Signatures file %s not exists", signaturesfile) 176 | sys.exit(1) 177 | try: 178 | with open(signaturesfile) as f: 179 | signatures = json.load(f) 180 | except: 181 | logger.error("%s", sys.exc_info()[1]) 182 | sys.exit(1) 183 | if path != "": 184 | if not os.path.exists(path): 185 | logger.error("Site path %s not exists", path) 186 | sys.exit(1) 187 | logger.info("Test site: %s", path) 188 | checkcms(path) 189 | elif listfile != "": 190 | if not os.path.exists(listfile): 191 | logger.error("File with sites paths %s not exists", listfile) 192 | sys.exit(1) 193 | with open(listfile) as f: 194 | for line in f: 195 | line = os.path.abspath(line.rstrip()) 196 | if not os.path.exists(line): 197 | logger.warn("Site path %s not exists", line) 198 | continue 199 | logger.info("Test site: %s", line) 200 | checkcms(line) 201 | 202 | -------------------------------------------------------------------------------- /cmsfinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diphost/cmsfinder/ae474d2526dc0ca76ee579936b60e95423961572/cmsfinder.png -------------------------------------------------------------------------------- /create_sites_list.sample: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Create "DocumentRoot" list of server sites 4 | 5 | # PeterHost.Ru and DiPHOST.Ru example 6 | #find /home -maxdepth 4 -type d -name public_html -path "/home/*/www/*" -print 7 | #find /home -maxdepth 4 -type d -name webapp -path "/home/*/www/*" -print 8 | 9 | # FastPanel example 10 | #find /var/www/ -maxdepth 3 -type d -path "/var/www/*/www/*" -print 11 | 12 | # ISPManager example 13 | #find /var/www/ -maxdepth 4 -type d -path "/var/www/*/data/www/*" -print 14 | -------------------------------------------------------------------------------- /makesignatures: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | # -*- coding: utf-8 -*- 3 | 4 | """ Read directory with per CMS signature JSON files and concatinate them to 5 | one JSON file 6 | """ 7 | 8 | import os 9 | import json 10 | 11 | if __name__ == "__main__": 12 | signatures = {} 13 | # save root of repo 14 | pwd = os.getcwd() 15 | # read cms signature files 16 | for cms in os.listdir(pwd + "/signatures"): 17 | name = cms.split('.')[0] 18 | filename = os.path.join(pwd + "/signatures", name + ".json") 19 | if os.path.isfile(filename): 20 | with open(filename) as f: 21 | # add cms signature to full signatures dict 22 | signatures[name] = json.load(f) 23 | # write full signatures.json file 24 | with open(pwd + "/signatures.json", "w") as f: 25 | json.dump(signatures,f) 26 | # git add new signatures file 27 | os.system("git add " + pwd + '/signatures.json') 28 | -------------------------------------------------------------------------------- /noc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diphost/cmsfinder/ae474d2526dc0ca76ee579936b60e95423961572/noc.png -------------------------------------------------------------------------------- /signatures.json: -------------------------------------------------------------------------------- 1 | {"whmcs": {"fingerprints": [{"file": "includes/classes/WHMCS/Admin.php", "signature": "WHMCS"}], "versions": [{"regex": "\\* Version\\: (?P[0-9.]*)", "file": "init.php"}, {"regex": "Version: (?P[0-9.]*)", "file": "announcements.php"}]}, "revive": {"fingerprints": [{"file": "lib/OX.php", "signature": "OpenX"}], "versions": [{"regex": "VERSION', '(?P.*)'", "file": "constants.php"}]}, "umicms": {"fingerprints": [{"file": "sys-temp/runtime-cache/registry", "signature": "modules/autoupdate/system_version"}, {"file": "cache/reg"}, {"file": "README.md", "signature": "UMI.CMS"}], "last": {"last": "2.15"}, "versions": [{"regex": "\"modules/autoupdate/system_version\";i:(\\d+);.*?i:\\1;s:\\d+:\"(?P[^\\\"]+)\"", "file": "sys-temp/runtime-cache/registry"}, {"regex": "\"modules/autoupdate/system_version\";i:(\\d+);.*?i:\\1;s:\\d+:\"(?P[^\\\"]+)\"", "file": "cache/reg"}]}, "mediawiki": {"support": {"eol": "1.26", "1.29": "EOL", "1.28": "EOL", "1.30": "EOL", "1.31": "supported", "1.32": "current", "1.27": "EOL", "1.26": "EOL"}, "fingerprints": [{"file": "includes/DefaultSettings.php", "signature": "mediawiki"}], "last": {"last": "1.32.0", "1.29": "1.29.3", "1.28": "1.28.3", "1.31": "1.31.1", "1.32": "1.32.0", "1.27": "1.27.5", "1.26": "1.26.4"}, "versions": [{"regex": "\\$wgVersion\\s*=\\s*'(?P.*)'", "file": "includes/DefaultSettings.php"}]}, "magento": {"fingerprints": [{"file": "app/Mage.php", "signature": "magentocommerce"}], "versions": [{"regex": "(?:'major'|'minor'|'revision'|'patch').* => '(?P.*)'", "multiline": 1, "file": "app/Mage.php"}]}, "mambo": {"fingerprints": [{"file": "includes/mambofunc.php"}], "versions": [{"regex": "(?:\\$RELEASE|\\$DEV_LEVEL) = '(?P.*)'", "multiline": 1, "file": "includes/version.php"}]}, "phpbb3": {"support": {"eol": "3.2.0", "3.2": "current", "3.1": "EOL"}, "fingerprints": [{"file": "includes/bbcode.php", "signature": "phpBB"}], "last": {"last": "3.2.5", "3.2": "3.2.5", "3.0": "3.0.14", "3.1": "3.1.10"}, "versions": [{"filter": "-PL", "regex": "PHPBB_VERSION', '(?P.*)'", "file": "includes/constants.php"}]}, "PHPMailer": {"fingerprints": [{"exclude": "Joomla.Legacy", "file": "class.phpmailer.php", "signature": "phpmailer"}], "versions": [{"regex": "[public|var] .*Version += [\"'](?P.*)[\"']", "file": "class.phpmailer.php"}]}, "dle": {"fingerprints": [{"file": "engine/inc/include/init.php", "signature": "DATALIFEENGINE"}, {"file": "engine/engine.php", "signature": "DataLife Engine"}], "last": {"last": "11.2"}, "versions": [{"regex": "define\\('VERSIONID', [\"|'](?P[0-9.]*)[\"|']\\)", "file": "engine/inc/include/init.php"}, {"regex": "'version_id'\\s+=>\\s+[\"|'](?P[0-9.]*)[\"|']", "file": "engine/data/config.php"}, {"regex": "\\$save_con\\['version_id'\\]\\s*=\\s*[\"|'](?P[0-9.]*)[\"|']", "file": "engine/inc/options.php"}]}, "xcart": {"fingerprints": [{"file": "cart.php", "signature": "X-Cart"}], "versions": [{"regex": "Version (?P.*)", "file": "VERSION"}, {"regex": "LC_VERSION', '(?P.*)'", "file": "Includes/install/install_settings.php"}]}, "joomla": {"support": {"eol": "3.8.0", "3.9": "current"}, "fingerprints": [{"file": "includes/joomla.php"}, {"file": "includes/version.php", "signature": "Joomla!"}, {"file": "libraries/cms/version/version.php", "signature": "Joomla.(Libraries|Site)"}], "last": {"1.5": "1.5.26", "1.6": "1.6.6", "1.7": "1.7.5", "1.0": "1.0.15", "3.8": "3.8.13", "3.6": "3.6.5", "3.7": "3.7.5", "3.4": "3.4.8", "3.5": "3.5.1", "3.2": "3.2.7", "3.3": "3.3.6", "3.0": "3.0.4", "3.1": "3.1.6", "last": "3.9.4", "2.5": "2.5.28", "3.9": "3.9.4"}, "versions": [{"regex": "-* (?P.*) Stable Release", "file": "CHANGELOG.php"}, {"regex": "(?:RELEASE|DEV_LEVEL)\\s*=\\s*'(?P.*)'", "multiline": 1, "file": "includes/version.php"}, {"regex": "(?:RELEASE|DEV_LEVEL)\\s*=\\s*'(?P.*)'", "multiline": 1, "file": "libraries/cms/version/version.php"}, {"regex": "(?:RELEASE|DEV_LEVEL)\\s*=\\s*'(?P.*)'", "multiline": 1, "file": "libraries/joomla/version.php"}]}, "prestashop": {"support": {"1.6": "limited", "1.7": "current", "eol": "1.6.0"}, "fingerprints": [{"file": "config/index.php", "signature": "PrestaShop"}, {"file": "Index.php", "signature": "PrestaShop"}], "last": {"0.9": "0.9.7", "1.4": "1.4.11.1", "1.6": "1.6.1.12", "1.7": "1.7.0.6", "1.0": "1.0.0", "1.1": "1.1.0.1", "1.2": "1.2.5.0", "1.3": "1.3.7.0", "last": "1.7.0.6", "1.5": "1.5.6.3"}, "versions": [{"regex": "define\\('_PS_VERSION_',\\s*'(?P.*)'\\)", "file": "config/settings.inc.php"}, {"regex": "define\\('_PS_VERSION_',\\s*'(?P.*)'\\)", "file": "config/autoload.php"}]}, "creloaded": {"fingerprints": [{"file": "/admin/includes/version.php", "signature": "CRE Loaded"}, {"file": "checkout.php", "signature": "loaded7"}], "versions": [{"regex": "INSTALLED_(?:VERSION_MAJOR|VERSION_MINOR|PATCH)', '(?P.*)'", "multiline": 1, "file": "/admin/includes/version.php"}, {"regex": "^(?P.*)\\|", "file": "/includes/version.txt"}]}, "redmine": {"fingerprints": [{"file": "lib/redmine.rb", "signature": "redmine"}], "versions": [{"regex": "==.* v(?P.*)", "file": "doc/CHANGELOG"}]}, "wordpress": {"support": {"4.5": "limited", "4.4": "limited", "4.7": "limited", "4.6": "limited", "4.1": "limited", "4.0": "limited", "4.3": "limited", "4.2": "limited", "4.9": "limited", "4.8": "limited", "eol": "3.7", "3.7": "limited", "5.1": "current", "5.0": "limited", "3.8": "limited", "3.9": "limited"}, "fingerprints": [{"file": "wp-settings.php"}], "last": {"1.5": "1.5.2", "1.0": "1.0.2", "1.2": "1.2.2", "3.6": "3.6.1", "3.7": "3.7.28", "3.4": "3.4.2", "3.5": "3.5.2", "3.2": "3.2.1", "3.3": "3.3.3", "3.0": "3.0.6", "3.1": "3.1.4", "2.3": "2.3.3", "2.2": "2.2.3", "2.1": "2.1.3", "2.0": "2.0.11", "2.7": "2.7.1", "2.6": "2.6.5", "3.8": "3.8.28", "3.9": "3.9.27", "4.5": "4.5.17", "4.4": "4.4.18", "4.7": "4.7.13", "4.6": "4.6.14", "4.1": "4.1.26", "4.0": "4.0.26", "4.3": "4.3.19", "4.2": "4.2.23", "4.9": "4.9.10", "4.8": "4.8.9", "0": "0.72", "2.5": "2.5.1", "5.0": "5.0.4", "5.1": "5.1.1", "last": "5.1.1", "2.9": "2.9.2", "2.8": "2.8.6"}, "versions": [{"regex": "\\$wp_version\\s*=\\s*'(?P.*)'", "file": "wp-includes/version.php"}]}, "oscommerce": {"fingerprints": [{"exclude": "zen-cart|loaded7", "file": "admin/includes/filenames.php", "signature": "osCommerce"}, {"file": "OM/Core/OSCOM.php", "signature": "osCommerce"}], "versions": [{"flatfile": 1, "file": "includes/version.php"}, {"flatfile": 1, "file": "OM/version.txt"}, {"regex": "Id: index.php,v (?P[0-9.]*)", "file": "index.php"}]}, "zencart": {"fingerprints": [{"file": "includes/filenames.php", "signature": "Zen Cart"}], "versions": [{"regex": "PROJECT_VERSION_(?:MAJOR|MINOR)',\\s*'(?P.*)'", "multiline": 1, "file": "includes/version.php"}]}, "xenforo": {"fingerprints": [{"file": "library/XenForo/Application.php", "signature": "xenforo"}], "versions": [{"regex": "\\$version\\s*=\\s*'(?P.*)'", "file": "library/XenForo/Application.php"}]}, "webasyst": {"fingerprints": [{"file": "wa-system/waSystem.class.php", "signature": "Webasyst"}], "versions": [{"regex": "'version'\\s*=>\\s*'(?P.*)'", "file": "wa-system/webasyst/lib/config/app.php"}]}, "e107": {"fingerprints": [{"file": "e107_config.php"}], "versions": [{"regex": "e107_version.*\"(?P.*)\";", "file": "admin/ver.php"}, {"regex": "e107_version.*\"(?P.*)\";", "file": "e107_admin/ver.php"}]}, "vbulletin": {"fingerprints": [{"file": "admincp/diagnostic.php", "signature": "vbulletin"}], "versions": [{"filter": " Patch Level ", "regex": "sum_versions.*vbulletin.*=> '(?P.*)'", "file": "admincp/diagnostic.php"}]}, "piwigo": {"fingerprints": [{"file": "identification.php", "signature": "Piwigo"}], "versions": [{"regex": "PHPWG_VERSION', '(?P.*)'", "file": "include/constants.php"}]}, "modx": {"support": {"1": "EOL", "2": "current"}, "fingerprints": [{"file": "manager/includes/version.inc.php", "signature": "modx"}, {"file": "core/docs/version.inc.php", "signature": "MODX"}], "last": {"0.9": "0.9.6.3", "1": "1.2.1", "2": "2.7.1", "last": "2.7.1"}, "versions": [{"regex": "(?:modx_)?version\\s*=\\s*'(?P.*)'", "file": "manager/includes/version.inc.php"}, {"regex": "'(?:major_|minor_)?version'\\]\\s*=\\s*'(?P.*)'", "multiline": 1, "file": "core/docs/version.inc.php"}]}, "xoops": {"fingerprints": [{"file": "include/xoops.js"}], "versions": [{"regex": "XOOPS_VERSION.*XOOPS (?P.*)'", "file": "include/version.php"}]}, "grav": {"fingerprints": [{"file": "system/defines.php", "signature": "grav"}], "versions": [{"regex": "define.*GRAV_VERSION', '(?P.*)'", "multiline": 1, "file": "system/defines.php"}]}, "drupal": {"support": {"eol": "7.0", "8.5": "supported", "7": "supported", "8.6": "current"}, "fingerprints": [{"file": "authorize.php", "signature": "Drupal"}, {"file": "includes/database.mysql.inc", "signature": "Drupal"}], "last": {"4.5": "4.5.8", "4.4": "4.4.3", "4.7": "4.7.11", "4.6": "4.6.11", "8.5": "8.5.14", "8.4": "8.4.8", "4.3": "4.3.1", "8.6": "8.6.13", "8.3": "8.3.2", "8.2": "8.2.8", "5": "5.23", "7": "7.64", "6": "6.38", "last": "8.6.13"}, "versions": [{"regex": "define.*VERSION',\\s*'(?P.*)'", "file": "includes/bootstrap.inc"}, {"regex": "Drupal\\s+(?P.*),", "file": "CHANGELOG.txt"}]}, "cscart": {"fingerprints": [{"file": "config.local.php", "signature": "cs-cart"}], "versions": [{"regex": "define('PRODUCT_VERSION',\\s*'(?P.*)')", "file": "config.php"}]}, "bitrix": {"support": {"eol": "14.0"}, "fingerprints": [{"file": "bitrix/modules/main/classes/general/component.php", "signature": "Bitrix"}, {"file": "bitrix/modules/main/classes/general/version.php"}], "last": {"last": "18.0"}, "versions": [{"regex": "define\\(\"SM_VERSION\",\"(?P.*)\"\\)", "file": "bitrix/modules/main/classes/general/version.php"}]}} -------------------------------------------------------------------------------- /signatures/PHPMailer.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "exclude": "Joomla.Legacy", 5 | "file": "class.phpmailer.php", 6 | "signature": "phpmailer" 7 | } 8 | ], 9 | "versions": [ 10 | { 11 | "file": "class.phpmailer.php", 12 | "regex": "[public|var] .*Version += [\"'](?P.*)[\"']" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /signatures/bitrix.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "bitrix/modules/main/classes/general/component.php", 5 | "signature": "Bitrix" 6 | }, 7 | { 8 | "file": "bitrix/modules/main/classes/general/version.php" 9 | } 10 | ], 11 | "last": { 12 | "last": "18.0" 13 | }, 14 | "versions": [ 15 | { 16 | "file": "bitrix/modules/main/classes/general/version.php", 17 | "regex": "define\\(\"SM_VERSION\",\"(?P.*)\"\\)" 18 | } 19 | ], 20 | "last" : { 21 | "last" : "18.0" 22 | }, 23 | "support" : { 24 | "eol" : "14.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /signatures/creloaded.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "/admin/includes/version.php", 5 | "signature": "CRE Loaded" 6 | }, 7 | { 8 | "file": "checkout.php", 9 | "signature": "loaded7" 10 | } 11 | ], 12 | "versions": [ 13 | { 14 | "file": "/admin/includes/version.php", 15 | "multiline": 1, 16 | "regex": "INSTALLED_(?:VERSION_MAJOR|VERSION_MINOR|PATCH)', '(?P.*)'" 17 | }, 18 | { 19 | "file": "/includes/version.txt", 20 | "regex": "^(?P.*)\\|" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /signatures/cscart.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "config.local.php", 5 | "signature": "cs-cart" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "config.php", 11 | "regex": "define('PRODUCT_VERSION',\\s*'(?P.*)')" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /signatures/dle.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "engine/inc/include/init.php", 5 | "signature": "DATALIFEENGINE" 6 | }, 7 | { 8 | "file": "engine/engine.php", 9 | "signature": "DataLife Engine" 10 | } 11 | ], 12 | "versions": [ 13 | { 14 | "file": "engine/inc/include/init.php", 15 | "regex": "define\\('VERSIONID', [\"|'](?P[0-9.]*)[\"|']\\)" 16 | }, 17 | { 18 | "file": "engine/data/config.php", 19 | "regex": "'version_id'\\s+=>\\s+[\"|'](?P[0-9.]*)[\"|']" 20 | }, 21 | { 22 | "file": "engine/inc/options.php", 23 | "regex": "\\$save_con\\['version_id'\\]\\s*=\\s*[\"|'](?P[0-9.]*)[\"|']" 24 | } 25 | ], 26 | "last" : { 27 | "last" : "11.2" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /signatures/drupal.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "authorize.php", 5 | "signature": "Drupal" 6 | }, 7 | { 8 | "file": "includes/database.mysql.inc", 9 | "signature": "Drupal" 10 | } 11 | ], 12 | "last": { 13 | "4.3": "4.3.1", 14 | "4.4": "4.4.3", 15 | "4.5": "4.5.8", 16 | "4.6": "4.6.11", 17 | "4.7": "4.7.11", 18 | "5": "5.23", 19 | "6": "6.38", 20 | "7": "7.64", 21 | "8.2": "8.2.8", 22 | "8.3": "8.3.2", 23 | "8.4": "8.4.8", 24 | "8.5": "8.5.14", 25 | "8.6": "8.6.13", 26 | "last": "8.6.13" 27 | }, 28 | "support": { 29 | "7": "supported", 30 | "8.5": "supported", 31 | "8.6": "current", 32 | "eol": "7.0" 33 | }, 34 | "versions": [ 35 | { 36 | "file": "includes/bootstrap.inc", 37 | "regex": "define.*VERSION',\\s*'(?P.*)'" 38 | }, 39 | { 40 | "file": "CHANGELOG.txt", 41 | "regex": "Drupal\\s+(?P.*)," 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /signatures/e107.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "e107_config.php" 5 | } 6 | ], 7 | "versions": [ 8 | { 9 | "file": "admin/ver.php", 10 | "regex": "e107_version.*\"(?P.*)\";" 11 | }, 12 | { 13 | "file": "e107_admin/ver.php", 14 | "regex": "e107_version.*\"(?P.*)\";" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /signatures/grav.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "system/defines.php", 5 | "signature": "grav" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "system/defines.php", 11 | "multiline": 1, 12 | "regex": "define.*GRAV_VERSION', '(?P.*)'" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /signatures/joomla.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "includes/joomla.php" 5 | }, 6 | { 7 | "file": "includes/version.php", 8 | "signature": "Joomla!" 9 | }, 10 | { 11 | "file": "libraries/cms/version/version.php", 12 | "signature": "Joomla.(Libraries|Site)" 13 | } 14 | ], 15 | "last": { 16 | "1.0": "1.0.15", 17 | "1.5": "1.5.26", 18 | "1.6": "1.6.6", 19 | "1.7": "1.7.5", 20 | "2.5": "2.5.28", 21 | "3.0": "3.0.4", 22 | "3.1": "3.1.6", 23 | "3.2": "3.2.7", 24 | "3.3": "3.3.6", 25 | "3.4": "3.4.8", 26 | "3.5": "3.5.1", 27 | "3.6": "3.6.5", 28 | "3.7": "3.7.5", 29 | "3.8": "3.8.13", 30 | "3.9": "3.9.4", 31 | "last": "3.9.4" 32 | }, 33 | "support": { 34 | "3.9": "current", 35 | "eol": "3.8.0" 36 | }, 37 | "versions": [ 38 | { 39 | "file": "CHANGELOG.php", 40 | "regex": "-* (?P.*) Stable Release" 41 | }, 42 | { 43 | "file": "includes/version.php", 44 | "multiline": 1, 45 | "regex": "(?:RELEASE|DEV_LEVEL)\\s*=\\s*'(?P.*)'" 46 | }, 47 | { 48 | "file": "libraries/cms/version/version.php", 49 | "multiline": 1, 50 | "regex": "(?:RELEASE|DEV_LEVEL)\\s*=\\s*'(?P.*)'" 51 | }, 52 | { 53 | "file": "libraries/joomla/version.php", 54 | "multiline": 1, 55 | "regex": "(?:RELEASE|DEV_LEVEL)\\s*=\\s*'(?P.*)'" 56 | } 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /signatures/magento.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "app/Mage.php", 5 | "signature": "magentocommerce" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "app/Mage.php", 11 | "multiline": 1, 12 | "regex": "(?:'major'|'minor'|'revision'|'patch').* => '(?P.*)'" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /signatures/mambo.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "includes/mambofunc.php" 5 | } 6 | ], 7 | "versions": [ 8 | { 9 | "file": "includes/version.php", 10 | "multiline": 1, 11 | "regex": "(?:\\$RELEASE|\\$DEV_LEVEL) = '(?P.*)'" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /signatures/mediawiki.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "includes/DefaultSettings.php", 5 | "signature": "mediawiki" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "includes/DefaultSettings.php", 11 | "regex": "\\$wgVersion\\s*=\\s*'(?P.*)'" 12 | } 13 | ], 14 | "last" : { 15 | "1.26" : "1.26.4", 16 | "1.27" : "1.27.5", 17 | "1.28" : "1.28.3", 18 | "1.29" : "1.29.3", 19 | "1.31" : "1.31.1", 20 | "1.32" : "1.32.0", 21 | "last" : "1.32.0" 22 | }, 23 | "support" : { 24 | "1.26" : "EOL", 25 | "1.27" : "limited", 26 | "1.27" : "EOL", 27 | "1.28" : "EOL", 28 | "1.29" : "EOL", 29 | "1.30" : "EOL", 30 | "1.31" : "supported", 31 | "1.32" : "current", 32 | "eol" : "1.26" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /signatures/modx.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "manager/includes/version.inc.php", 5 | "signature": "modx" 6 | }, 7 | { 8 | "file": "core/docs/version.inc.php", 9 | "signature": "MODX" 10 | } 11 | ], 12 | "versions": [ 13 | { 14 | "file": "manager/includes/version.inc.php", 15 | "regex": "(?:modx_)?version\\s*=\\s*'(?P.*)'" 16 | }, 17 | { 18 | "file": "core/docs/version.inc.php", 19 | "multiline": 1, 20 | "regex": "'(?:major_|minor_)?version'\\]\\s*=\\s*'(?P.*)'" 21 | } 22 | ], 23 | "last" : { 24 | "0.9" : "0.9.6.3", 25 | "1" : "1.2.1", 26 | "2" : "2.7.1", 27 | "last" : "2.7.1" 28 | }, 29 | "support" : { 30 | "1" : "EOL", 31 | "2" : "current" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /signatures/oscommerce.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "exclude": "zen-cart|loaded7", 5 | "file": "admin/includes/filenames.php", 6 | "signature": "osCommerce" 7 | }, 8 | { 9 | "file": "OM/Core/OSCOM.php", 10 | "signature": "osCommerce" 11 | } 12 | ], 13 | "versions": [ 14 | { 15 | "file": "includes/version.php", 16 | "flatfile": 1 17 | }, 18 | { 19 | "file": "OM/version.txt", 20 | "flatfile": 1 21 | }, 22 | { 23 | "file": "index.php", 24 | "regex": "Id: index.php,v (?P[0-9.]*)" 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /signatures/phpbb3.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "includes/bbcode.php", 5 | "signature": "phpBB" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "includes/constants.php", 11 | "filter": "-PL", 12 | "regex": "PHPBB_VERSION', '(?P.*)'" 13 | } 14 | ], 15 | "last" : { 16 | "3.0" : "3.0.14", 17 | "3.1" : "3.1.10", 18 | "3.2" : "3.2.5", 19 | "last" : "3.2.5" 20 | }, 21 | "support" : { 22 | "3.1" : "EOL", 23 | "3.2" : "current", 24 | "eol" : "3.2.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /signatures/piwigo.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "identification.php", 5 | "signature": "Piwigo" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "include/constants.php", 11 | "regex": "PHPWG_VERSION', '(?P.*)'" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /signatures/prestashop.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "config/index.php", 5 | "signature": "PrestaShop" 6 | }, 7 | { 8 | "file": "Index.php", 9 | "signature": "PrestaShop" 10 | } 11 | ], 12 | "versions": [ 13 | { 14 | "file": "config/settings.inc.php", 15 | "regex": "define\\('_PS_VERSION_',\\s*'(?P.*)'\\)" 16 | }, 17 | { 18 | "file": "config/autoload.php", 19 | "regex": "define\\('_PS_VERSION_',\\s*'(?P.*)'\\)" 20 | } 21 | ], 22 | "last" : { 23 | "0.9" : "0.9.7", 24 | "1.0" : "1.0.0", 25 | "1.1" : "1.1.0.1", 26 | "1.2" : "1.2.5.0", 27 | "1.3" : "1.3.7.0", 28 | "1.4" : "1.4.11.1", 29 | "1.5" : "1.5.6.3", 30 | "1.6" : "1.6.1.12", 31 | "1.7" : "1.7.5.1", 32 | "last" : "1.7.5.1" 33 | }, 34 | "support" : { 35 | "1.6" : "EOL", 36 | "1.7" : "current", 37 | "eol" : "1.7.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /signatures/redmine.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "lib/redmine.rb", 5 | "signature": "redmine" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "doc/CHANGELOG", 11 | "regex": "==.* v(?P.*)" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /signatures/revive.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "lib/OX.php", 5 | "signature": "OpenX" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "constants.php", 11 | "regex": "VERSION', '(?P.*)'" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /signatures/umicms.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "sys-temp/runtime-cache/registry", 5 | "signature": "modules/autoupdate/system_version" 6 | }, 7 | { 8 | "file": "cache/reg" 9 | }, 10 | { 11 | "file": "README.md", 12 | "signature": "UMI.CMS" 13 | } 14 | ], 15 | "last": { 16 | "last": "2.15" 17 | }, 18 | "versions": [ 19 | { 20 | "file": "sys-temp/runtime-cache/registry", 21 | "regex": "\"modules/autoupdate/system_version\";i:(\\d+);.*?i:\\1;s:\\d+:\"(?P[^\\\"]+)\"" 22 | }, 23 | { 24 | "file": "cache/reg", 25 | "regex": "\"modules/autoupdate/system_version\";i:(\\d+);.*?i:\\1;s:\\d+:\"(?P[^\\\"]+)\"" 26 | } 27 | ] 28 | } 29 | 30 | -------------------------------------------------------------------------------- /signatures/vbulletin.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "admincp/diagnostic.php", 5 | "signature": "vbulletin" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "admincp/diagnostic.php", 11 | "filter": " Patch Level ", 12 | "regex": "sum_versions.*vbulletin.*=> '(?P.*)'" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /signatures/webasyst.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "wa-system/waSystem.class.php", 5 | "signature": "Webasyst" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "wa-system/webasyst/lib/config/app.php", 11 | "regex": "'version'\\s*=>\\s*'(?P.*)'" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /signatures/whmcs.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "includes/classes/WHMCS/Admin.php", 5 | "signature": "WHMCS" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "init.php", 11 | "regex": "\\* Version\\: (?P[0-9.]*)" 12 | }, 13 | { 14 | "file": "announcements.php", 15 | "regex": "Version: (?P[0-9.]*)" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /signatures/wordpress.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "wp-settings.php" 5 | } 6 | ], 7 | "last": { 8 | "0": "0.72", 9 | "1.0": "1.0.2", 10 | "1.2": "1.2.2", 11 | "1.5": "1.5.2", 12 | "2.0": "2.0.11", 13 | "2.1": "2.1.3", 14 | "2.2": "2.2.3", 15 | "2.3": "2.3.3", 16 | "2.5": "2.5.1", 17 | "2.6": "2.6.5", 18 | "2.7": "2.7.1", 19 | "2.8": "2.8.6", 20 | "2.9": "2.9.2", 21 | "3.0": "3.0.6", 22 | "3.1": "3.1.4", 23 | "3.2": "3.2.1", 24 | "3.3": "3.3.3", 25 | "3.4": "3.4.2", 26 | "3.5": "3.5.2", 27 | "3.6": "3.6.1", 28 | "3.7": "3.7.28", 29 | "3.8": "3.8.28", 30 | "3.9": "3.9.27", 31 | "4.0": "4.0.26", 32 | "4.1": "4.1.26", 33 | "4.2": "4.2.23", 34 | "4.3": "4.3.19", 35 | "4.4": "4.4.18", 36 | "4.5": "4.5.17", 37 | "4.6": "4.6.14", 38 | "4.7": "4.7.13", 39 | "4.8": "4.8.9", 40 | "4.9": "4.9.10", 41 | "5.0": "5.0.4", 42 | "5.1": "5.1.1", 43 | "last": "5.1.1" 44 | }, 45 | "support": { 46 | "3.7": "limited", 47 | "3.8": "limited", 48 | "3.9": "limited", 49 | "4.0": "limited", 50 | "4.1": "limited", 51 | "4.2": "limited", 52 | "4.3": "limited", 53 | "4.4": "limited", 54 | "4.5": "limited", 55 | "4.6": "limited", 56 | "4.7": "limited", 57 | "4.8": "limited", 58 | "4.9": "limited", 59 | "5.0": "limited", 60 | "5.1": "current", 61 | "eol": "3.7" 62 | }, 63 | "versions": [ 64 | { 65 | "file": "wp-includes/version.php", 66 | "regex": "\\$wp_version\\s*=\\s*'(?P.*)'" 67 | } 68 | ] 69 | } 70 | -------------------------------------------------------------------------------- /signatures/xcart.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "cart.php", 5 | "signature": "X-Cart" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "VERSION", 11 | "regex": "Version (?P.*)" 12 | }, 13 | { 14 | "file": "Includes/install/install_settings.php", 15 | "regex": "LC_VERSION', '(?P.*)'" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /signatures/xenforo.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "library/XenForo/Application.php", 5 | "signature": "xenforo" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "library/XenForo/Application.php", 11 | "regex": "\\$version\\s*=\\s*'(?P.*)'" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /signatures/xoops.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "include/xoops.js" 5 | } 6 | ], 7 | "versions": [ 8 | { 9 | "file": "include/version.php", 10 | "regex": "XOOPS_VERSION.*XOOPS (?P.*)'" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /signatures/zencart.json: -------------------------------------------------------------------------------- 1 | { 2 | "fingerprints": [ 3 | { 4 | "file": "includes/filenames.php", 5 | "signature": "Zen Cart" 6 | } 7 | ], 8 | "versions": [ 9 | { 10 | "file": "includes/version.php", 11 | "multiline": 1, 12 | "regex": "PROJECT_VERSION_(?:MAJOR|MINOR)',\\s*'(?P.*)'" 13 | } 14 | ] 15 | } --------------------------------------------------------------------------------