├── .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 | 
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)
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 | }
--------------------------------------------------------------------------------