├── LICENSE
├── connections.json
├── vs-autocompiler
├── README.md
└── autocompiler.ps1
├── website
├── README.txt
├── config.json
├── css
│ ├── style.css
│ └── tablet.css
├── data.json
├── images
│ ├── CC.png
│ ├── blank.gif
│ ├── fancybox_loading.gif
│ ├── fancybox_sprite.png
│ ├── info.png
│ ├── intezer.png
│ ├── jisc-logo-small.png
│ ├── map.png
│ ├── oii.png
│ ├── oii_brand.png
│ ├── oii_text.png
│ ├── rainbow.png
│ ├── sprite.png
│ ├── zoom_in.png
│ ├── zoom_out.png
│ └── zoom_reset.png
├── index.html
├── js
│ ├── excanvas.js
│ ├── fancybox
│ │ ├── jquery.fancybox.css
│ │ └── jquery.fancybox.pack.js
│ ├── jquery
│ │ └── jquery.min.js
│ ├── main.js
│ └── sigma
│ │ ├── _sigma.min.js
│ │ ├── parseGexf_fin.js
│ │ ├── sigma.js
│ │ ├── sigma.min.js
│ │ ├── sigma.parseGexf.js
│ │ └── sigma.parseJson.js
└── web.config
└── yara
├── ImprovedReflectiveDllInjector.yar
├── InjectProc.yar
├── Invoke-Vnc.yar
├── MemoryModule-DIY.yar
├── MemoryModule.yar
├── ReflectiveDLLInjection.yar
├── RunPE-In-Memory.yar
├── Win7Elevate.yar
├── passcat.yar
├── quarkspwdump.yar
└── vncdll.yar
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2020, Intezer Labs
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | 1. Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | 3. Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/connections.json:
--------------------------------------------------------------------------------
1 | {
2 | "BlackBone": [
3 | "HackingTeam",
4 | "Lolbot",
5 | "OilRig",
6 | "APT1",
7 | "Emissary Panda",
8 | "Wajam",
9 | "CHAINSHOT",
10 | "Cyberbit"
11 | ],
12 | "Mapping-Injection": [],
13 | "HookPasswordChange": [
14 | "Micropsia",
15 | "ATM Dispenser",
16 | "OceanLotus"
17 | ],
18 | "coilgun": [],
19 | "injectAllTheThings": [
20 | "LeafMiner",
21 | "PyXie",
22 | "Slingshot",
23 | "Petya",
24 | "Lazarus",
25 | "LatentBot",
26 | "Carbanak",
27 | "Mischa",
28 | "GandCrab",
29 | "TrickBot",
30 | "Cobalt"
31 | ],
32 | "MemoryModule": [
33 | "AlmaLocker",
34 | "MegaCortex",
35 | "Oztratz",
36 | "Princess Locker",
37 | "DNSBirthday",
38 | "Lazarus",
39 | "Fireball",
40 | "KuaiZip",
41 | "Turla",
42 | "Fancy Bear",
43 | "Suckfly",
44 | "OrangeWorm Ransomware"
45 | ],
46 | "ReflectiveDLLInjection": [
47 | "LeafMiner",
48 | "LockPOS",
49 | "Carbanak",
50 | "ShaktiTrojan",
51 | "Java NotDharma",
52 | "Mischa",
53 | "Petya",
54 | "GandCrab",
55 | "TA505",
56 | "TrickBot",
57 | "CobaltStrike",
58 | "MM Core",
59 | "LatentBot",
60 | "Tick",
61 | "Joao",
62 | "Backboot",
63 | "Ramnit",
64 | "Pony",
65 | "Ammy Admin",
66 | "Copy Kittens",
67 | "DNSBirthday",
68 | "Rokku Ransomware",
69 | "Chimera Ransomware",
70 | "Patchwork",
71 | "DarkHotel",
72 | "Ke3chang",
73 | "HackingTeam",
74 | "Magniber Ransomware"
75 | ],
76 | "InjectProc": [],
77 | "RottenPotatoEXE": [],
78 | "process-inject": [
79 | "Vicious Panda",
80 | "Mischa",
81 | "LeafMiner",
82 | "TA505",
83 | "Joao",
84 | "GandCrab",
85 | "Carbanak",
86 | "Petya",
87 | "TrickBot",
88 | "PyXie",
89 | "Cobalt",
90 | "Ramnit"
91 | ],
92 | "SharpSploit": [
93 | "APT10"
94 | ],
95 | "TikiTorch": [],
96 | "DeviceGuardBypasses": [],
97 | "LethalHTA": [],
98 | "SharpExec": [],
99 | "RottenPotato": [
100 | "LeafMiner",
101 | "Australia Parliament Hack"
102 | ],
103 | "JuicyPotato": [
104 | "TEMP.Demon",
105 | "Blue Mockingbird",
106 | "Fox Kitten",
107 | "DarkHotel",
108 | "MyKings"
109 | ],
110 | "Tokenvator": [],
111 | "Lilith": [
112 | "Operation Dark Pyongyang",
113 | "Tick"
114 | ],
115 | "SharpCOM": [],
116 | "ProcessInjection": [],
117 | "AsyncRAT-C#": [
118 | "Bepush",
119 | "CONFUCIUS",
120 | "Slimhem",
121 | "Hakbit Ransomware",
122 | "Siplog",
123 | "Bokytuda",
124 | "Subti",
125 | "Hoetou"
126 | ],
127 | "UACME": [
128 | "TrickBot",
129 | "Pitou",
130 | "GandCrab",
131 | "7ev3n",
132 | "Charming Kitten",
133 | "Novter",
134 | "OceanLotus",
135 | "AVE_MARIA",
136 | "Patchwork",
137 | "Winnti",
138 | "Sigma Ransomware",
139 | "DarkHotel",
140 | "Carberp"
141 | ],
142 | "Trebuchet": [
143 | "Australia Parliament Hack"
144 | ],
145 | ".NetPELoader": [
146 | "Lazarus"
147 | ],
148 | "Custom Mimikatz": [
149 | "TrickBot",
150 | "Chafer",
151 | "TA505",
152 | "APT10",
153 | "LeafMiner",
154 | "Operation Cleaver",
155 | "Turla",
156 | "Carbanak",
157 | "Bad Rabbit Ransomware",
158 | "OilRig",
159 | "DRBControl",
160 | "Winnti",
161 | "Cobalt Kitty",
162 | "Ke3chang",
163 | "Black Energy",
164 | "Operation Skeleton Key",
165 | "Fancy Bear",
166 | "CryptoUnknown"
167 | ],
168 | "Custom Meterpreter": [
169 | "Turla",
170 | "Refined Kitten",
171 | "Winnti",
172 | "DarkHydrus"
173 | ],
174 | "passcat": [
175 | "Vidar",
176 | "Socelars",
177 | "TrickBot",
178 | "Babar",
179 | "Legion Loader"
180 | ],
181 | "SharpWeb": [],
182 | "csharp-uhwid": [
183 | "CryptoJoker",
184 | "JigsawLocker",
185 | "Rastakhiz Ransomware",
186 | "CryptoNar",
187 | "APT-C-27",
188 | "Lockify"
189 | ],
190 | "minhook": [
191 | "Buhtrap",
192 | "Panda Banker",
193 | "NukeBot",
194 | "Terdot",
195 | "Ursu",
196 | "Zloader"
197 | ],
198 | "myLittleRansomware": [
199 | "RekenSom Ransomware",
200 | "Cute",
201 | "LockOn",
202 | "Honor",
203 | "PyteHole"
204 | ],
205 | "mhook": [
206 | "MINEBRIDGE"
207 | ],
208 | "DetoursNT": [],
209 | "EasyHook": [
210 | "DNSBirthday",
211 | "Dharma"
212 | ],
213 | "RemCom": [
214 | "BlueTermite",
215 | "Chafer",
216 | "APT10",
217 | "Fancy Bear",
218 | "Sogou"
219 | ],
220 | "BypassUAC/Win7Elevate": [
221 | "Winnti",
222 | "Ploutus",
223 | "Kimsuky",
224 | "Lazarus",
225 | "NetTraveler"
226 | ],
227 | "K8-BypassUAC": [
228 | "DRBControl"
229 | ],
230 | "PSInject": [
231 | "Turla"
232 | ],
233 | "SuperDelete": [
234 | "Refined Kitten"
235 | ],
236 | "QuasarRAT": [
237 | "PsiXBot",
238 | "SpyGate",
239 | "Subaat",
240 | "Subti",
241 | "Ploutus",
242 | "VERMIN Campaign",
243 | "CONFUCIUS",
244 | "Habbo",
245 | "APT10",
246 | "Taily",
247 | "Tinclex",
248 | "Patchwork",
249 | "Necurs",
250 | "JigsawLocker",
251 | "Gaza Cybergang",
252 | "Refined Kitten",
253 | "ShellReset"
254 | ],
255 | "HTran": [
256 | "APT1",
257 | "Tick",
258 | "Scarlet Mimic",
259 | "Lazarus",
260 | "APT10",
261 | "Gothic Panda",
262 | "OilRig",
263 | "Winnti",
264 | "Emissary Panda",
265 | "KeyBoy",
266 | "DragonOK"
267 | ],
268 | "QuarksPwDump": [
269 | "DRBControl",
270 | "Lazarus",
271 | "Ke3chang"
272 | ],
273 | "ImprovedReflectiveDLLInjection": [
274 | "TrickBot",
275 | "Vicious Panda",
276 | "Petya",
277 | "Ramnit",
278 | "Lazarus",
279 | "Winnti",
280 | "DarkHotel",
281 | "Karius",
282 | "Matrix Panda"
283 | ],
284 | "fgdump": [
285 | "Volatile Cedar",
286 | "NetTraveler",
287 | "Icefog"
288 | ],
289 | "WinEggDrop PortScanner": [
290 | "ZombieBoy",
291 | "Winnti",
292 | "MadoMiner",
293 | "Luoxk"
294 | ],
295 | "rootkit.com/cardmagic": [
296 | "APT1",
297 | "Shylock",
298 | "Scieron"
299 | ],
300 | "SimplePELoader": [
301 | "Leviathan",
302 | "Carbanak"
303 | ],
304 | "ProxyDll": [
305 | "Maze Ransomware"
306 | ],
307 | "Dumpert": [
308 | "Emissary Panda",
309 | "Operation Skeleton Key"
310 | ],
311 | "RunPE-In-Memory": [
312 | "TrickBot"
313 | ],
314 | "Sharpire": [
315 | "Evrial"
316 | ],
317 | "Virtual Machines Detection Enhaced": [
318 | "TrickBot"
319 | ],
320 | "rewolf-wow64ext": [
321 | "LatentBot",
322 | "Fancy Bear",
323 | "Ngay",
324 | "Black Energy"
325 | ],
326 | "Invoke-Vnc": [
327 | "TrickBot",
328 | "Winnti",
329 | "Matrix Banker",
330 | "DarkHotel",
331 | "Carbanak"
332 | ],
333 | "Covenant": [
334 | "Refined Kitten"
335 | ],
336 | "SharpSuite": [],
337 | "Process-Hollowing": [],
338 | "AggressorScripts": [],
339 | "TpmInitUACBypass": [],
340 | "tenable-UACBypass": [],
341 | "DccwBypassUAC": [],
342 | "ALPC-BypassUAC": [],
343 | "WheresMyImplant": [],
344 | "SharpHound": [
345 | "PyXie",
346 | "Operation Wocao"
347 | ],
348 | "NetRipper": [
349 | "Turla"
350 | ],
351 | "Pinjectra": [],
352 | "CookieMonster": [],
353 | "SeatBelt": [],
354 | "Rubeus": [],
355 | "AmsiScanBufferBypass": [
356 | "Forkbombo"
357 | ],
358 | "PowerShdll": [],
359 | "SCShell": [],
360 | "TinyMet": [
361 | "Carbanak",
362 | "TA505"
363 | ],
364 | "ruler": [
365 | "Refined Kitten",
366 | "OilRig"
367 | ],
368 | "TitanHide": [
369 | "CHAINSHOT"
370 | ],
371 | "PoshC2": [
372 | "Refined Kitten",
373 | "APT10",
374 | "LYCEUM",
375 | "FakeUpdates"
376 | ],
377 | "Koadic": [
378 | "FakeUpdates",
379 | "APT10",
380 | "MuddyWater",
381 | "Fancy Bear"
382 | ],
383 | "FruityC2": [
384 | "MuddyWater"
385 | ],
386 | "Posh-SecMod": [
387 | "Turla"
388 | ],
389 | "Empire": [
390 | "FakeUpdates",
391 | "Turla",
392 | "FIN7",
393 | "APT10",
394 | "Ryuk",
395 | "TrickBot",
396 | "Frankenstein",
397 | "INDRIK SPIDER",
398 | "RobbinHood Ransomware",
399 | "Refined Kitten",
400 | "WIRTE",
401 | "Aurora Panda",
402 | "Cozy Bear",
403 | "DarkHydrus",
404 | "Novter",
405 | "LYCEUM",
406 | "FIN8",
407 | "MuddyWater",
408 | "Codoso",
409 | "Copy Kittens",
410 | "FIN10",
411 | "GandCrab"
412 | ],
413 | "veil": [
414 | "DarkHydrus"
415 | ],
416 | "pupy": [
417 | "Refined Kitten",
418 | "Rocket Kitten"
419 | ],
420 | "Trochilus": [
421 | "APT10",
422 | "DRBControl",
423 | "Nightshade Panda",
424 | "Hurricane Panda"
425 | ],
426 | "DKMC": [
427 | "APT10",
428 | "Gaza CyberGang"
429 | ],
430 | "PowerSploit": [
431 | "BRONZE PRESIDENT",
432 | "Fancy Bear",
433 | "SamSam Ransomware",
434 | "TrickBot",
435 | "Purple Fox",
436 | "Novter",
437 | "NetWalker Ransomware",
438 | "Nemty Ransomware",
439 | "GhostMiner",
440 | "Winnti",
441 | "FIN7",
442 | "Operation Wocao",
443 | "Refined Kitten",
444 | "MuddyWater",
445 | "Patchwork",
446 | "APT10",
447 | "OceanLotus"
448 | ],
449 | "LaZagne": [
450 | "Refined Kitten",
451 | "Gothic Panda",
452 | "MuddyWater",
453 | "Qealler",
454 | "Cloud Atlas",
455 | "NetWalker Ransomware",
456 | "LeafMiner",
457 | "OilRig"
458 | ],
459 | "Apfell": [],
460 | "FactionC2": [],
461 | "SafetyKatz": [
462 | "Chafer",
463 | "TEMP.Demon"
464 | ],
465 | "BloodHound": [
466 | "TEMP.Demon",
467 | "Operation Skeleton Key"
468 | ],
469 | "reGeorg": [
470 | "TEMP.Demon"
471 | ],
472 | "iBombShell": [],
473 | "FudgeC2": [],
474 | "Callidus": [],
475 | "KeeThief": [
476 | "Operation Wocao"
477 | ],
478 | "jexboss": [
479 | "Operation Wocao",
480 | "SamSam Ransomware"
481 | ],
482 | "chrome-passwords": [
483 | "MuddyWater"
484 | ],
485 | "impacket": [
486 | "APT10",
487 | "Berserk Bear",
488 | "Energetic Bear",
489 | "SamSam Ransomware",
490 | "Operation Wocao",
491 | "Emissary Panda"
492 | ],
493 | "CHAOS": [
494 | "Forkbombo"
495 | ],
496 | "DeathStar": [
497 | "Forkbombo"
498 | ],
499 | "CrackMapExec": [
500 | "Forkbombo",
501 | "MuddyWater",
502 | "Chafer",
503 | "Energetic Bear"
504 | ],
505 | "WinPwnage": [
506 | "PoetRAT"
507 | ],
508 | "FireMaster": [
509 | "PowerPool"
510 | ],
511 | "InfinityRAT": [
512 | "Harvbot",
513 | "Reomot",
514 | "Ponoeb",
515 | "Aataki"
516 | ],
517 | "BypassUAC": [
518 | "ataware",
519 | "BrazilianBankingTrojan"
520 | ],
521 | "OxidDumper": [
522 | "OceanLotus"
523 | ],
524 | "chimera_pe": [
525 | "Bolik"
526 | ]
527 | }
--------------------------------------------------------------------------------
/vs-autocompiler/README.md:
--------------------------------------------------------------------------------
1 | ## vs-autocompiler
2 |
3 | Compiles a project with multiplie Visual Studio backends.
4 | Supports: VS2019, VS2017, VS2015, VS2013, VS2012, VS2010.
5 |
6 | Run autocompiler.ps1 from directory with the project and the .sln file.
7 | Set $out parameter for where to generate the compiled files, e.g.:
8 |
9 | ```
10 | git clone https://github.com/stephenfewer/ReflectiveDLLInjection
11 | cd ReflectiveDLLInjection
12 | C:\Users\me\autocompiler.ps1 -out C:\Users\me\output
13 | ```
14 |
15 |
--------------------------------------------------------------------------------
/vs-autocompiler/autocompiler.ps1:
--------------------------------------------------------------------------------
1 | param (
2 | [string]$sln,
3 | [string]$out = "G:/out",
4 | [string]$SetupScriptPath
5 | )
6 | # TODO: Add force-dotnet or force-native
7 |
8 | function CopyNoOverwrite {
9 | param (
10 | [string]$src,
11 | [string]$dst
12 | )
13 |
14 | # TODO: Strip extension to add suffix and then readd it (instead of just adding .exe ontop)
15 | If (Test-Path $dst) {
16 | $i = 0
17 | While (Test-Path $dst) {
18 | $i += 1
19 | $dst = "$dst-$i.exe"
20 | }
21 | } Else {
22 | New-Item -ItemType File -Path $dst -Force
23 | }
24 |
25 | Copy-Item -Path $src -Destination $dst -Force
26 | }
27 |
28 | function Git-Clean {
29 | git clean -fdx # Force, include directories
30 | git reset --hard
31 | }
32 |
33 | function Upgrade-VCProj {
34 |
35 | }
36 |
37 | function Create-Initial-Directories {
38 | $ProjectName = (Get-Item -Path ".\").Name
39 | $outDir = "$out/$ProjectName/"
40 | mkdir $outDir
41 | }
42 |
43 | function Existing-Executables-Sha256 {
44 | $executables = Get-ChildItem -Include *.exe, *.dll -Recurse $pwd
45 | $hashes = @()
46 | ForEach ($executable in $executables)
47 | {
48 | $sha = (Get-FileHash -Path $executable.FullName).hash
49 | $hashes += $sha
50 | }
51 | return $hashes
52 | }
53 |
54 | function Move-Compiled {
55 | param (
56 | [string]$outSuffix,
57 | [string]$ExistingHashes
58 | )
59 | $ProjectName = (Get-Item -Path ".\").Name
60 | $outDir = "$out/$ProjectName/$ProjectName$outSuffix/"
61 |
62 | $executables = Get-ChildItem -Include *.exe, *.dll -Recurse $pwd
63 |
64 | # Remove executables not created by our compilation
65 | $filtered_executables = @()
66 | ForEach ($executable in $executables) {
67 | $sha = (Get-FileHash -Path $executable.FullName).hash
68 | If (!$ExistingHashes.Contains($sha)) {
69 | $filtered_executables += $executable
70 | }
71 | }
72 | $executables = $filtered_executables
73 |
74 | # Move compiled executables to destination directory
75 | if($executables.Length -gt 0){
76 | Remove-Item $outDir -Recurse -Force > $null
77 | mkdir $outDir > $null
78 |
79 | ForEach ($executable in $executables)
80 | {
81 | $outFile = $outDir + $executable.Name
82 | CopyNoOverwrite -src $executable.FullName -dst $outFile > $null
83 | }
84 | return $true
85 | } Else {
86 | Write-Information "Failed to build $ProjectName$outSuffix"
87 | return $false
88 | }
89 | }
90 |
91 | function Find-Git-Checkpoints {
92 | # Each checkpoint is a month
93 | $gitHist = (git log --format="%ai`t%H`t%an`t%ae`t%s") | ConvertFrom-Csv -Delimiter "`t" -Header ("Date", "CommitId", "Author", "Email", "Subject")
94 | ForEach ($hist in $gitHist) {
95 | $YearMonth = $hist.Date.Substring(0, 7)
96 | $hist | Add-Member -NotePropertyName YearMonth -NotePropertyValue $YearMonth
97 | }
98 | $GitCommits = ($gitHist | Sort-Object -Property YearMonth -Unique)
99 |
100 | return $GitCommits
101 | }
102 |
103 | function Reset-Compiler-Env {
104 | [Environment]::SetEnvironmentVariable("LIB", "")
105 | [Environment]::SetEnvironmentVariable("INCLUDE", "")
106 | [Environment]::SetEnvironmentVariable("VSINSTALLDIR", "")
107 | [Environment]::SetEnvironmentVariable("VSCMD_VER", "")
108 | [Environment]::SetEnvironmentVariable("VSCMD_ARG_HOST_ARCH", "")
109 | [Environment]::SetEnvironmentVariable("VSCMD_ARG_TGT_ARCH", "")
110 | [Environment]::SetEnvironmentVariable("VisualStudioVersion", "")
111 | [Environment]::SetEnvironmentVariable("VS140COMNTOOLS", "")
112 | [Environment]::SetEnvironmentVariable("VS150COMNTOOLS", "")
113 | [Environment]::SetEnvironmentVariable("VS160COMNTOOLS", "")
114 | [Environment]::SetEnvironmentVariable("VCToolsVersion", "")
115 | [Environment]::SetEnvironmentVariable("VCToolsRedistDir", "")
116 | [Environment]::SetEnvironmentVariable("VCToolsInstallDir", "")
117 | [Environment]::SetEnvironmentVariable("VCINSTALLDIR", "")
118 | [Environment]::SetEnvironmentVariable("VCIDEInstallDir", "")
119 | }
120 |
121 | $COMPILERS_NUM = 6
122 |
123 | function Setup-Compiler-ByIndex {
124 | param (
125 | [int]$i
126 | )
127 |
128 | $byIndex = @(
129 | "v100",
130 | "v120",
131 | "v140",
132 | "v140_xp",
133 | "v141",
134 | "v142"
135 | )
136 |
137 | $configs = @{
138 | "v100" = @{
139 | "Env" = @{"VCTargetsPath" = "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\"}
140 | "MSBuild" = "C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"
141 | "Toolset_Version" = "v100"
142 | }
143 | "v120" = @{
144 | "Env" = @{"VCTargetsPath" = "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v120\"}
145 | "MSBuild" = "C:\Program Files `(x86`)\MSBuild\12.0\Bin\MSBuild.exe"
146 | "Toolset_Version" = "v120"
147 | }
148 | "v140" = @{
149 | "Env" = @{"VCTargetsPath" = "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140\"}
150 | "MSBuild" = "C:\Program Files `(x86`)\MSBuild\14.0\Bin\MSBuild.exe"
151 | "Toolset_Version" = "v140"
152 | }
153 | "v140_xp" = @{
154 | "Env" = @{"VCTargetsPath" = "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140\"}
155 | "MSBuild" = "C:\Program Files `(x86`)\MSBuild\14.0\Bin\MSBuild.exe"
156 | "Toolset_Version" = "v140_xp"
157 | }
158 | "v141" = @{
159 | "Env" = @{"VCTargetsPath" = ""}
160 | "MSBuild" = "C:\Program Files `(x86`)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe"
161 | "Toolset_Version" = "v141"
162 | }
163 | "v142" = @{
164 | "Env" = @{"VCTargetsPath" = ""}
165 | "MSBuild" = "C:\Program Files `(x86`)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"
166 | "Toolset_Version" = "v142"
167 | }
168 | }
169 | #$extra_env.v140.initenv = "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
170 |
171 | $config = $configs[$byIndex[$i]]
172 | Reset-Compiler-Env
173 | foreach ($k in $config.Env.Keys) {
174 | [Environment]::SetEnvironmentVariable($k, $config.Env[$k])
175 | }
176 | return $config
177 | }
178 |
179 | function Bootstrap-Compiler-Options {
180 | $globaloptions = @{
181 | "WholeProgramOptimization" = @("true", "false")
182 | }
183 |
184 | $projFiles = Get-ChildItem -Include *.vcxproj -Recurse $pwd
185 |
186 | ForEach ($projFile in $projFiles)
187 | {
188 | [xml]$xmldata = Get-Content $projFile.FullName
189 |
190 | [System.Xml.XmlNamespaceManager]$ns = $xmldata.NameTable
191 | $ns.AddNamespace("Any", $xmldata.DocumentElement.NamespaceURI)
192 |
193 | $xmldata.SelectNodes('//Any:WindowsTargetPlatformVersion', $ns) | ForEach-Object { $_.ParentNode.RemoveChild($_) }
194 | $xmldata.SelectNodes('//Any:PrecompiledHeader', $ns) | ForEach-Object { $_.InnerText = "NotUsing" }
195 | $xmldata.SelectNodes('//Any:GenerateDebugInformation', $ns) | ForEach-Object { $_.ParentNode.RemoveChild($_) }
196 | $xmldata.SelectNodes('//Any:EnableEnhancedInstructionSet', $ns) | ForEach-Object { $_.ParentNode.RemoveChild($_) }
197 | # TODO: Add legacy_stdio_definitions.lib to AdditionalDependencies
198 | $ForceLinker = $xmldata.CreateElement("ForceFileOutput", $xmldata.DocumentElement.NamespaceURI)
199 | $ForceLinker.InnerText = "UndefinedSymbolOnly"
200 | $xmldata.SelectNodes('//Any:Link', $ns) | ForEach-Object { $xmldata.CreateElement("ForceFileOutput"); $_.AppendChild($ForceLinker) }
201 |
202 | $xmldata.Save($projFile.FullName)
203 | }
204 | }
205 |
206 | function Optional-Setup-Script {
207 |
208 | }
209 |
210 | function Optional-Cleanup-Script {
211 |
212 | }
213 |
214 | function Compile-Job-Native {
215 | param (
216 | [string]$arch,
217 | [string]$exec,
218 | [string]$sln,
219 | [string]$toolset_version,
220 | [string]$Suffix
221 | )
222 | Git-Clean > $null
223 | $CLOptions = Bootstrap-Compiler-Options
224 |
225 | $ExistingHashes = Existing-Executables-Sha256
226 |
227 | # Compile
228 | Write-Information "Building for $arch with $toolset_version with cmd: $exec `"$sln`" /m /p:Configuration=Release /p:Platform=`"$arch`" /p:PlatformToolset=$toolset_version"
229 | $proc = Start-Process -Passthru -NoNewWindow -FilePath $exec -ArgumentList "`"$sln`" /m /p:Configuration=Release /p:Platform=`"$arch`" /p:PlatformToolset=$toolset_version"
230 | $proc.WaitForExit()
231 |
232 | # Find and move compiled executables
233 | Write-Information "Finding executables generated for $arch $toolset_version"
234 | $success = Move-Compiled -ExistingHashes $ExistingHashes -outSuffix "-$toolset_version-$arch$Suffix"
235 | return $success
236 | }
237 |
238 | function Compile-Job-Dotnet {
239 | param(
240 | [string]$sdkversion,
241 | [string]$exec,
242 | [string]$sln,
243 | [string]$Suffix
244 | )
245 | Git-Clean > $null
246 | nuget restore $sln > $null
247 | $ExistingHashes = Existing-Executables-Sha256
248 |
249 | # Compile
250 | Write-Information "Building for with $sdkversion with cmd: $exec `"$sln`" /m /p:Configuration=Release /p:TargetFramework=$sdkversion /p:AllowUnsafeBlocks=true"
251 | $proc = Start-Process -Passthru -NoNewWindow -FilePath $exec -ArgumentList "`"$sln`" /m /p:Configuration=Release /p:TargetFramework=$sdkversion /p:AllowUnsafeBlocks=true"
252 | $proc.WaitForExit()
253 |
254 | # Find and move compiled executables
255 | Write-Information "Finding executables generated for $sdkversion"
256 | $success = Move-Compiled -ExistingHashes $ExistingHashes -outSuffix "-$sdkversion$Suffix"
257 | return $success
258 | }
259 |
260 | function Get-Project-Type {
261 | $csprojs = Get-ChildItem -Include *.csproj -Recurse $pwd
262 | If($csprojs.Length -gt 0) {
263 | return "dotnet"
264 | }
265 | return "native"
266 | }
267 |
268 | function Batch-Compile {
269 | param (
270 | [string]$Suffix
271 | )
272 |
273 | If(-Not (Test-Path $sln)) {
274 | Write-Information "Couldn't find $sln with suffix $suffix"
275 | return $false
276 | }
277 | $projectType = Get-Project-Type
278 | If($projectType -eq "native") {
279 | for ($i=0; $i -lt $COMPILERS_NUM; $i++) {
280 | $config = Setup-Compiler-ByIndex -i $i
281 | $compiler = $config.MSBuild
282 | $toolset_version = $config.Toolset_Version
283 | $exec = @"
284 | "$compiler"
285 | "@
286 |
287 | # Build for x86
288 | $success = Compile-Job-Native -arch "x86" -exec $exec -sln $sln -toolset_version $toolset_version -Suffix $Suffix
289 |
290 | If($success -eq $false) {
291 | Write-Information "x86 build failed, trying Win32!"
292 | Compile-Job-Native -arch "Win32" -exec $exec -sln $sln -toolset_version $toolset_version -Suffix $Suffix
293 | }
294 | # Build for x64
295 | Compile-Job-Native -arch "x64" -exec $exec -sln $sln -toolset_version $toolset_version -Suffix $Suffix
296 |
297 | # Try compiling for 'Any CPU'
298 | Compile-Job-Native -arch "Any CPU" -exec $exec -sln $sln -toolset_version $toolset_version -Suffix $Suffix
299 | }
300 | }
301 | If($projectType -eq "dotnet"){
302 | $sdkversions = @("net35", "net45", "netstandard2.0")
303 | $exec = "C:\Program Files `(x86`)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"
304 | ForEach($sdkversion in $sdkversions){
305 | Compile-Job-Dotnet -sdkversion $sdkversion -exec $exec -sln $sln -Suffix $suffix
306 | }
307 | }
308 |
309 | return $true
310 | }
311 |
312 | function Load-Setup-Script {
313 | If( Test-Path $SetupScriptPath ) {
314 | Import-Module -Name $SetupScriptPath
315 | }
316 | }
317 |
318 | function Find-Sln {
319 | $slns = Get-ChildItem *.sln
320 | if($slns.Count -eq 0) {
321 | echo "Couldn't find SLN file!"
322 | exit 1
323 | }
324 | if($slns.Count -gt 1) {
325 | echo "More than 1 SLN file found!"
326 | exit 1
327 | }
328 | return $slns[0].FullName
329 | }
330 |
331 | function Main{
332 | # Determine whether to start git mode: traverse bymonthly commits to compile additional code
333 | git status
334 | $gitExists = $LASTEXITCODE
335 | Write-Information "Starting!"
336 |
337 | Create-Initial-Directories
338 | if ([string]::IsNullOrEmpty($sln)) {
339 | $sln = Find-Sln
340 | }
341 |
342 | If ($gitExists -eq 0) {
343 | git checkout master
344 | git pull
345 | $GitCommits = Find-Git-Checkpoints
346 | [array]::Reverse($GitCommits)
347 | ForEach($GitCommit in $GitCommits) {
348 | git reset --hard $GitCommit.CommitId
349 | $success = (Batch-Compile -Suffix "-$($GitCommit.YearMonth)")
350 | If(-Not $success){
351 | break
352 | }
353 | }
354 | } Else {
355 | Batch-Compile -Suffix ""
356 | }
357 | }
358 |
359 | $InformationPreference = "Continue"
360 | Main
361 |
362 |
--------------------------------------------------------------------------------
/website/README.txt:
--------------------------------------------------------------------------------
1 | Template provided by InteractiveVis project
2 | http://blogs.oii.ox.ac.uk/vis/
3 | https://github.com/oxfordinternetinstitute/InteractiveVis/
4 |
5 | Important. The files must be uploaded to a webserver (or run one locally) in order to be viewed. JavaScript security prevents running the pages locally without a webserver.
6 |
7 | The InteractiveVis project of the Oxford Internet Institute with funding by JISC aims to allow easy creation of interactive visualisations for geospatial and network data using native web technologies (HTML5, CSS3, and SVG) and allow these visualisations to be self-contained so that they may run entirely offline in ebooks and other media. The project will survey existing solutions and build the necessary components to fill in missing features and smooth over incompatibilities in between existing libraries. The project will further provide online hosted wizards to allow for the easy creation of these interactive visualizations.
8 |
9 | More information about the project is available on the project blog:
10 | http//blogs.oii.ox.ac.uk/vis/
11 |
12 |
--------------------------------------------------------------------------------
/website/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "network",
3 | "version": "1.0",
4 | "data": "data.json",
5 | "logo": {
6 | "file": "images/intezer.png",
7 | "link": "https://www.intezer.com/",
8 | "text": "Intezer"
9 | },
10 | "text": {
11 | "more": "",
12 | "intro": "A map tracking the use of libraries with offensive capabilities by threat actors.
For more information check the VirusBulletin page.
Add new connections on GitHub.",
13 | "title": "OST Map"
14 | },
15 | "legend": {
16 | "edgeLabel": "Connection",
17 | "colorLabel": "Type",
18 | "nodeLabel": "Tool"
19 | },
20 | "features": {
21 | "search": true,
22 | "groupSelectorAttribute": "type",
23 | "hoverBehavior": "dim"
24 | },
25 | "informationPanel": {
26 | "groupByEdgeDirection": false,
27 | "imageAttribute": false
28 | },
29 | "sigma": {
30 | "drawingProperties": {
31 | "defaultEdgeType": "curve",
32 | "defaultHoverLabelBGColor": "#002147",
33 | "defaultLabelBGColor": "#ddd",
34 | "activeFontStyle": "bold",
35 | "defaultLabelColor": "#000",
36 | "labelThreshold": 10,
37 | "defaultLabelHoverColor": "#fff",
38 | "fontStyle": "bold",
39 | "hoverFontStyle": "bold",
40 | "defaultLabelSize": 14
41 | },
42 | "graphProperties": {
43 | "maxEdgeSize": 0.5,
44 | "minEdgeSize": 0.2,
45 | "minNodeSize": 1,
46 | "maxNodeSize": 7
47 | },
48 | "mouseProperties": {
49 | "maxRatio": 20,
50 | "minRatio": 0.75
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/website/css/style.css:
--------------------------------------------------------------------------------
1 | * {
2 | padding: 0px;
3 | margin: 0px;
4 | }
5 |
6 | .cf:before, .cf:after {
7 | content: "";
8 | display: table;
9 | }
10 |
11 | .cf:after {
12 | clear: both;
13 | }
14 |
15 | .cf {
16 | zoom: 1;
17 | }
18 |
19 | html, body {
20 | width: 100%;
21 | height: 100%;
22 | margin: 0px;
23 | padding: 0px;
24 | font-size: 12px;
25 | font-family: 'Open Sans';
26 | line-height: 1.25em;
27 | }
28 |
29 | .sigma-parent {
30 | position: relative;
31 | height: 100%;
32 | }
33 |
34 | .sigma-expand {
35 | position: absolute;
36 | width: 100%;
37 | height: 100%;
38 | top: 0;
39 | left: 0;
40 | background-color: #1a263d;
41 | background-position: center center;
42 | background-repeat: no-repeat;
43 | -webkit-touch-callout: none;
44 | -webkit-user-select: none;
45 | -khtml-user-select: none;
46 | -moz-user-select: none;
47 | -ms-user-select: none;
48 | user-select: none;
49 | }
50 |
51 | canvas#sigma_bg_1 {
52 | display: none;
53 | }
54 |
55 | #attributepane {
56 | display: block;
57 | display: none;
58 | position: absolute;
59 | height: auto;
60 | bottom: 0;
61 | top: 0;
62 | right: 0;
63 | width: 240px;
64 | background-color: #fff;
65 | margin: 0;
66 | word-wrap: break-word;
67 | background-color: rgba(255, 255, 255, 0.8);
68 | border-left: 1px solid #ccc;
69 | padding: 0px 18px 0px 18px;
70 | z-index: 1;
71 | }
72 |
73 |
74 | #attributepane .text {
75 | height: 100%;
76 | }
77 |
78 | #attributepane .name {
79 | color: #000;
80 | margin-bottom: 5px;
81 | height: 14px;
82 | border-bottom: 1px solid #999;
83 | padding: 0px 0 10px 0;
84 | font-size: 16px;
85 | font-weight: bold;
86 | }
87 |
88 |
89 | #attributepane .returntext em {
90 | background-image: url('../images/sprite.png');
91 | background-repeat: no-repeat;
92 | display: block;
93 | width: 20px;
94 | height: 20px;
95 | background-position: -91px -13px;
96 | float: left;
97 | }
98 |
99 | #attributepane .returntext span {
100 | padding-left: 5px;
101 | display: block;
102 | }
103 |
104 | #attributepane .close {
105 | padding-left: 14px;
106 | margin-top: 10px;
107 | }
108 |
109 | #attributepane .close .c {
110 | border-top: 2px solid #999;
111 | padding: 10px 0 14px 0;
112 | }
113 |
114 | #attributepane .close em {
115 | background-image: url('../images/sprite.png');
116 | background-repeat: no-repeat;
117 | background-position: -11px -13px;
118 | display: block;
119 | width: 24px;
120 | height: 16px;
121 | float: left;
122 | }
123 |
124 | #attributepane .close span {
125 | display: block;
126 | width: 151px;
127 | float: left;
128 | }
129 |
130 | #attributepane .nodeattributes {
131 | display: block;
132 | height: 85%;
133 | overflow-y: scroll;
134 | overflow-x: hidden;
135 | border-bottom: 1px solid #999;
136 | }
137 |
138 | #attributepane .name {
139 | font-size: 14px;
140 | cursor: default;
141 | padding-bottom: 10px;
142 | padding-top: 18px;
143 | font-weight: bold;
144 | }
145 |
146 | #attributepane .data {
147 |
148 | }
149 |
150 | #attributepane .data .plus {
151 | background-repeat: no-repeat;
152 | background-image: url('../images/sprite.png');
153 | background-position: -171px -122px;
154 | width: 22px;
155 | height: 20px;
156 | float: left;
157 | display: block;
158 | }
159 |
160 | #attributepane .link {
161 | padding: 0 0 0 4px;
162 | }
163 |
164 | #attributepane .link li {
165 | padding-top: 2px;
166 | cursor: pointer;
167 | }
168 |
169 | #attributepane .p {
170 | padding-top: 10px;
171 | font-weight: bold;
172 | font-size: 14px;
173 | }
174 |
175 | .left-close {
176 | background-image: url('../images/fancybox_sprite.png');
177 | margin-left: -37px;
178 | z-index: 99999;
179 | cursor: pointer;
180 | padding-left: 31px;
181 | line-height: 36px;
182 | background-repeat: no-repeat;
183 | margin-bottom: 25px;
184 | font-weight: bold;
185 | font-size: 14px;
186 |
187 | }
188 |
189 | #developercontainer {
190 | margin-left: 25px;
191 | margin-bottom: 25px;
192 | position: fixed;
193 | bottom: 0;
194 | }
195 |
196 | #jisc {
197 | width: 71px;
198 | height: 56px;
199 | background-image: url('../images/jisc-logo-small.png');
200 | background-repeat: no-repeat;
201 | display: inline-block;
202 | }
203 |
204 | #jisc span {
205 | display: none;
206 | }
207 |
208 | #oii {
209 | width: 227px;
210 | height: 56px;
211 | background-image: url('../images/oii_text.png');
212 | background-repeat: no-repeat;
213 | display: inline-block;
214 | margin-right: 10px;
215 |
216 | }
217 |
218 | #oii span {
219 | display: none;
220 | }
221 |
222 | #maintitle {
223 | width: 100%;
224 | height: 72px;
225 | background-repeat: no-repeat;
226 | margin-bottom: 20px;
227 | display: flex;
228 | align-items: center;
229 | }
230 |
231 | #maintitle h1 {
232 | display: none;
233 | }
234 |
235 | #mainpanel {
236 | margin-top: 50px;
237 | margin-left: 25px;
238 | background: #fff;
239 | background-color: #fff;
240 | z-index: 20;
241 | position: fixed;
242 | top: 0;
243 | border-radius: 16px;
244 |
245 | }
246 |
247 | #mainpanel .b1 {
248 | padding: 0px 0 0 0;
249 | }
250 |
251 | #mainpanel .col {
252 | width: 240px;
253 | padding: 18px 18px 18px 18px;
254 | margin: 0;
255 |
256 | }
257 |
258 | #title {
259 | font-weight: bold;
260 | }
261 |
262 | #titletext {
263 | padding: 6px 0 10px 0;
264 | }
265 |
266 | #info {
267 | padding-bottom: 15px;
268 | }
269 |
270 |
271 | #search {
272 | border-top: 1px solid #999;
273 | padding: 20px 0 0px 2px;
274 | }
275 |
276 | #search input[name=search] {
277 | border: 1px solid #999;
278 | background-color: #fff;
279 | padding: 5px 7px 4px 7px;
280 | width: 205px;
281 | color: #000;
282 | }
283 |
284 | #search input.empty {
285 | color: #000;
286 | }
287 |
288 | #search .state {
289 | width: 14px;
290 | height: 14px;
291 | background-image: url('../images/sprite.png');
292 | float: right;
293 | margin-top: 6px;
294 | cursor: pointer;
295 | background-position: -131px -13px;
296 | }
297 |
298 | #search .state.searching {
299 | background-position: -11px -13px;
300 | }
301 |
302 | #search .results {
303 | display: none;
304 | /* border: 1px solid #999;*/
305 | margin: 6px;
306 | /*height: 150px;*/
307 | overflow-y: scroll;
308 | overflow-x: hidden;
309 | }
310 |
311 | #search .results b {
312 | padding-left: 2px;
313 | }
314 |
315 | #search .results a {
316 | padding: 1px 2px;
317 | display: block;
318 | cursor: pointer;
319 | text-decoration: none;
320 | color: #000;
321 | }
322 |
323 | #search .results a:hover {
324 | background-color: #999;
325 | color: #fff;
326 | }
327 |
328 | #attributeselect {
329 | margin: 20px 0 13px 0;
330 | -webkit-touch-callout: none;
331 | -webkit-user-select: none;
332 | -khtml-user-select: none;
333 | -moz-user-select: none;
334 | -ms-user-select: none;
335 | user-select: none;
336 | }
337 |
338 | #attributeselect .select {
339 | border: 1px solid #999;
340 | padding: 5px 7px 4px 7px;
341 | color: #fff;
342 | cursor: pointer;
343 | background-color: #999;
344 | background-image: url('../images/sprite.png');
345 | background-repeat: no-repeat;
346 | background-position: 200px -144px;
347 | }
348 |
349 | #attributeselect .close {
350 | background-position: 200px -8px;
351 | }
352 |
353 | #attributeselect .list {
354 | display: none;
355 | border: 1px solid #999;
356 | padding: 6px;
357 | height: 150px;
358 | width: 226px;
359 | overflow-y: scroll;
360 | overflow-x: hidden;
361 | background-color: #999;
362 | /*position: relative;
363 | left: 240px;
364 | bottom: 164px;*/
365 | position: absolute;
366 | margin-left: 240px;
367 | margin-top: -164px;
368 | color: white;
369 | }
370 |
371 | #attributeselect .list a {
372 | display: block;
373 | padding: 2px;
374 | text-decoration: none;
375 | color: #fff;
376 | }
377 |
378 | #attributeselect .list a:hover {
379 | background-color: #fff;
380 | color: #000;
381 | }
382 |
383 | .link h2 {
384 | font-size: 1em;
385 | padding-top: 1em;
386 | }
387 |
388 | #mainpanel dl {
389 | padding-bottom: 10px;
390 | }
391 |
392 | #mainpanel h2 {
393 | font-size: 14px;
394 | }
395 |
396 | #mainpanel dt {
397 | width: 20px;
398 | height: 20px;
399 | float: left;
400 | background-repeat: no-repeat;
401 | background-image: url('../images/sprite.png');
402 | }
403 |
404 | #legend dl {
405 | }
406 |
407 | #mainpanel h2 {
408 | padding-bottom: 10px;
409 | }
410 |
411 | #legend dd {
412 | margin-bottom: 8px;
413 | color: #000;
414 | }
415 |
416 | #mainpanel .infos dd {
417 | margin-bottom: 12px;
418 | }
419 |
420 | #mainpanel .node {
421 | background-position: -11px -119px;
422 | }
423 |
424 | #mainpanel .edge {
425 | background-position: -51px -122px;
426 | }
427 |
428 | #mainpanel .colours {
429 |
430 | background-image: url('../images/rainbow.png');
431 |
432 | }
433 |
434 | #legend {
435 | margin-top: 8px;
436 | }
437 |
438 | #legend .note {
439 | margin-bottom: 8px;
440 |
441 | }
442 |
443 | #mainpanel .regions {
444 | background-position: -171px -13px;
445 | }
446 |
447 | #mainpanel .download {
448 | background-position: -51px -13px;
449 | }
450 |
451 | #mainpanel .moreinformation {
452 | background: url('../images/info.png');
453 | background-repeat: no-repeat;
454 | margin-left: 5px;
455 | }
456 |
457 | #copyright {
458 | margin: 0 auto;
459 | position: fixed;
460 | right: 40px;
461 | bottom: 25px;
462 | z-index: 0;
463 | }
464 |
465 | #copyright a {
466 | color: #000;
467 | }
468 |
469 | #copyright .explanation {
470 | display: none;
471 | }
472 |
473 | #zoom {
474 | z-index: 999;
475 | position: fixed;
476 | left: 45%;
477 | bottom: 25px;
478 | margin: 0 auto;
479 | padding: 0;
480 | -webkit-touch-callout: none;
481 | -webkit-user-select: none;
482 | -khtml-user-select: none;
483 | -moz-user-select: none;
484 | -ms-user-select: none;
485 | user-select: none;
486 | text-align: left;
487 | }
488 |
489 | #zoom .z {
490 | background: #fff;
491 | background-color: rgba(255, 255, 255, 0.7);
492 | width: 60px;
493 | height: 60px;
494 | cursor: pointer;
495 | border: 1px solid #ccc;
496 | float: left;
497 | margin-right: 4px;
498 | background-repeat: no-repeat;
499 | }
500 |
501 | #zoom .z[rel=center] {
502 | background-image: url('../images/zoom_reset.png');
503 | background-position: center;
504 | }
505 |
506 | #zoom .z[rel=in] {
507 | background-image: url('../images/zoom_in.png');
508 | background-position: center;
509 | }
510 |
511 | #zoom .z[rel=out] {
512 | background-image: url('../images/zoom_out.png');
513 | background-position: center;
514 | }
515 |
516 | .line {
517 | font-size: 12px;
518 | color: #000;
519 | text-decoration: none;
520 | font-weight: bold;
521 | cursor: pointer;
522 | cursor: hand;
523 | }
524 |
525 | #information {
526 | display: none;
527 | background: #fff;
528 | padding: 1px 10px 10px 10px;
529 | }
530 |
531 | #information h3 {
532 | margin: 14px 0 4px 0;
533 | }
534 |
535 | #information p {
536 | margin: 0 0 4px 0;
537 | }
538 |
539 | #information .button {
540 | width: 14px;
541 | height: 14px;
542 | background-image: url('../images/sprite.png');
543 | border: 1px solid #999;
544 | display: inline-block;
545 | *display: inline;
546 | *zoom: 1;
547 | }
548 |
549 | #information .button span {
550 | display: none;
551 | }
552 |
553 | #information .button.plus {
554 | background-position: -91px -122px;
555 | }
556 |
557 | #information .button.moins {
558 | background-position: -131px -122px;
559 | }
560 |
561 | #minify {
562 | background-color: #fff;
563 | padding: 4px 4px 4px 25px;
564 | cursor: pointer;
565 | background-image: url('../images/sprite.png');
566 | background-repeat: no-repeat;
567 | background-position: -167px -118px;
568 | position: absolute;
569 | top: 65px;
570 | left: 15px;
571 | display: none;
572 | }
573 |
574 | #minifier {
575 | position: absolute;
576 | width: 20px;
577 | height: 16px;
578 | background-image: url('../images/sprite.png');
579 | background-repeat: no-repeat;
580 | background-position: -45px -147px;
581 | cursor: pointer;
582 | display: none;
583 | }
584 |
585 |
--------------------------------------------------------------------------------
/website/css/tablet.css:
--------------------------------------------------------------------------------
1 | #developercontainer {
2 | display:none;
3 | }
--------------------------------------------------------------------------------
/website/images/CC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/CC.png
--------------------------------------------------------------------------------
/website/images/blank.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/blank.gif
--------------------------------------------------------------------------------
/website/images/fancybox_loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/fancybox_loading.gif
--------------------------------------------------------------------------------
/website/images/fancybox_sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/fancybox_sprite.png
--------------------------------------------------------------------------------
/website/images/info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/info.png
--------------------------------------------------------------------------------
/website/images/intezer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/intezer.png
--------------------------------------------------------------------------------
/website/images/jisc-logo-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/jisc-logo-small.png
--------------------------------------------------------------------------------
/website/images/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/map.png
--------------------------------------------------------------------------------
/website/images/oii.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/oii.png
--------------------------------------------------------------------------------
/website/images/oii_brand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/oii_brand.png
--------------------------------------------------------------------------------
/website/images/oii_text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/oii_text.png
--------------------------------------------------------------------------------
/website/images/rainbow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/rainbow.png
--------------------------------------------------------------------------------
/website/images/sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/sprite.png
--------------------------------------------------------------------------------
/website/images/zoom_in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/zoom_in.png
--------------------------------------------------------------------------------
/website/images/zoom_out.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/zoom_out.png
--------------------------------------------------------------------------------
/website/images/zoom_reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/images/zoom_reset.png
--------------------------------------------------------------------------------
/website/index.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 | OST Map
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
35 |
36 |
37 |
43 |
44 |
45 |
Legend:
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
69 |
70 |
71 |
72 |
73 |
78 |
79 |

82 |
83 |
84 |
85 |
86 |
Return to the full network
87 |
88 |
89 |
90 |
91 |
Connections:
92 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/website/js/excanvas.js:
--------------------------------------------------------------------------------
1 | document.createElement("canvas").getContext||function(){function S(){return this.context_||(this.context_=new z(this))}function T(a,b,c){var g=J.call(arguments,2);return function(){return a.apply(b,g.concat(J.call(arguments)))}}function K(a){return(""+a).replace(/&/g,"&").replace(/"/g,""")}function L(a){a.namespaces.g_vml_||a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML");a.namespaces.g_o_||a.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");
2 | a.styleSheets.ex_canvas_||(a=a.createStyleSheet(),a.owningElement.id="ex_canvas_",a.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}")}function U(a){var b=a.srcElement;switch(a.propertyName){case "width":b.getContext().clearRect();b.style.width=b.attributes.width.nodeValue+"px";b.firstChild.style.width=b.clientWidth+"px";break;case "height":b.getContext().clearRect(),b.style.height=b.attributes.height.nodeValue+"px",b.firstChild.style.height=b.clientHeight+
3 | "px"}}function V(a){a=a.srcElement;a.firstChild&&(a.firstChild.style.width=a.clientWidth+"px",a.firstChild.style.height=a.clientHeight+"px")}function A(){return[[1,0,0],[0,1,0],[0,0,1]]}function q(a,b){for(var c=A(),g=0;3>g;g++)for(var e=0;3>e;e++){for(var f=0,d=0;3>d;d++)f+=a[g][d]*b[d][e];c[g][e]=f}return c}function M(a,b){b.fillStyle=a.fillStyle;b.lineCap=a.lineCap;b.lineJoin=a.lineJoin;b.lineWidth=a.lineWidth;b.miterLimit=a.miterLimit;b.shadowBlur=a.shadowBlur;b.shadowColor=a.shadowColor;b.shadowOffsetX=
4 | a.shadowOffsetX;b.shadowOffsetY=a.shadowOffsetY;b.strokeStyle=a.strokeStyle;b.globalAlpha=a.globalAlpha;b.font=a.font;b.textAlign=a.textAlign;b.textBaseline=a.textBaseline;b.arcScaleX_=a.arcScaleX_;b.arcScaleY_=a.arcScaleY_;b.lineScale_=a.lineScale_}function N(a){var b=a.indexOf("(",3),c=a.indexOf(")",b+1),b=a.substring(b+1,c).split(",");if(4!=b.length||"a"!=a.charAt(3))b[3]=1;return b}function B(a,b,c){return Math.min(c,Math.max(b,a))}function C(a,b,c){0>c&&c++;16*c?a+6*(b-a)*c:
5 | 1>2*c?b:2>3*c?a+6*(b-a)*(2/3-c):a}function D(a){if(a in E)return E[a];var b,c=1,a=""+a;if("#"==a.charAt(0))b=a;else if(/^rgb/.test(a)){c=N(a);b="#";for(var g,e=0;3>e;e++)g=-1!=c[e].indexOf("%")?Math.floor(255*(parseFloat(c[e])/100)):+c[e],b+=s[B(g,0,255)];c=+c[3]}else if(/^hsl/.test(a)){e=c=N(a);b=parseFloat(e[0])/360%360;0>b&&b++;g=B(parseFloat(e[1])/100,0,1);e=B(parseFloat(e[2])/100,0,1);if(0==g)g=e=b=e;else{var f=0.5>e?e*(1+g):e+g-e*g,d=2*e-f;g=C(d,f,b+1/3);e=C(d,f,b);b=C(d,f,b-1/3)}b="#"+s[Math.floor(255*
6 | g)]+s[Math.floor(255*e)]+s[Math.floor(255*b)];c=c[3]}else b=W[a]||a;return E[a]={color:b,alpha:c}}function z(a){this.m_=A();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.fillStyle=this.strokeStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=1*n;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=a;var b="width:"+a.clientWidth+"px;height:"+a.clientHeight+"px;overflow:hidden;position:absolute",
7 | c=a.ownerDocument.createElement("div");c.style.cssText=b;a.appendChild(c);b=c.cloneNode(!1);b.style.backgroundColor="red";b.style.filter="alpha(opacity=0)";a.appendChild(b);this.element_=c;this.lineScale_=this.arcScaleY_=this.arcScaleX_=1}function O(a,b,c,g){a.currentPath_.push({type:"bezierCurveTo",cp1x:b.x,cp1y:b.y,cp2x:c.x,cp2y:c.y,x:g.x,y:g.y});a.currentX_=g.x;a.currentY_=g.y}function P(a,b){var c=D(a.strokeStyle),g=c.color,c=c.alpha*a.globalAlpha,e=a.lineScale_*a.lineWidth;1>e&&(c*=e);b.push("')}function Q(a,b,c,g){var e=a.fillStyle,f=a.arcScaleX_,d=a.arcScaleY_,h=g.x-c.x,l=g.y-c.y;if(e instanceof t){var i=0,j=g=0,r=0,k=1;if("gradient"==e.type_){var i=e.x1_/f,c=e.y1_/d,m=p(a,e.x0_/f,e.y0_/d),i=p(a,i,c),i=180*Math.atan2(i.x-m.x,i.y-m.y)/Math.PI;0>i&&(i+=360);1.0E-6>i&&(i=0)}else m=p(a,e.x0_,e.y0_),g=(m.x-c.x)/h,j=(m.y-c.y)/l,h/=f*
9 | n,l/=d*n,k=u.max(h,l),r=2*e.r0_/k,k=2*e.r1_/k-r;f=e.colors_;f.sort(function(a,b){return a.offset-b.offset});for(var d=f.length,m=f[0].color,c=f[d-1].color,h=f[0].alpha*a.globalAlpha,a=f[d-1].alpha*a.globalAlpha,l=[],o=0;o')}else e instanceof
10 | F?h&&l&&b.push("'):(e=D(a.fillStyle),b.push(''))}function p(a,b,c){a=a.m_;return{x:n*(b*a[0][0]+c*a[1][0]+a[2][0])-o,y:n*(b*a[0][1]+c*a[1][1]+a[2][1])-o}}function w(a,b,c){isFinite(b[0][0])&&isFinite(b[0][1])&&isFinite(b[1][0])&&isFinite(b[1][1])&&isFinite(b[2][0])&&isFinite(b[2][1])&&(a.m_=b,c&&(a.lineScale_=Y(Z(b[0][0]*b[1][1]-b[0][1]*
11 | b[1][0]))))}function t(a){this.type_=a;this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0;this.colors_=[]}function F(a,b){if(!a||1!=a.nodeType||"IMG"!=a.tagName)throw new x("TYPE_MISMATCH_ERR");if("complete"!=a.readyState)throw new x("INVALID_STATE_ERR");switch(b){case "repeat":case null:case "":this.repetition_="repeat";break;case "repeat-x":case "repeat-y":case "no-repeat":this.repetition_=b;break;default:throw new x("SYNTAX_ERR");}this.src_=a.src;this.width_=a.width;this.height_=a.height}
12 | function x(a){this.code=this[a];this.message=a+": DOM Exception "+this.code}var u=Math,h=u.round,G=u.sin,H=u.cos,Z=u.abs,Y=u.sqrt,n=10,o=n/2;navigator.userAgent.match(/MSIE ([\d.]+)?/);var J=Array.prototype.slice;L(document);var R={init:function(a){a=a||document;a.createElement("canvas");a.attachEvent("onreadystatechange",T(this.init_,this,a))},init_:function(a){for(var a=a.getElementsByTagName("canvas"),b=0;bd;d++)for(var y=0;16>y;y++)s[16*d+y]=d.toString(16)+y.toString(16);var W={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",
14 | bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",
15 | darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",
16 | ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",
17 | mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",
18 | peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},
19 | E={},I={},X={butt:"flat",round:"round"},d=z.prototype;d.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null);this.element_.innerHTML=""};d.beginPath=function(){this.currentPath_=[]};d.moveTo=function(a,b){var c=p(this,a,b);this.currentPath_.push({type:"moveTo",x:c.x,y:c.y});this.currentX_=c.x;this.currentY_=c.y};d.lineTo=function(a,b){var c=p(this,a,b);this.currentPath_.push({type:"lineTo",x:c.x,y:c.y});this.currentX_=c.x;this.currentY_=c.y};d.bezierCurveTo=
20 | function(a,b,c,g,e,f){e=p(this,e,f);a=p(this,a,b);c=p(this,c,g);O(this,a,c,e)};d.quadraticCurveTo=function(a,b,c,g){a=p(this,a,b);c=p(this,c,g);g={x:this.currentX_+2/3*(a.x-this.currentX_),y:this.currentY_+2/3*(a.y-this.currentY_)};O(this,g,{x:g.x+(c.x-this.currentX_)/3,y:g.y+(c.y-this.currentY_)/3},c)};d.arc=function(a,b,c,g,e,f){var c=c*n,d=f?"at":"wa",h=a+H(g)*c-o,l=b+G(g)*c-o,g=a+H(e)*c-o,e=b+G(e)*c-o;h==g&&!f&&(h+=0.125);a=p(this,a,b);h=p(this,h,l);g=p(this,g,e);this.currentPath_.push({type:d,
21 | x:a.x,y:a.y,radius:c,xStart:h.x,yStart:h.y,xEnd:g.x,yEnd:g.y})};d.rect=function(a,b,c,g){this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+g);this.lineTo(a,b+g);this.closePath()};d.strokeRect=function(a,b,c,g){var e=this.currentPath_;this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+g);this.lineTo(a,b+g);this.closePath();this.stroke();this.currentPath_=e};d.fillRect=function(a,b,c,g){var e=this.currentPath_;this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+
22 | c,b+g);this.lineTo(a,b+g);this.closePath();this.fill();this.currentPath_=e};d.createLinearGradient=function(a,b,c,g){var e=new t("gradient");e.x0_=a;e.y0_=b;e.x1_=c;e.y1_=g;return e};d.createRadialGradient=function(a,b,c,g,e,f){var d=new t("gradientradial");d.x0_=a;d.y0_=b;d.r0_=c;d.x1_=g;d.y1_=e;d.r1_=f;return d};d.drawImage=function(a,b){var c,g,e,d,o,v,l,i;e=a.runtimeStyle.width;d=a.runtimeStyle.height;a.runtimeStyle.width="auto";a.runtimeStyle.height="auto";var j=a.width,r=a.height;a.runtimeStyle.width=
23 | e;a.runtimeStyle.height=d;if(3==arguments.length)c=arguments[1],g=arguments[2],o=v=0,l=e=j,i=d=r;else if(5==arguments.length)c=arguments[1],g=arguments[2],e=arguments[3],d=arguments[4],o=v=0,l=j,i=r;else if(9==arguments.length)o=arguments[1],v=arguments[2],l=arguments[3],i=arguments[4],c=arguments[5],g=arguments[6],e=arguments[7],d=arguments[8];else throw Error("Invalid number of arguments");var k=p(this,c,g),m=[];m.push(" ','","");this.element_.insertAdjacentHTML("BeforeEnd",m.join(""))};d.stroke=function(a){var b=[];b.push("d.x)d.x=f.x;if(null==c.y||f.yd.y)d.y=f.y}}b.push(' ">');a?Q(this,b,c,d):P(this,b);b.push("");this.element_.insertAdjacentHTML("beforeEnd",b.join(""))};d.fill=function(){this.stroke(!0)};d.closePath=function(){this.currentPath_.push({type:"close"})};d.save=function(){var a=
28 | {};M(this,a);this.aStack_.push(a);this.mStack_.push(this.m_);this.m_=q(A(),this.m_)};d.restore=function(){this.aStack_.length&&(M(this.aStack_.pop(),this),this.m_=this.mStack_.pop())};d.translate=function(a,b){w(this,q([[1,0,0],[0,1,0],[a,b,1]],this.m_),!1)};d.rotate=function(a){var b=H(a),a=G(a);w(this,q([[b,a,0],[-a,b,0],[0,0,1]],this.m_),!1)};d.scale=function(a,b){this.arcScaleX_*=a;this.arcScaleY_*=b;w(this,q([[a,0,0],[0,b,0],[0,0,1]],this.m_),!0)};d.transform=function(a,b,c,d,e,f){w(this,q([[a,
29 | b,0],[c,d,0],[e,f,1]],this.m_),!0)};d.setTransform=function(a,b,c,d,e,f){w(this,[[a,b,0],[c,d,0],[e,f,1]],!0)};d.drawText_=function(a,b,c,d,e){var f=this.m_,d=0,o=1E3,q=0,l=[],i;i=this.font;if(I[i])i=I[i];else{var j=document.createElement("div").style;try{j.font=i}catch(r){}i=I[i]={style:j.fontStyle||"normal",variant:j.fontVariant||"normal",weight:j.fontWeight||"normal",size:j.fontSize||10,family:j.fontFamily||"sans-serif"}}var j=i,k=this.element_;i={};for(var m in j)i[m]=j[m];m=parseFloat(k.currentStyle.fontSize);
30 | k=parseFloat(j.size);i.size="number"==typeof j.size?j.size:-1!=j.size.indexOf("px")?k:-1!=j.size.indexOf("em")?m*k:-1!=j.size.indexOf("%")?m/100*k:-1!=j.size.indexOf("pt")?k/0.75:m;i.size*=0.981;m=i.style+" "+i.variant+" "+i.weight+" "+i.size+"px "+i.family;k=this.element_.currentStyle;j=this.textAlign.toLowerCase();switch(j){case "left":case "center":case "right":break;case "end":j="ltr"==k.direction?"right":"left";break;case "start":j="rtl"==k.direction?"right":"left";break;default:j="left"}switch(this.textBaseline){case "hanging":case "top":q=
31 | i.size/1.75;break;case "middle":break;default:case null:case "alphabetic":case "ideographic":case "bottom":q=-i.size/2.25}switch(j){case "right":d=1E3;o=0.05;break;case "center":d=o=500}b=p(this,b+0,c+q);l.push('');e?P(this,l):Q(this,l,{x:-d,y:0},{x:o,y:i.size});e=f[0][0].toFixed(3)+","+f[1][0].toFixed(3)+","+f[0][1].toFixed(3)+
32 | ","+f[1][1].toFixed(3)+",0,0";b=h(b.x/n)+","+h(b.y/n);l.push('','','');this.element_.insertAdjacentHTML("beforeEnd",l.join(""))};d.fillText=function(a,b,c,d){this.drawText_(a,b,c,d,!1)};d.strokeText=function(a,b,c,d){this.drawText_(a,b,c,d,!0)};d.measureText=function(a){this.textMeasureEl_||(this.element_.insertAdjacentHTML("beforeEnd",
33 | ''),this.textMeasureEl_=this.element_.lastChild);var b=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(b.createTextNode(a));return{width:this.textMeasureEl_.offsetWidth}};d.clip=function(){};d.arcTo=function(){};d.createPattern=function(a,b){return new F(a,b)};t.prototype.addColorStop=function(a,b){b=D(b);this.colors_.push({offset:a,
34 | color:b.color,alpha:b.alpha})};d=x.prototype=Error();d.INDEX_SIZE_ERR=1;d.DOMSTRING_SIZE_ERR=2;d.HIERARCHY_REQUEST_ERR=3;d.WRONG_DOCUMENT_ERR=4;d.INVALID_CHARACTER_ERR=5;d.NO_DATA_ALLOWED_ERR=6;d.NO_MODIFICATION_ALLOWED_ERR=7;d.NOT_FOUND_ERR=8;d.NOT_SUPPORTED_ERR=9;d.INUSE_ATTRIBUTE_ERR=10;d.INVALID_STATE_ERR=11;d.SYNTAX_ERR=12;d.INVALID_MODIFICATION_ERR=13;d.NAMESPACE_ERR=14;d.INVALID_ACCESS_ERR=15;d.VALIDATION_ERR=16;d.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=R;CanvasRenderingContext2D=z;CanvasGradient=
35 | t;CanvasPattern=F;DOMException=x}();
--------------------------------------------------------------------------------
/website/js/fancybox/jquery.fancybox.css:
--------------------------------------------------------------------------------
1 | /*! fancyBox v2.0.6 fancyapps.com | fancyapps.com/fancybox/#license */
2 | .fancybox-tmp iframe, .fancybox-tmp object {
3 | vertical-align: top;
4 | padding: 0;
5 | margin: 0;
6 | }
7 |
8 | .fancybox-wrap {
9 | position: absolute;
10 | top: 0;
11 | left: 0;
12 | z-index: 8020;
13 | }
14 |
15 | .fancybox-skin {
16 | position: relative;
17 | padding: 0;
18 | margin: 0;
19 | background: #f9f9f9;
20 | color: #444;
21 | text-shadow: none;
22 | -webkit-border-radius: 4px;
23 | -moz-border-radius: 4px;
24 | border-radius: 4px;
25 | }
26 |
27 | .fancybox-opened {
28 | z-index: 8030;
29 | }
30 |
31 | .fancybox-opened .fancybox-skin {
32 | -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
33 | -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
34 | box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
35 | }
36 |
37 | .fancybox-outer, .fancybox-inner {
38 | padding: 0;
39 | margin: 0;
40 | position: relative;
41 | outline: none;
42 | }
43 |
44 | .fancybox-inner {
45 | overflow: hidden;
46 | }
47 |
48 | .fancybox-type-iframe .fancybox-inner {
49 | -webkit-overflow-scrolling: touch;
50 | }
51 |
52 | .fancybox-error {
53 | color: #444;
54 | font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
55 | margin: 0;
56 | padding: 10px;
57 | }
58 |
59 | .fancybox-image, .fancybox-iframe {
60 | display: block;
61 | width: 100%;
62 | height: 100%;
63 | border: 0;
64 | padding: 0;
65 | margin: 0;
66 | vertical-align: top;
67 | }
68 |
69 | .fancybox-image {
70 | max-width: 100%;
71 | max-height: 100%;
72 | }
73 |
74 | #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
75 | background-image: url('../../images/fancybox_sprite.png');
76 | }
77 |
78 | #fancybox-loading {
79 | position: fixed;
80 | top: 50%;
81 | left: 50%;
82 | margin-top: -22px;
83 | margin-left: -22px;
84 | background-position: 0 -108px;
85 | opacity: 0.8;
86 | cursor: pointer;
87 | z-index: 8020;
88 | }
89 |
90 | #fancybox-loading div {
91 | width: 44px;
92 | height: 44px;
93 | background: url('../../images/fancybox_loading.gif') center center no-repeat;
94 | }
95 |
96 | .fancybox-close {
97 | position: absolute;
98 | top: -18px;
99 | right: -18px;
100 | width: 36px;
101 | height: 36px;
102 | cursor: pointer;
103 | z-index: 8040;
104 | }
105 |
106 | .fancybox-nav {
107 | position: absolute;
108 | top: 0;
109 | width: 40%;
110 | height: 100%;
111 | cursor: pointer;
112 | background: transparent url('../../images/blank.gif'); /* helps IE */
113 | -webkit-tap-highlight-color: rgba(0,0,0,0);
114 | z-index: 8040;
115 | }
116 |
117 | .fancybox-prev {
118 | left: 0;
119 | }
120 |
121 | .fancybox-next {
122 | right: 0;
123 | }
124 |
125 | .fancybox-nav span {
126 | position: absolute;
127 | top: 50%;
128 | width: 36px;
129 | height: 34px;
130 | margin-top: -18px;
131 | cursor: pointer;
132 | z-index: 8040;
133 | visibility: hidden;
134 | }
135 |
136 | .fancybox-prev span {
137 | left: 20px;
138 | background-position: 0 -36px;
139 | }
140 |
141 | .fancybox-next span {
142 | right: 20px;
143 | background-position: 0 -72px;
144 | }
145 |
146 | .fancybox-nav:hover span {
147 | visibility: visible;
148 | }
149 |
150 | .fancybox-tmp {
151 | position: absolute;
152 | top: -9999px;
153 | left: -9999px;
154 | padding: 0;
155 | overflow: visible;
156 | visibility: hidden;
157 | }
158 |
159 | /* Overlay helper */
160 |
161 | #fancybox-overlay {
162 | position: absolute;
163 | top: 0;
164 | left: 0;
165 | overflow: hidden;
166 | display: none;
167 | z-index: 8010;
168 | background: #000;
169 | }
170 |
171 | #fancybox-overlay.overlay-fixed {
172 | position: fixed;
173 | bottom: 0;
174 | right: 0;
175 | }
176 |
177 | /* Title helper */
178 |
179 | .fancybox-title {
180 | visibility: hidden;
181 | font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
182 | position: relative;
183 | text-shadow: none;
184 | z-index: 8050;
185 | }
186 |
187 | .fancybox-opened .fancybox-title {
188 | visibility: visible;
189 | }
190 |
191 | .fancybox-title-float-wrap {
192 | position: absolute;
193 | bottom: 0;
194 | right: 50%;
195 | margin-bottom: -35px;
196 | z-index: 8030;
197 | text-align: center;
198 | }
199 |
200 | .fancybox-title-float-wrap .child {
201 | display: inline-block;
202 | margin-right: -100%;
203 | padding: 2px 20px;
204 | background: transparent; /* Fallback for web browsers that doesn't support RGBa */
205 | background: rgba(0, 0, 0, 0.8);
206 | -webkit-border-radius: 15px;
207 | -moz-border-radius: 15px;
208 | border-radius: 15px;
209 | text-shadow: 0 1px 2px #222;
210 | color: #FFF;
211 | font-weight: bold;
212 | line-height: 24px;
213 | white-space: nowrap;
214 | }
215 |
216 | .fancybox-title-outside-wrap {
217 | position: relative;
218 | margin-top: 10px;
219 | color: #fff;
220 | }
221 |
222 | .fancybox-title-inside-wrap {
223 | margin-top: 10px;
224 | }
225 |
226 | .fancybox-title-over-wrap {
227 | position: absolute;
228 | bottom: 0;
229 | left: 0;
230 | color: #fff;
231 | padding: 10px;
232 | background: #000;
233 | background: rgba(0, 0, 0, .8);
234 | }
--------------------------------------------------------------------------------
/website/js/fancybox/jquery.fancybox.pack.js:
--------------------------------------------------------------------------------
1 | /*! fancyBox v2.0.6 fancyapps.com | fancyapps.com/fancybox/#license */
2 | (function(s,l,d,t){var m=d(s),q=d(l),a=d.fancybox=function(){a.open.apply(this,arguments)},u=!1,k=l.createTouch!==t,o=function(a){return"string"===d.type(a)},n=function(b,c){c&&o(b)&&0',image:'
',iframe:'",swf:'',error:'The requested content cannot be loaded.
Please try again later.
',
5 | closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:300,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:300,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:300,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",
6 | prevSpeed:300,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:{speedIn:0,speedOut:300,opacity:0.8,css:{cursor:"pointer"},closeClick:!0},title:{type:"float"}}},group:{},opts:{},coming:null,current:null,isOpen:!1,isOpened:!1,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(b,c){a.close(!0);b&&!d.isArray(b)&&(b=b instanceof d?d(b).get():[b]);a.isActive=!0;a.opts=d.extend(!0,{},a.defaults,c);d.isPlainObject(c)&&c.keys!==t&&(a.opts.keys=c.keys?
7 | d.extend({},a.defaults.keys,c.keys):!1);a.group=b;a._start(a.opts.index||0)},cancel:function(){a.coming&&!1===a.trigger("onCancel")||(a.coming=null,a.hideLoading(),a.ajaxLoad&&a.ajaxLoad.abort(),a.ajaxLoad=null,a.imgPreload&&(a.imgPreload.onload=a.imgPreload.onabort=a.imgPreload.onerror=null))},close:function(b){a.cancel();a.current&&!1!==a.trigger("beforeClose")&&(a.unbindEvents(),!a.isOpen||b&&!0===b[0]?(d(".fancybox-wrap").stop().trigger("onReset").remove(),a._afterZoomOut()):(a.isOpen=a.isOpened=
8 | !1,d(".fancybox-item, .fancybox-nav").remove(),a.wrap.stop(!0).removeClass("fancybox-opened"),a.inner.css("overflow","hidden"),a.transitions[a.current.closeMethod]()))},play:function(b){var c=function(){clearTimeout(a.player.timer)},e=function(){c();a.current&&a.player.isActive&&(a.player.timer=setTimeout(a.next,a.current.playSpeed))},f=function(){c();d("body").unbind(".player");a.player.isActive=!1;a.trigger("onPlayEnd")};if(a.player.isActive||b&&!1===b[0])f();else if(a.current&&(a.current.loop||
9 | a.current.index=a.group.length?b=0:0>b&&(b=a.group.length-1)),a.group[b]!==t&&(a.cancel(),a._start(b)))},reposition:function(b,
10 | c){var e;a.isOpen&&(e=a._getPosition(c),b&&"scroll"===b.type?(delete e.position,a.wrap.stop(!0,!0).animate(e,200)):a.wrap.css(e))},update:function(b){a.isOpen&&(u||setTimeout(function(){var c=a.current,e=!b||b&&"orientationchange"===b.type;if(u&&(u=!1,c)){if(!b||"scroll"!==b.type||e)c.autoSize&&"iframe"!==c.type&&(a.inner.height("auto"),c.height=a.inner.height()),(c.autoResize||e)&&a._setDimension(),c.canGrow&&"iframe"!==c.type&&a.inner.height("auto");(c.autoCenter||e)&&a.reposition(b);a.trigger("onUpdate")}},
11 | 200),u=!0)},toggle:function(){a.isOpen&&(a.current.fitToView=!a.current.fitToView,a.update())},hideLoading:function(){q.unbind("keypress.fb");d("#fancybox-loading").remove()},showLoading:function(){a.hideLoading();q.bind("keypress.fb",function(b){27===b.keyCode&&(b.preventDefault(),a.cancel())});d('').click(a.cancel).appendTo("body")},getViewport:function(){return{x:m.scrollLeft(),y:m.scrollTop(),w:k&&s.innerWidth?s.innerWidth:m.width(),h:k&&s.innerHeight?
12 | s.innerHeight:m.height()}},unbindEvents:function(){a.wrap&&a.wrap.unbind(".fb");q.unbind(".fb");m.unbind(".fb")},bindEvents:function(){var b=a.current,c=b.keys;b&&(m.bind("resize.fb orientationchange.fb"+(b.autoCenter&&!b.fixed?" scroll.fb":""),a.update),c&&q.bind("keydown.fb",function(b){var f;f=b.target||b.srcElement;if(!b.ctrlKey&&!b.altKey&&!b.shiftKey&&!b.metaKey&&(!f||!f.type&&!d(f).is("[contenteditable]")))f=b.keyCode,-1b.length))for(i=1;i<=h;i+=1)if(f=b[(c.index+i)%e],g=f.href||d(f).attr("href")||f,"image"===f.type||a.isImage(g))(new Image).src=g},_afterLoad:function(){a.hideLoading();
19 | !a.coming||!1===a.trigger("afterLoad",a.current)?a.coming=!1:(a.isOpened?(d(".fancybox-item, .fancybox-nav").remove(),a.wrap.stop(!0).removeClass("fancybox-opened"),a.inner.css("overflow","hidden"),a.transitions[a.current.prevMethod]()):(d(".fancybox-wrap").stop().trigger("onReset").remove(),a.trigger("afterClose")),a.unbindEvents(),a.isOpen=!1,a.current=a.coming,a.wrap=d(a.current.tpl.wrap).addClass("fancybox-"+(k?"mobile":"desktop")+" fancybox-type-"+a.current.type+" fancybox-tmp "+a.current.wrapCSS).appendTo("body"),
20 | a.skin=d(".fancybox-skin",a.wrap).css("padding",n(a.current.padding)),a.outer=d(".fancybox-outer",a.wrap),a.inner=d(".fancybox-inner",a.wrap),a._setContent())},_setContent:function(){var b=a.current,c=b.content,e=b.type,f=b.minWidth,g=b.minHeight,i=b.maxWidth,h=b.maxHeight;switch(e){case "inline":case "ajax":case "html":b.selector?c=d("").html(c).find(b.selector):c instanceof d&&(c.parent().hasClass("fancybox-inner")&&c.parents(".fancybox-wrap").unbind("onReset"),c=c.show().detach(),d(a.wrap).bind("onReset",
21 | function(){c.appendTo("body").hide()}));b.autoSize&&(f=d('
').appendTo("body").css({minWidth:n(f,"w"),minHeight:n(g,"h"),maxWidth:n(i,"w"),maxHeight:n(h,"h")}).append(c),b.width=f.width(),b.height=f.height(),f.width(a.current.width),f.height()>b.height&&(f.width(b.width+1),b.width=f.width(),b.height=f.height()),c=f.contents().detach(),f.remove());break;case "image":c=b.tpl.image.replace("{href}",b.href);b.aspectRatio=!0;break;case "swf":c=
22 | b.tpl.swf.replace(/\{width\}/g,b.width).replace(/\{height\}/g,b.height).replace(/\{href\}/g,b.href);break;case "iframe":c=d(b.tpl.iframe.replace("{rnd}",(new Date).getTime())).attr("scrolling",b.scrolling).attr("src",b.href),b.scrolling=k?"scroll":"auto"}if("image"===e||"swf"===e)b.autoSize=!1,b.scrolling="visible";"iframe"===e&&b.autoSize?(a.showLoading(),a._setDimension(),a.inner.css("overflow",b.scrolling),c.bind({onCancel:function(){d(this).unbind();a._afterZoomOut()},load:function(){a.hideLoading();
23 | try{this.contentWindow.document.location&&(a.current.height=d(this).contents().find("body").height())}catch(b){a.current.autoSize=!1}a[a.isOpen?"_afterZoomIn":"_beforeShow"]()}}).appendTo(a.inner)):(a.inner.append(c),a._beforeShow())},_beforeShow:function(){a.coming=null;a.trigger("beforeShow");a._setDimension();a.wrap.hide().removeClass("fancybox-tmp");a.bindEvents();a._preloadImages();a.transitions[a.isOpened?a.current.nextMethod:a.current.openMethod]()},_setDimension:function(){var b=a.wrap,c=
24 | a.inner,e=a.current,f=a.getViewport(),g=e.margin,i=2*e.padding,h=e.width,j=e.height,r=e.maxWidth+i,k=e.maxHeight+i,l=e.minWidth+i,m=e.minHeight+i,p;f.w-=g[1]+g[3];f.h-=g[0]+g[2];o(h)&&0
r&&(h=r,j=(h-i)/g+i),j>k&&(j=k,h=(j-i)*g+i),hr||p>k)for(;(h>r||p>k)&&h>l&&p>m;)j-=10,e.aspectRatio?(h=Math.round((j-i)*g+i),hm&&jf.w||p>f.h)&&h>l&&j>m)e.canShrink=!0;a.innerSpace=p-i-
26 | c.height()},_getPosition:function(b){var c=a.current,e=a.getViewport(),f=c.margin,d=a.wrap.width()+f[1]+f[3],i=a.wrap.height()+f[0]+f[2],h={position:"absolute",top:f[0]+e.y,left:f[3]+e.x};c.autoCenter&&c.fixed&&!b&&i<=e.h&&d<=e.w&&(h={position:"fixed",top:f[0],left:f[3]});h.top=n(Math.max(h.top,h.top+(e.h-i)*c.topRatio));h.left=n(Math.max(h.left,h.left+0.5*(e.w-d)));return h},_afterZoomIn:function(){var b=a.current,c=b?b.scrolling:"no";if(b&&(a.isOpen=a.isOpened=!0,a.wrap.addClass("fancybox-opened"),
27 | a.inner.css("overflow","yes"===c?"scroll":"no"===c?"hidden":c),a.trigger("afterShow"),a.update(),(b.closeClick||b.nextClick)&&a.inner.css("cursor","pointer").bind("click.fb",function(c){if(!d(c.target).is("a")&&!d(c.target).parent().is("a"))a[b.closeClick?"close":"next"]()}),b.closeBtn&&d(b.tpl.closeBtn).appendTo(a.skin).bind("click.fb",a.close),b.arrows&&1c.end&&(g=1-g),d-=a.innerSpace*g),a.inner[e](d)},zoomIn:function(){var b=a.wrap,c=a.current,e=c.openEffect,f="elastic"===e,g=d.extend({},c.dim,
30 | a._getPosition(f)),i=d.extend({opacity:1},g);delete i.position;f?(g=this.getOrigPosition(),c.openOpacity&&(g.opacity=0),a.outer.add(a.inner).width("auto").height("auto")):"fade"===e&&(g.opacity=0);b.css(g).show().animate(i,{duration:"none"===e?0:c.openSpeed,easing:c.openEasing,step:f?this.step:null,complete:a._afterZoomIn})},zoomOut:function(){var b=a.wrap,c=a.current,d=c.openEffect,f="elastic"===d,g={opacity:0};f&&("fixed"===b.css("position")&&b.css(a._getPosition(!0)),g=this.getOrigPosition(),c.closeOpacity&&
31 | (g.opacity=0));b.animate(g,{duration:"none"===d?0:c.closeSpeed,easing:c.closeEasing,step:f?this.step:null,complete:a._afterZoomOut})},changeIn:function(){var b=a.wrap,c=a.current,d=c.nextEffect,f="elastic"===d,g=a._getPosition(f),i={opacity:1};g.opacity=0;f&&(g.top=n(parseInt(g.top,10)-200),i.top="+=200px");b.css(g).show().animate(i,{duration:"none"===d?0:c.nextSpeed,easing:c.nextEasing,complete:a._afterZoomIn})},changeOut:function(){var b=a.wrap,c=a.current,e=c.prevEffect,f={opacity:0};b.removeClass("fancybox-opened");
32 | "elastic"===e&&(f.top="+=200px");b.animate(f,{duration:"none"===e?0:c.prevSpeed,easing:c.prevEasing,complete:function(){d(this).trigger("onReset").remove()}})}};a.helpers.overlay={overlay:null,update:function(){var a,c;this.overlay.width("100%").height("100%");d.browser.msie||k?(a=Math.max(l.documentElement.scrollWidth,l.body.scrollWidth),c=Math.max(l.documentElement.offsetWidth,l.body.offsetWidth),a=a ').css(b.css).appendTo("body"),b.closeClick&&this.overlay.bind("click.fb",a.close),a.current.fixed&&!k?this.overlay.addClass("overlay-fixed"):(this.update(),this.onUpdate=function(){this.update()}),this.overlay.fadeTo(b.speedIn,b.opacity))},afterClose:function(a){this.overlay&&this.overlay.fadeOut(a.speedOut||0,function(){d(this).remove()});this.overlay=null}};a.helpers.title={beforeShow:function(b){var c;
34 | if(c=a.current.title)c=d(''+c+"
").appendTo("body"),"float"===b.type&&(c.width(c.width()),c.wrapInner(''),a.current.margin[2]+=Math.abs(parseInt(c.css("margin-bottom"),10))),c.appendTo("over"===b.type?a.inner:"outside"===b.type?a.wrap:a.skin)}};d.fn.fancybox=function(b){var c=d(this),e=this.selector||"",f,g=function(g){var h=this,j=f,k;!g.ctrlKey&&!g.altKey&&!g.shiftKey&&!g.metaKey&&!d(h).is(".fancybox-wrap")&&
35 | (g.preventDefault(),g=b.groupAttr||"data-fancybox-group",k=d(h).attr(g),k||(g="rel",k=h[g]),k&&""!==k&&"nofollow"!==k&&(h=e.length?d(e):c,h=h.filter("["+g+'="'+k+'"]'),j=h.index(this)),b.index=j,a.open(h,b))},b=b||{};f=b.index||0;e?q.undelegate(e,"click.fb-start").delegate(e,"click.fb-start",g):c.unbind("click.fb-start").bind("click.fb-start",g);return this};d(l).ready(function(){a.defaults.fixed=d.support.fixedPosition||!(d.browser.msie&&6>=d.browser.version)&&!k})})(window,document,jQuery);
--------------------------------------------------------------------------------
/website/js/main.js:
--------------------------------------------------------------------------------
1 | var sigInst, canvas, $GP
2 |
3 | //Load configuration file
4 | var config={};
5 |
6 | //For debug allow a config=file.json parameter to specify the config
7 | function GetQueryStringParams(sParam,defaultVal) {
8 | var sPageURL = ""+window.location;//.search.substring(1);//This might be causing error in Safari?
9 | if (sPageURL.indexOf("?")==-1) return defaultVal;
10 | sPageURL=sPageURL.substr(sPageURL.indexOf("?")+1);
11 | var sURLVariables = sPageURL.split('&');
12 | for (var i = 0; i < sURLVariables.length; i++) {
13 | var sParameterName = sURLVariables[i].split('=');
14 | if (sParameterName[0] == sParam) {
15 | return sParameterName[1];
16 | }
17 | }
18 | return defaultVal;
19 | }
20 |
21 |
22 | jQuery.getJSON(GetQueryStringParams("config","config.json"), function(data, textStatus, jqXHR) {
23 | config=data;
24 |
25 | if (config.type!="network") {
26 | //bad config
27 | alert("Invalid configuration settings.")
28 | return;
29 | }
30 |
31 | //As soon as page is ready (and data ready) set up it
32 | $(document).ready(setupGUI(config));
33 | });//End JSON Config load
34 |
35 |
36 | // FUNCTION DECLARATIONS
37 |
38 | Object.size = function(obj) {
39 | var size = 0, key;
40 | for (key in obj) {
41 | if (obj.hasOwnProperty(key)) size++;
42 | }
43 | return size;
44 | };
45 |
46 | function initSigma(config) {
47 | var data=config.data
48 |
49 | var drawProps, graphProps,mouseProps;
50 | drawProps={
51 | defaultLabelColor: "#fff",
52 | defaultLabelSize: 14,
53 | defaultLabelBGColor: "#ddd",
54 | defaultHoverLabelBGColor: "#002147",
55 | defaultLabelHoverColor: "#fff",
56 | labelThreshold: 7,
57 | defaultEdgeType: "straight",
58 | hoverFontStyle: "bold",
59 | fontStyle: "bold",
60 | activeFontStyle: "bold"
61 | };
62 |
63 | graphProps={
64 | minNodeSize: 1,
65 | maxNodeSize: 7,
66 | minEdgeSize: 2.0,
67 | maxEdgeSize: 2.0
68 | };
69 |
70 | if (config.sigma && config.sigma.mouseProperties)
71 | mouseProps=config.sigma.mouseProperties;
72 | else
73 | mouseProps={
74 | minRatio: 0.75, // How far can we zoom out?
75 | maxRatio: 20, // How far can we zoom in?
76 | };
77 |
78 | var a = sigma.init(document.getElementById("sigma-canvas")).drawingProperties(drawProps).graphProperties(graphProps).mouseProperties(mouseProps);
79 | sigInst = a;
80 | a.active = !1;
81 | a.neighbors = {};
82 | a.detail = !1;
83 |
84 |
85 | dataReady = function() {//This is called as soon as data is loaded
86 | a.clusters = {};
87 | a.color_family = {};
88 |
89 | a.iterNodes(
90 | function (b) { //This is where we populate the array used for the group select box
91 |
92 | // note: index may not be consistent for all nodes. Should calculate each time.
93 | // alert(JSON.stringify(b.attr.attributes[5].val));
94 | // alert(b.x);
95 | a.clusters[b.attr.attributes['type']] || (a.clusters[b.attr.attributes['type']] = []);
96 | a.clusters[b.attr.attributes['type']].push(b.id);//SAH: push id not label
97 | a.color_family[b.attr.attributes['type']] = b.color;
98 | }
99 | );
100 |
101 | a.bind("upnodes", function (a) {
102 | nodeActive(a.content[0])
103 | });
104 |
105 | a.draw();
106 | configSigmaElements(config);
107 | }
108 |
109 | if (data.indexOf("gexf")>0 || data.indexOf("xml")>0)
110 | a.parseGexf(data,dataReady);
111 | else
112 | a.parseJson(data,dataReady);
113 | gexf = sigmaInst = null;
114 | }
115 |
116 |
117 | function setupGUI(config) {
118 | // Initialise main interface elements
119 | var logo=""; // Logo elements
120 | if (config.logo.file) {
121 |
122 | logo = "
";
125 | } else if (config.logo.text) {
126 | logo=""+config.logo.text+"
";
127 | }
128 | if (config.logo.link) logo=""+logo+"";
129 | $("#maintitle").html(logo);
130 |
131 | // #title
132 | $("#title").html(""+config.text.title+"
");
133 |
134 | // #titletext
135 | $("#titletext").html(config.text.intro);
136 |
137 | // More information
138 | if (config.text.more) {
139 | $("#information").html(config.text.more);
140 | } else {
141 | //hide more information link
142 | $("#moreinformation").hide();
143 | }
144 |
145 | // Legend
146 |
147 | // Node
148 | if (config.legend.nodeLabel) {
149 | $(".node").next().html(config.legend.nodeLabel);
150 | } else {
151 | //hide more information link
152 | $(".node").hide();
153 | }
154 | // Edge
155 | if (config.legend.edgeLabel) {
156 | $(".edge").next().html(config.legend.edgeLabel);
157 | } else {
158 | //hide more information link
159 | $(".edge").hide();
160 | }
161 | // Colours
162 | if (config.legend.nodeLabel) {
163 | $(".colours").next().html(config.legend.colorLabel);
164 | } else {
165 | //hide more information link
166 | $(".colours").hide();
167 | }
168 |
169 | $GP = {
170 | calculating: !1,
171 | showgroup: !1
172 | };
173 | $GP.intro = $("#intro");
174 | $GP.minifier = $GP.intro.find("#minifier");
175 | $GP.mini = $("#minify");
176 | $GP.info = $("#attributepane");
177 | $GP.info_donnees = $GP.info.find(".nodeattributes");
178 | $GP.info_name = $GP.info.find(".name");
179 | $GP.info_link = $GP.info.find(".link");
180 | $GP.info_data = $GP.info.find(".data");
181 | $GP.info_close = $GP.info.find(".returntext");
182 | $GP.info_close2 = $GP.info.find(".close");
183 | $GP.info_p = $GP.info.find(".p");
184 | $GP.info_close.click(nodeNormal);
185 | $GP.info_close2.click(nodeNormal);
186 | $GP.form = $("#mainpanel").find("form");
187 | $GP.search = new Search($GP.form.find("#search"));
188 | if (!config.features.search) {
189 | $("#search").hide();
190 | }
191 | if (!config.features.groupSelectorAttribute) {
192 | $("#attributeselect").hide();
193 | }
194 | $GP.cluster = new Cluster($GP.form.find("#attributeselect"));
195 | config.GP=$GP;
196 | initSigma(config);
197 | }
198 |
199 | function configSigmaElements(config) {
200 | $GP=config.GP;
201 |
202 | // Node hover behaviour
203 | if (config.features.hoverBehavior == "dim") {
204 |
205 | var greyColor = '#ccc';
206 | sigInst.bind('overnodes',function(event){
207 | var nodes = event.content;
208 | var neighbors = {};
209 | sigInst.iterEdges(function(e){
210 | if(nodes.indexOf(e.source)<0 && nodes.indexOf(e.target)<0){
211 | if(!e.attr['grey']){
212 | e.attr['true_color'] = e.color;
213 | e.color = greyColor;
214 | e.attr['grey'] = 1;
215 | }
216 | }else{
217 | e.color = e.attr['grey'] ? e.attr['true_color'] : e.color;
218 | e.attr['grey'] = 0;
219 |
220 | neighbors[e.source] = 1;
221 | neighbors[e.target] = 1;
222 | }
223 | }).iterNodes(function(n){
224 | if(!neighbors[n.id]){
225 | if(!n.attr['grey']){
226 | n.attr['true_color'] = n.color;
227 | n.color = greyColor;
228 | n.attr['grey'] = 1;
229 | }
230 | }else{
231 | n.color = n.attr['grey'] ? n.attr['true_color'] : n.color;
232 | n.attr['grey'] = 0;
233 | }
234 | }).draw(2,2,2);
235 | }).bind('outnodes',function(){
236 | sigInst.iterEdges(function(e){
237 | e.color = e.attr['grey'] ? e.attr['true_color'] : e.color;
238 | e.attr['grey'] = 0;
239 | }).iterNodes(function(n){
240 | n.color = n.attr['grey'] ? n.attr['true_color'] : n.color;
241 | n.attr['grey'] = 0;
242 | }).draw(2,2,2);
243 | });
244 |
245 | } else if (config.features.hoverBehavior == "hide") {
246 |
247 | sigInst.bind('overnodes',function(event){
248 | var nodes = event.content;
249 | var neighbors = {};
250 | sigInst.iterEdges(function(e){
251 | if(nodes.indexOf(e.source)>=0 || nodes.indexOf(e.target)>=0){
252 | neighbors[e.source] = 1;
253 | neighbors[e.target] = 1;
254 | }
255 | }).iterNodes(function(n){
256 | if(!neighbors[n.id]){
257 | n.hidden = 1;
258 | }else{
259 | n.hidden = 0;
260 | }
261 | }).draw(2,2,2);
262 | }).bind('outnodes',function(){
263 | sigInst.iterEdges(function(e){
264 | e.hidden = 0;
265 | }).iterNodes(function(n){
266 | n.hidden = 0;
267 | }).draw(2,2,2);
268 | });
269 |
270 | }
271 | $GP.bg = $(sigInst._core.domElements.bg);
272 | $GP.bg2 = $(sigInst._core.domElements.bg2);
273 | var a = [],
274 | b,x=1;
275 | for (b in sigInst.clusters) a.push('');
276 | //a.sort();
277 | $GP.cluster.content(a.join(""));
278 | b = {
279 | minWidth: 400,
280 | maxWidth: 800,
281 | maxHeight: 600
282 | };// minHeight: 300,
283 | $("a.fb").fancybox(b);
284 | $("#zoom").find("div.z").each(function () {
285 | var a = $(this),
286 | b = a.attr("rel");
287 | a.click(function () {
288 | if (b == "center") {
289 | sigInst.position(0,0,1).draw();
290 | } else {
291 | var a = sigInst._core;
292 | sigInst.zoomTo(a.domElements.nodes.width / 2, a.domElements.nodes.height / 2, a.mousecaptor.ratio * ("in" == b ? 1.5 : 0.5));
293 | }
294 |
295 | })
296 | });
297 | $GP.mini.click(function () {
298 | $GP.mini.hide();
299 | $GP.intro.show();
300 | $GP.minifier.show()
301 | });
302 | $GP.minifier.click(function () {
303 | $GP.intro.hide();
304 | $GP.minifier.hide();
305 | $GP.mini.show()
306 | });
307 | $GP.intro.find("#showGroups").click(function () {
308 | !0 == $GP.showgroup ? showGroups(!1) : showGroups(!0)
309 | });
310 | a = window.location.hash.substr(1);
311 | if (0 < a.length) switch (a) {
312 | case "Groups":
313 | showGroups(!0);
314 | break;
315 | case "information":
316 | $.fancybox.open($("#information"), b);
317 | break;
318 | default:
319 | $GP.search.exactMatch = !0, $GP.search.search(a)
320 | $GP.search.clean();
321 | }
322 |
323 | }
324 |
325 | function Search(a) {
326 |
327 |
328 | this.input = a.find("input[name=search]");
329 | this.state = a.find(".state");
330 | this.results = a.find(".results");
331 | this.exactMatch = !1;
332 | this.lastSearch = "";
333 | this.searching = !1;
334 | var b = this;
335 | this.input.focus(function () {
336 | var a = $(this);
337 | a.data("focus") || (a.data("focus", !0), a.removeClass("empty"));
338 | b.clean()
339 | });
340 | this.input.keydown(function (a) {
341 | if (13 == a.which) return b.state.addClass("searching"), b.search(b.input.val()), !1
342 | });
343 | this.state.click(function () {
344 | var a = b.input.val();
345 | b.searching && a == b.lastSearch ? b.close() : (b.state.addClass("searching"), b.search(a))
346 | });
347 | this.dom = a;
348 | this.close = function () {
349 | this.state.removeClass("searching");
350 | this.results.hide();
351 | this.searching = !1;
352 | this.input.val("");//SAH -- let's erase string when we close
353 | nodeNormal()
354 | };
355 | this.clean = function () {
356 | this.results.empty().hide();
357 | this.state.removeClass("searching");
358 | this.input.val("");
359 | };
360 | this.search = function (a) {
361 | var b = !1,
362 | c = [],
363 | //b = this.exactMatch ? ("^" + a + "$").toLowerCase() : a.toLowerCase(),
364 | b = this.exactMatch ? ("^" + a + "$").toLowerCase() : ("^" + a).toLowerCase(),
365 | g = RegExp(b);
366 | this.exactMatch = !1;
367 | this.searching = !0;
368 | this.lastSearch = a;
369 | this.results.empty();
370 | if (1 >= a.length) this.results.html("You must search for a name with a minimum of 2 letters.");
371 | else {
372 | console.log(g);
373 | sigInst.iterNodes(function (a) {
374 | g.test(a.label.toLowerCase()) && c.push({
375 | id: a.id,
376 | name: a.label
377 | })
378 | });
379 | c.length ? (b = !0, nodeActive(c[0].id)) : b = showCluster(a);
380 | a = ["Search Results: "];
381 | if (1 < c.length) for (var d = 0, h = c.length; d < h; d++) a.push('" + c[d].name + "");
382 | 0 == c.length && !b && a.push("No results found.");
383 | 1 < a.length && this.results.html(a.join(""));
384 | }
385 | if(c.length!=1) this.results.show();
386 | if(c.length==1) this.results.hide();
387 | }
388 | }
389 |
390 | function Cluster(a) {
391 | this.cluster = a;
392 | this.display = !1;
393 | this.list = this.cluster.find(".list");
394 | this.list.empty();
395 | this.select = this.cluster.find(".select");
396 | this.select.click(function () {
397 | $GP.cluster.toggle()
398 | });
399 | this.toggle = function () {
400 | this.display ? this.hide() : this.show()
401 | };
402 | this.content = function (a) {
403 | this.list.html(a);
404 | this.list.find("a").click(function () {
405 | var a = $(this).attr("href").substr(1);
406 | showCluster(a)
407 | })
408 | };
409 | this.hide = function () {
410 | this.display = !1;
411 | this.list.hide();
412 | this.select.removeClass("close")
413 | };
414 | this.show = function () {
415 | this.display = !0;
416 | this.list.show();
417 | this.select.addClass("close")
418 | }
419 | }
420 | function showGroups(a) {
421 | a ? ($GP.intro.find("#showGroups").text("Hide groups"), $GP.bg.show(), $GP.bg2.hide(), $GP.showgroup = !0) : ($GP.intro.find("#showGroups").text("View Groups"), $GP.bg.hide(), $GP.bg2.show(), $GP.showgroup = !1)
422 | }
423 |
424 | function nodeNormal() {
425 | !0 != $GP.calculating && !1 != sigInst.detail && (showGroups(!1), $GP.calculating = !0, sigInst.detail = !0, $GP.info.delay(400).animate({width:'hide'},350),$GP.cluster.hide(), sigInst.iterEdges(function (a) {
426 | a.attr.color = !1;
427 | a.hidden = !1
428 | }), sigInst.iterNodes(function (a) {
429 | a.hidden = !1;
430 | a.attr.color = !1;
431 | a.attr.lineWidth = !1;
432 | a.attr.size = !1
433 | }), sigInst.draw(2, 2, 2, 2), sigInst.neighbors = {}, sigInst.active = !1, $GP.calculating = !1, window.location.hash = "")
434 | }
435 |
436 | function nodeActive(a) {
437 |
438 | var groupByDirection=false;
439 | if (config.informationPanel.groupByEdgeDirection && config.informationPanel.groupByEdgeDirection==true) groupByDirection=true;
440 |
441 | sigInst.neighbors = {};
442 | sigInst.detail = !0;
443 | var b = sigInst._core.graph.nodesIndex[a];
444 | showGroups(!1);
445 | var outgoing={},incoming={},mutual={};//SAH
446 | sigInst.iterEdges(function (b) {
447 | b.attr.lineWidth = !1;
448 | b.hidden = !0;
449 |
450 | n={
451 | name: b.label,
452 | colour: b.color
453 | };
454 |
455 | if (a==b.source) outgoing[b.target]=n; //SAH
456 | else if (a==b.target) incoming[b.source]=n; //SAH
457 | if (a == b.source || a == b.target) sigInst.neighbors[a == b.target ? b.source : b.target] = n;
458 | b.hidden = !1, b.attr.color = "rgba(0, 0, 0, 1)";
459 | });
460 | var f = [];
461 | sigInst.iterNodes(function (a) {
462 | a.hidden = !0;
463 | a.attr.lineWidth = !1;
464 | a.attr.color = a.color
465 | });
466 |
467 | if (groupByDirection) {
468 | //SAH - Compute intersection for mutual and remove these from incoming/outgoing
469 | for (e in outgoing) {
470 | //name=outgoing[e];
471 | if (e in incoming) {
472 | mutual[e]=outgoing[e];
473 | delete incoming[e];
474 | delete outgoing[e];
475 | }
476 | }
477 | }
478 |
479 | var createList=function(c) {
480 | var f = [];
481 | var e = [],
482 | //c = sigInst.neighbors,
483 | g;
484 | for (g in c) {
485 | var d = sigInst._core.graph.nodesIndex[g];
486 | d.hidden = !1;
487 | d.attr.lineWidth = !1;
488 | d.attr.color = c[g].colour;
489 | a != g && e.push({
490 | id: g,
491 | name: d.label,
492 | group: (c[g].name)? c[g].name:"",
493 | colour: c[g].colour
494 | })
495 | }
496 | e.sort(function (a, b) {
497 | var c = a.group.toLowerCase(),
498 | d = b.group.toLowerCase(),
499 | e = a.name.toLowerCase(),
500 | f = b.name.toLowerCase();
501 | return c != d ? c < d ? -1 : c > d ? 1 : 0 : e < f ? -1 : e > f ? 1 : 0
502 | });
503 | d = "";
504 | for (g in e) {
505 | c = e[g];
506 | /*if (c.group != d) {
507 | d = c.group;
508 | f.push('' + d + "
");
509 | }*/
510 | f.push('' + c.name + "");
511 | }
512 | return f;
513 | }
514 |
515 | /*console.log("mutual:");
516 | console.log(mutual);
517 | console.log("incoming:");
518 | console.log(incoming);
519 | console.log("outgoing:");
520 | console.log(outgoing);*/
521 |
522 |
523 | var f=[];
524 |
525 | //console.log("neighbors:");
526 | //console.log(sigInst.neighbors);
527 |
528 | if (groupByDirection) {
529 | size=Object.size(mutual);
530 | f.push("Mututal (" + size + ")
");
531 | (size>0)? f=f.concat(createList(mutual)) : f.push("No mutual links
");
532 | size=Object.size(incoming);
533 | f.push("Incoming (" + size + ")
");
534 | (size>0)? f=f.concat(createList(incoming)) : f.push("No incoming links
");
535 | size=Object.size(outgoing);
536 | f.push("Outgoing (" + size + ")
");
537 | (size>0)? f=f.concat(createList(outgoing)) : f.push("No outgoing links
");
538 | } else {
539 | f=f.concat(createList(sigInst.neighbors));
540 | }
541 | //b is object of active node -- SAH
542 | b.hidden = !1;
543 | b.attr.color = b.color;
544 | b.attr.lineWidth = 6;
545 | b.attr.strokeStyle = "#000000";
546 | sigInst.draw(2, 2, 2, 2);
547 |
548 | $GP.info_link.find("ul").html(f.join(""));
549 | $GP.info_link.find("li").each(function () {
550 | var a = $(this),
551 | b = a.attr("rel");
552 | });
553 | f = b.attr;
554 | if (f.attributes) {
555 | var image_attribute = false;
556 | if (config.informationPanel.imageAttribute) {
557 | image_attribute=config.informationPanel.imageAttribute;
558 | }
559 | e = [];
560 | temp_array = [];
561 | g = 0;
562 | for (var attr in f.attributes) {
563 | var d = f.attributes[attr],
564 | h = "";
565 | if (attr!=image_attribute) {
566 | if (attr=='Intezer Analyze Report')
567 | {
568 | h = 'Intezer Analyze Report: View
';
569 | e.push(h)
570 | }
571 | else
572 | {
573 | if (attr != 'Architecture' && attr != 'Gene Count')
574 | {
575 | h = '' + attr + ': ' + d + '
';
576 | e.push(h)
577 | }
578 | }
579 | }
580 | //temp_array.push(f.attributes[g].attr);
581 | }
582 |
583 | if (image_attribute) {
584 | //image_index = jQuery.inArray(image_attribute, temp_array);
585 | $GP.info_name.html("
' + b.label + " ");
586 | } else {
587 | $GP.info_name.html("' + b.label + "
");
588 | }
589 | // Image field for attribute pane
590 | $GP.info_data.html(e.join("
"))
591 | }
592 | $GP.info_data.show();
593 | $GP.info_p.html("Connections:");
594 | $GP.info.animate({width:'show'},350);
595 | $GP.info_donnees.hide();
596 | $GP.info_donnees.show();
597 | sigInst.active = a;
598 | window.location.hash = b.label;
599 | }
600 |
601 | function showCluster(a) {
602 | var temp = sigInst.clusters[a];
603 | var b = temp.concat(sigInst.clusters['Library']);
604 | if (b && 0 < b.length) {
605 | showGroups(!1);
606 | sigInst.detail = !0;
607 | b.sort();
608 | sigInst.iterEdges(function (a) {
609 | a.hidden = !1;
610 | a.attr.lineWidth = !1;
611 | a.attr.color = !1
612 | });
613 | sigInst.iterNodes(function (a) {
614 | a.hidden = !0
615 | });
616 | for (var f = [], e = [], c = 0, g = b.length; c < g; c++) {
617 | var d = sigInst._core.graph.nodesIndex[b[c]];
618 | !0 == d.hidden && (e.push(b[c]), d.hidden = !1, d.attr.lineWidth = !1, d.attr.color = d.color, f.push('' + d.label + ""))
619 | }
620 | sigInst.clusters[a] = e;
621 | sigInst.draw(2, 2, 2, 2);
622 | $GP.info_name.html("" + a + "");
623 | $GP.info_data.hide();
624 | $GP.info_p.html("Group Members:");
625 | $GP.info_link.find("ul").html(f.join(""));
626 | $GP.info.animate({width:'show'},350);
627 | $GP.search.clean();
628 | $GP.cluster.hide();
629 | return !0
630 | }
631 | return !1
632 | }
633 |
634 |
635 |
--------------------------------------------------------------------------------
/website/js/sigma/_sigma.min.js:
--------------------------------------------------------------------------------
1 | /* sigmajs.org - an open-source light-weight JavaScript graph drawing library - Version: 0.1 - Author: Alexis Jacomy - License: MIT */
2 | var sigma={tools:{},classes:{},instances:{}};
3 | (function(){Array.prototype.some||(Array.prototype.some=function(g,i){var k=this.length;if("function"!=typeof g)throw new TypeError;for(var m=0;mGLOBAL :";for(var b in c.p.globalProbes)a+=""+b+" : "+c.p.globalProbes[b]()+
21 | "
";a+="
LOCAL :
";for(b in c.p.localProbes)a+=""+b+" : "+c.p.localProbes[b]()+"
";c.p.dom.innerHTML=a;return c}sigma.classes.Cascade.call(this);var c=this;this.instance=b;this.monitoring=!1;this.p={fps:40,dom:j,globalProbes:{"Time (ms)":sigma.chronos.getExecutionTime,Queue:sigma.chronos.getQueuedTasksCount,Tasks:sigma.chronos.getTasksCount,FPS:sigma.chronos.getFPS},localProbes:{"Nodes count":function(){return c.instance.graph.nodes.length},"Edges count":function(){return c.instance.graph.edges.length}}};
22 | this.activate=function(){c.monitoring||(c.monitoring=window.setInterval(f,1E3/c.p.fps));return c};this.desactivate=function(){c.monitoring&&(window.clearInterval(c.monitoring),c.monitoring=null,c.p.dom.innerHTML="");return c}}function g(b){var j=b.changedTouches[0],f="";switch(b.type){case "touchstart":f="mousedown";break;case "touchmove":f="mousemove";break;case "touchend":f="mouseup";break;default:return}var c=document.createEvent("MouseEvent");c.initMouseEvent(f,!0,!0,window,1,j.posX,j.posY,j.clientX,
23 | j.clientY,!1,!1,!1,!1,0,null);j.target.dispatchEvent(c);b.preventDefault()}function p(b){function j(b){a.p.mouseEnabled&&(f(a.mouseX,a.mouseY,a.ratio*(0<(void 0!=b.wheelDelta&&b.wheelDelta||void 0!=b.detail&&-b.detail)?a.p.zoomMultiply:1/a.p.zoomMultiply)),a.p.blockScroll&&(b.preventDefault?b.preventDefault():b.returnValue=!1))}function f(b,d,f){if(!a.isMouseDown&&(window.clearInterval(a.interpolationID),m=void 0!=f,w=a.stageX,n=b,o=a.stageY,l=d,h=f||a.ratio,h=Math.min(Math.max(h,a.p.minRatio),a.p.maxRatio),
24 | u=a.p.directZooming?1-(m?a.p.zoomDelta:a.p.dragDelta):0,a.ratio!=h||a.stageX!=n||a.stageY!=l))c(),a.interpolationID=window.setInterval(c,50),a.dispatch("startinterpolate")}function c(){u+=m?a.p.zoomDelta:a.p.dragDelta;u=Math.min(u,1);var b=sigma.easing.quadratic.easeout(u),c=a.ratio;a.ratio=c*(1-b)+h*b;m?(a.stageX=n+(a.stageX-n)*a.ratio/c,a.stageY=l+(a.stageY-l)*a.ratio/c):(a.stageX=w*(1-b)+n*b,a.stageY=o*(1-b)+l*b);a.dispatch("interpolate");1<=u&&(window.clearInterval(a.interpolationID),b=a.ratio,
25 | m?(a.ratio=h,a.stageX=n+(a.stageX-n)*a.ratio/b,a.stageY=l+(a.stageY-l)*a.ratio/b):(a.stageX=n,a.stageY=l),a.dispatch("stopinterpolate"))}sigma.classes.Cascade.call(this);sigma.classes.EventDispatcher.call(this);var a=this;this.p={minRatio:1,maxRatio:32,marginRatio:1,zoomDelta:0.1,dragDelta:0.3,zoomMultiply:2,directZooming:!1,blockScroll:!0,inertia:1.1,mouseEnabled:!0,touchEnabled:!0};var i=0,d=0,w=0,o=0,h=1,n=0,l=0,s=0,t=0,A=0,k=0,u=0,m=!1;this.stageY=this.stageX=0;this.ratio=1;this.mouseY=this.mouseX=
26 | 0;this.isTouchDown=this.isMouseDown=!1;b.addEventListener("DOMMouseScroll",j,!0);b.addEventListener("mousewheel",j,!0);b.addEventListener("mousemove",function(b){a.mouseX=void 0!=b.offsetX&&b.offsetX||void 0!=b.layerX&&b.layerX||void 0!=b.clientX&&b.clientX;a.mouseY=void 0!=b.offsetY&&b.offsetY||void 0!=b.layerY&&b.layerY||void 0!=b.clientY&&b.clientY;if(a.isMouseDown){var c=a.mouseX-i+w,h=a.mouseY-d+o;if(c!=a.stageX||h!=a.stageY)t=s,k=A,s=c,A=h,a.stageX=c,a.stageY=h,a.dispatch("drag")}a.dispatch("move");
27 | b.preventDefault?b.preventDefault():b.returnValue=!1},!0);b.addEventListener("mousedown",function(b){a.p.mouseEnabled&&(a.isMouseDown=!0,a.dispatch("mousedown"),w=a.stageX,o=a.stageY,i=a.mouseX,d=a.mouseY,t=s=a.stageX,k=A=a.stageY,a.dispatch("startdrag"),b.preventDefault?b.preventDefault():b.returnValue=!1)},!0);document.addEventListener("mouseup",function(b){a.p.mouseEnabled&&a.isMouseDown&&(a.isMouseDown=!1,a.dispatch("mouseup"),(w!=a.stageX||o!=a.stageY)&&f(a.stageX+a.p.inertia*(a.stageX-t),a.stageY+
28 | a.p.inertia*(a.stageY-k)),b.preventDefault?b.preventDefault():b.returnValue=!1)},!0);b.addEventListener("touchstart",g,!0);b.addEventListener("touchmove",g,!0);document.addEventListener("touchend",g,!0);b.addEventListener("touchcancel",g,!0);this.checkBorders=function(){return a};this.interpolate=f}function z(b,j,f,c,a,g,d){function i(a){var b=c,d="fixed"==h.p.labelSize?h.p.defaultLabelSize:h.p.labelSizeRatio*a.displaySize;b.font=(h.p.hoverFontStyle||h.p.fontStyle||"")+" "+d+"px "+(h.p.hoverFont||
29 | h.p.font||"");b.fillStyle="node"==h.p.labelHoverBGColor?a.color||h.p.defaultNodeColor:h.p.defaultHoverLabelBGColor;b.beginPath();h.p.labelHoverShadow&&(b.shadowOffsetX=0,b.shadowOffsetY=0,b.shadowBlur=4,b.shadowColor=h.p.labelHoverShadowColor);sigma.tools.drawRoundRect(b,Math.round(a.displayX-d/2-2),Math.round(a.displayY-d/2-2),Math.round(b.measureText(a.label).width+1.5*a.displaySize+d/2+4),Math.round(d+4),Math.round(d/2+2),"left");b.closePath();b.fill();b.shadowOffsetX=0;b.shadowOffsetY=0;b.shadowBlur=
30 | 0;b.beginPath();b.fillStyle="node"==h.p.nodeBorderColor?a.color||h.p.defaultNodeColor:h.p.defaultNodeBorderColor;b.arc(Math.round(a.displayX),Math.round(a.displayY),a.displaySize+h.p.borderSize,0,2*Math.PI,!0);b.closePath();b.fill();b.beginPath();b.fillStyle="node"==h.p.nodeHoverColor?a.color||h.p.defaultNodeColor:h.p.defaultNodeHoverColor;b.arc(Math.round(a.displayX),Math.round(a.displayY),a.displaySize,0,2*Math.PI,!0);b.closePath();b.fill();b.fillStyle="node"==h.p.labelHoverColor?a.color||h.p.defaultNodeColor:
31 | h.p.defaultLabelHoverColor;b.fillText(a.label,Math.round(a.displayX+1.5*a.displaySize),Math.round(a.displayY+d/2-3));return h}function o(a){if(isNaN(a.x)||isNaN(a.y))throw Error("A node's coordinate is not a number (id: "+a.id+")");return!a.hidden&&a.displayX+a.displaySize>-n/3&&a.displayX-a.displaySize<4*n/3&&a.displayY+a.displaySize>-l/3&&a.displayY-a.displaySize<4*l/3}sigma.classes.Cascade.call(this);var h=this;this.p={labelColor:"default",defaultLabelColor:"#000",labelHoverBGColor:"default",defaultHoverLabelBGColor:"#fff",
32 | labelHoverShadow:!0,labelHoverShadowColor:"#000",labelHoverColor:"default",defaultLabelHoverColor:"#000",labelActiveBGColor:"default",defaultActiveLabelBGColor:"#fff",labelActiveShadow:!0,labelActiveShadowColor:"#000",labelActiveColor:"default",defaultLabelActiveColor:"#000",labelSize:"fixed",defaultLabelSize:12,labelSizeRatio:2,labelThreshold:6,font:"Arial",hoverFont:"",activeFont:"",fontStyle:"",hoverFontStyle:"",activeFontStyle:"",edgeColor:"source",defaultEdgeColor:"#aaa",defaultEdgeType:"line",
33 | defaultNodeColor:"#aaa",nodeHoverColor:"node",defaultNodeHoverColor:"#fff",nodeActiveColor:"node",defaultNodeActiveColor:"#fff",borderSize:0,nodeBorderColor:"node",defaultNodeBorderColor:"#fff",edgesSpeed:200,nodesSpeed:200,labelsSpeed:200};var n=g,l=d;this.currentLabelIndex=this.currentNodeIndex=this.currentEdgeIndex=0;this.task_drawLabel=function(){for(var b=a.nodes.length,c=0;c++=h.p.labelThreshold||d.forceLabel){var g="fixed"==h.p.labelSize?h.p.defaultLabelSize:h.p.labelSizeRatio*d.displaySize;j.font=h.p.fontStyle+g+"px "+h.p.font;j.fillStyle="node"==h.p.labelColor?d.color||h.p.defaultNodeColor:h.p.defaultLabelColor;j.fillText(d.label,Math.round(d.displayX+1.5*d.displaySize),Math.round(d.displayY+g/2-3))}}else h.currentLabelIndex++;return h.currentLabelIndex(b*=2)?0.5*b*b:-0.5*(--b*(b-2)-1)};sigma.tools.drawRoundRect=function(b,g,f,c,a,i,d){var i=i?i:0,k=d?d:[],k="string"==typeof k?k.split(" "):k,d=i&&(0<=k.indexOf("topleft")||0<=k.indexOf("top")||0<=k.indexOf("left")),m=i&&(0<=k.indexOf("topright")||
62 | 0<=k.indexOf("top")||0<=k.indexOf("right")),h=i&&(0<=k.indexOf("bottomleft")||0<=k.indexOf("bottom")||0<=k.indexOf("left")),k=i&&(0<=k.indexOf("bottomright")||0<=k.indexOf("bottom")||0<=k.indexOf("right"));b.moveTo(g,f+i);d?b.arcTo(g,f,g+i,f,i):b.lineTo(g,f);m?(b.lineTo(g+c-i,f),b.arcTo(g+c,f,g+c,f+i,i)):b.lineTo(g+c,f);k?(b.lineTo(g+c,f+a-i),b.arcTo(g+c,f+a,g+c-i,f+a,i)):b.lineTo(g+c,f+a);h?(b.lineTo(g+i,f+a),b.arcTo(g,f+a,g,f+a-i,i)):b.lineTo(g,f+a);b.lineTo(g,f+i)};sigma.tools.getRGB=function(b,
63 | g){var b=b.toString(),f={r:0,g:0,b:0};if(3<=b.length&&"#"==b.charAt(0)){var c=b.length-1;6==c?f={r:parseInt(b.charAt(1)+b.charAt(2),16),g:parseInt(b.charAt(3)+b.charAt(4),16),b:parseInt(b.charAt(5)+b.charAt(5),16)}:3==c&&(f={r:parseInt(b.charAt(1)+b.charAt(1),16),g:parseInt(b.charAt(2)+b.charAt(2),16),b:parseInt(b.charAt(3)+b.charAt(3),16)})}g&&(f=[f.r,f.g,f.b]);return f};sigma.tools.rgbToHex=function(b,g,f){return sigma.tools.toHex(b)+sigma.tools.toHex(g)+sigma.tools.toHex(f)};sigma.tools.toHex=
64 | function(b){b=parseInt(b,10);if(isNaN(b))return"00";b=Math.max(0,Math.min(b,255));return"0123456789ABCDEF".charAt((b-b%16)/16)+"0123456789ABCDEF".charAt(b%16)};sigma.publicPrototype=x.prototype})();
65 |
--------------------------------------------------------------------------------
/website/js/sigma/parseGexf_fin.js:
--------------------------------------------------------------------------------
1 | // Mathieu Jacomy @ Sciences Po Médialab & WebAtlas
2 | // (requires sigma.js to be loaded)
3 | sigma.publicPrototype.parseGexf = function(gexfPath) {
4 | // Load XML file:
5 | var gexfhttp, gexf;
6 | var sigmaInstance = this;
7 | gexfhttp = window.XMLHttpRequest ?
8 | new XMLHttpRequest() :
9 | new ActiveXObject('Microsoft.XMLHTTP');
10 |
11 | gexfhttp.overrideMimeType('text/xml');
12 | gexfhttp.open('GET', gexfPath, false);
13 | gexfhttp.send();
14 | gexf = gexfhttp.responseXML;
15 |
16 | var viz='http://www.gexf.net/1.2draft/viz'; // Vis namespace
17 | var i, j, k;
18 |
19 | // Parse Attributes
20 | // This is confusing, so I'll comment heavily
21 | var nodesAttributes = []; // The list of attributes of the nodes of the graph that we build in json
22 | var nodesAttributesDict = {};
23 | var edgesAttributes = []; // The list of attributes of the edges of the graph that we build in json
24 | var edgesAttributesDict = {};
25 | var attributesNodes = gexf.getElementsByTagName('attributes'); // In the gexf (that is an xml), the list of xml nodes 'attributes' (note the plural 's')
26 |
27 | for(i = 0; i0){
86 | sizeNode = sizeNodes[0];
87 | size = parseFloat(sizeNode.getAttribute('value'));
88 | }
89 |
90 | var positionNodes = nodeNode.getElementsByTagName('position');
91 | positionNodes = positionNodes.length ?
92 | positionNodes :
93 | nodeNode.getElementsByTagNameNS('*','position');
94 | if(positionNodes.length>0){
95 | var positionNode = positionNodes[0];
96 | x = parseFloat(positionNode.getAttribute('x'));
97 | y = parseFloat(positionNode.getAttribute('y'));
98 | }
99 |
100 | var colorNodes = nodeNode.getElementsByTagName('color');
101 | colorNodes = colorNodes.length ?
102 | colorNodes :
103 | nodeNode.getElementsByTagNameNS('*','color');
104 | if(colorNodes.length>0){
105 | colorNode = colorNodes[0];
106 | color = '#'+sigma.tools.rgbToHex(parseFloat(colorNode.getAttribute('r')),
107 | parseFloat(colorNode.getAttribute('g')),
108 | parseFloat(colorNode.getAttribute('b')));
109 | }
110 |
111 | // Create Node
112 | var node = {label:label, size:size, x:x, y:y, attributes:{}, color:color}; // The graph node
113 |
114 | // Attribute values
115 | var attvalueNodes = nodeNode.getElementsByTagName('attvalue');
116 | for(k=0; kGLOBAL :";for(var b in c.p.globalProbes)a+=""+b+" : "+c.p.globalProbes[b]()+
21 | "
";a+="
LOCAL :
";for(b in c.p.localProbes)a+=""+b+" : "+c.p.localProbes[b]()+"
";c.p.dom.innerHTML=a;return c}sigma.classes.Cascade.call(this);var c=this;this.instance=b;this.monitoring=!1;this.p={fps:40,dom:j,globalProbes:{"Time (ms)":sigma.chronos.getExecutionTime,Queue:sigma.chronos.getQueuedTasksCount,Tasks:sigma.chronos.getTasksCount,FPS:sigma.chronos.getFPS},localProbes:{"Nodes count":function(){return c.instance.graph.nodes.length},"Edges count":function(){return c.instance.graph.edges.length}}};
22 | this.activate=function(){c.monitoring||(c.monitoring=window.setInterval(f,1E3/c.p.fps));return c};this.desactivate=function(){c.monitoring&&(window.clearInterval(c.monitoring),c.monitoring=null,c.p.dom.innerHTML="");return c}}function g(b){var j=b.changedTouches[0],f="";switch(b.type){case "touchstart":f="mousedown";break;case "touchmove":f="mousemove";break;case "touchend":f="mouseup";break;default:return}var c=document.createEvent("MouseEvent");c.initMouseEvent(f,!0,!0,window,1,j.posX,j.posY,j.clientX,
23 | j.clientY,!1,!1,!1,!1,0,null);j.target.dispatchEvent(c);b.preventDefault()}function p(b){function j(b){a.p.mouseEnabled&&(f(a.mouseX,a.mouseY,a.ratio*(0<(void 0!=b.wheelDelta&&b.wheelDelta||void 0!=b.detail&&-b.detail)?a.p.zoomMultiply:1/a.p.zoomMultiply)),a.p.blockScroll&&(b.preventDefault?b.preventDefault():b.returnValue=!1))}function f(b,d,f){if(!a.isMouseDown&&(window.clearInterval(a.interpolationID),m=void 0!=f,w=a.stageX,n=b,o=a.stageY,l=d,h=f||a.ratio,h=Math.min(Math.max(h,a.p.minRatio),a.p.maxRatio),
24 | u=a.p.directZooming?1-(m?a.p.zoomDelta:a.p.dragDelta):0,a.ratio!=h||a.stageX!=n||a.stageY!=l))c(),a.interpolationID=window.setInterval(c,50),a.dispatch("startinterpolate")}function c(){u+=m?a.p.zoomDelta:a.p.dragDelta;u=Math.min(u,1);var b=sigma.easing.quadratic.easeout(u),c=a.ratio;a.ratio=c*(1-b)+h*b;m?(a.stageX=n+(a.stageX-n)*a.ratio/c,a.stageY=l+(a.stageY-l)*a.ratio/c):(a.stageX=w*(1-b)+n*b,a.stageY=o*(1-b)+l*b);a.dispatch("interpolate");1<=u&&(window.clearInterval(a.interpolationID),b=a.ratio,
25 | m?(a.ratio=h,a.stageX=n+(a.stageX-n)*a.ratio/b,a.stageY=l+(a.stageY-l)*a.ratio/b):(a.stageX=n,a.stageY=l),a.dispatch("stopinterpolate"))}sigma.classes.Cascade.call(this);sigma.classes.EventDispatcher.call(this);var a=this;this.p={minRatio:1,maxRatio:32,marginRatio:1,zoomDelta:0.1,dragDelta:0.3,zoomMultiply:2,directZooming:!1,blockScroll:!0,inertia:1.1,mouseEnabled:!0,touchEnabled:!0};var i=0,d=0,w=0,o=0,h=1,n=0,l=0,s=0,t=0,A=0,k=0,u=0,m=!1;this.stageY=this.stageX=0;this.ratio=1;this.mouseY=this.mouseX=
26 | 0;this.isTouchDown=this.isMouseDown=!1;b.addEventListener("DOMMouseScroll",j,!0);b.addEventListener("mousewheel",j,!0);b.addEventListener("mousemove",function(b){a.mouseX=void 0!=b.offsetX&&b.offsetX||void 0!=b.layerX&&b.layerX||void 0!=b.clientX&&b.clientX;a.mouseY=void 0!=b.offsetY&&b.offsetY||void 0!=b.layerY&&b.layerY||void 0!=b.clientY&&b.clientY;if(a.isMouseDown){var c=a.mouseX-i+w,h=a.mouseY-d+o;if(c!=a.stageX||h!=a.stageY)t=s,k=A,s=c,A=h,a.stageX=c,a.stageY=h,a.dispatch("drag")}a.dispatch("move");
27 | b.preventDefault?b.preventDefault():b.returnValue=!1},!0);b.addEventListener("mousedown",function(b){a.p.mouseEnabled&&(a.isMouseDown=!0,a.dispatch("mousedown"),w=a.stageX,o=a.stageY,i=a.mouseX,d=a.mouseY,t=s=a.stageX,k=A=a.stageY,a.dispatch("startdrag"),b.preventDefault?b.preventDefault():b.returnValue=!1)},!0);document.addEventListener("mouseup",function(b){a.p.mouseEnabled&&a.isMouseDown&&(a.isMouseDown=!1,a.dispatch("mouseup"),(w!=a.stageX||o!=a.stageY)&&f(a.stageX+a.p.inertia*(a.stageX-t),a.stageY+
28 | a.p.inertia*(a.stageY-k)),b.preventDefault?b.preventDefault():b.returnValue=!1)},!0);b.addEventListener("touchstart",g,!0);b.addEventListener("touchmove",g,!0);document.addEventListener("touchend",g,!0);b.addEventListener("touchcancel",g,!0);this.checkBorders=function(){return a};this.interpolate=f}function z(b,j,f,c,a,g,d){function i(a){var b=c,d="fixed"==h.p.labelSize?h.p.defaultLabelSize:h.p.labelSizeRatio*a.displaySize;b.font=(h.p.hoverFontStyle||h.p.fontStyle||"")+" "+d+"px "+(h.p.hoverFont||
29 | h.p.font||"");b.fillStyle="node"==h.p.labelHoverBGColor?a.color||h.p.defaultNodeColor:h.p.defaultHoverLabelBGColor;b.beginPath();h.p.labelHoverShadow&&(b.shadowOffsetX=0,b.shadowOffsetY=0,b.shadowBlur=4,b.shadowColor=h.p.labelHoverShadowColor);sigma.tools.drawRoundRect(b,Math.round(a.displayX-d/2-2),Math.round(a.displayY-d/2-2),Math.round(b.measureText(a.label).width+1.5*a.displaySize+d/2+4),Math.round(d+4),Math.round(d/2+2),"left");b.closePath();b.fill();b.shadowOffsetX=0;b.shadowOffsetY=0;b.shadowBlur=
30 | 0;b.beginPath();b.fillStyle="node"==h.p.nodeBorderColor?a.color||h.p.defaultNodeColor:h.p.defaultNodeBorderColor;b.arc(Math.round(a.displayX),Math.round(a.displayY),a.displaySize+h.p.borderSize,0,2*Math.PI,!0);b.closePath();b.fill();b.beginPath();b.fillStyle="node"==h.p.nodeHoverColor?a.color||h.p.defaultNodeColor:h.p.defaultNodeHoverColor;b.arc(Math.round(a.displayX),Math.round(a.displayY),a.displaySize,0,2*Math.PI,!0);b.closePath();b.fill();b.fillStyle="node"==h.p.labelHoverColor?a.color||h.p.defaultNodeColor:
31 | h.p.defaultLabelHoverColor;b.fillText(a.label,Math.round(a.displayX+1.5*a.displaySize),Math.round(a.displayY+d/2-3));return h}function o(a){if(isNaN(a.x)||isNaN(a.y))throw Error("A node's coordinate is not a number (id: "+a.id+")");return!a.hidden&&a.displayX+a.displaySize>-n/3&&a.displayX-a.displaySize<4*n/3&&a.displayY+a.displaySize>-l/3&&a.displayY-a.displaySize<4*l/3}sigma.classes.Cascade.call(this);var h=this;this.p={labelColor:"default",defaultLabelColor:"#000",labelHoverBGColor:"default",defaultHoverLabelBGColor:"#fff",
32 | labelHoverShadow:!0,labelHoverShadowColor:"#000",labelHoverColor:"default",defaultLabelHoverColor:"#000",labelActiveBGColor:"default",defaultActiveLabelBGColor:"#fff",labelActiveShadow:!0,labelActiveShadowColor:"#000",labelActiveColor:"default",defaultLabelActiveColor:"#000",labelSize:"fixed",defaultLabelSize:12,labelSizeRatio:2,labelThreshold:6,font:"Arial",hoverFont:"",activeFont:"",fontStyle:"",hoverFontStyle:"",activeFontStyle:"",edgeColor:"source",defaultEdgeColor:"#aaa",defaultEdgeType:"line",
33 | defaultNodeColor:"#aaa",nodeHoverColor:"node",defaultNodeHoverColor:"#fff",nodeActiveColor:"node",defaultNodeActiveColor:"#fff",borderSize:0,nodeBorderColor:"node",defaultNodeBorderColor:"#fff",edgesSpeed:200,nodesSpeed:200,labelsSpeed:200};var n=g,l=d;this.currentLabelIndex=this.currentNodeIndex=this.currentEdgeIndex=0;this.task_drawLabel=function(){for(var b=a.nodes.length,c=0;c++=h.p.labelThreshold||d.forceLabel){var g="fixed"==h.p.labelSize?h.p.defaultLabelSize:h.p.labelSizeRatio*d.displaySize;j.font=h.p.fontStyle+g+"px "+h.p.font;j.fillStyle="node"==h.p.labelColor?d.color||h.p.defaultNodeColor:h.p.defaultLabelColor;j.fillText(d.label,Math.round(d.displayX+1.5*d.displaySize),Math.round(d.displayY+g/2-3))}}else h.currentLabelIndex++;return h.currentLabelIndex(b*=2)?0.5*b*b:-0.5*(--b*(b-2)-1)};sigma.tools.drawRoundRect=function(b,g,f,c,a,i,d){var i=i?i:0,k=d?d:[],k="string"==typeof k?k.split(" "):k,d=i&&(0<=k.indexOf("topleft")||0<=k.indexOf("top")||0<=k.indexOf("left")),m=i&&(0<=k.indexOf("topright")||
62 | 0<=k.indexOf("top")||0<=k.indexOf("right")),h=i&&(0<=k.indexOf("bottomleft")||0<=k.indexOf("bottom")||0<=k.indexOf("left")),k=i&&(0<=k.indexOf("bottomright")||0<=k.indexOf("bottom")||0<=k.indexOf("right"));b.moveTo(g,f+i);d?b.arcTo(g,f,g+i,f,i):b.lineTo(g,f);m?(b.lineTo(g+c-i,f),b.arcTo(g+c,f,g+c,f+i,i)):b.lineTo(g+c,f);k?(b.lineTo(g+c,f+a-i),b.arcTo(g+c,f+a,g+c-i,f+a,i)):b.lineTo(g+c,f+a);h?(b.lineTo(g+i,f+a),b.arcTo(g,f+a,g,f+a-i,i)):b.lineTo(g,f+a);b.lineTo(g,f+i)};sigma.tools.getRGB=function(b,
63 | g){var b=b.toString(),f={r:0,g:0,b:0};if(3<=b.length&&"#"==b.charAt(0)){var c=b.length-1;6==c?f={r:parseInt(b.charAt(1)+b.charAt(2),16),g:parseInt(b.charAt(3)+b.charAt(4),16),b:parseInt(b.charAt(5)+b.charAt(5),16)}:3==c&&(f={r:parseInt(b.charAt(1)+b.charAt(1),16),g:parseInt(b.charAt(2)+b.charAt(2),16),b:parseInt(b.charAt(3)+b.charAt(3),16)})}g&&(f=[f.r,f.g,f.b]);return f};sigma.tools.rgbToHex=function(b,g,f){return sigma.tools.toHex(b)+sigma.tools.toHex(g)+sigma.tools.toHex(f)};sigma.tools.toHex=
64 | function(b){b=parseInt(b,10);if(isNaN(b))return"00";b=Math.max(0,Math.min(b,255));return"0123456789ABCDEF".charAt((b-b%16)/16)+"0123456789ABCDEF".charAt(b%16)};sigma.publicPrototype=x.prototype})();
65 |
--------------------------------------------------------------------------------
/website/js/sigma/sigma.parseGexf.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/js/sigma/sigma.parseGexf.js
--------------------------------------------------------------------------------
/website/js/sigma/sigma.parseJson.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/intezer/ost-map/df5fac01b1ae39157672dbf7f6a6e9340b853e89/website/js/sigma/sigma.parseJson.js
--------------------------------------------------------------------------------
/website/web.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/yara/InjectProc.yar:
--------------------------------------------------------------------------------
1 | private rule id_1
2 | {
3 | meta:
4 | author = "Intezer Labs"
5 | strings:
6 | $a0 = { 48 [4] E8 [4] 48 [4] 48 [3] 48 [6] 48 [4] 48 [4] 48 [3] 8D [5] 89 [3] 48 [8] 0F 84 [4] 48 [4] 48 [4] FF 1? [4] 0F 10 [1] F2 [4] 66 [3] 66 [4] 66 [4] 66 [4] 48 [2] 48 [2] E8 [4] 48 [2] 45 [2] 33 [1] 48 [4] FF 1? [4] 4C [2] 48 [2] 48 [4] FF 1? [4] 48 [4] E8 [4] 48 [2] 75 [1] 48 [4] 48 [3] 48 [4] 48 [2] 45 [2] 41 [3] FF 1? }
7 |
8 | condition:
9 | any of them
10 | }
11 |
12 | private rule id_2
13 | {
14 | meta:
15 | author = "Intezer Labs"
16 | strings:
17 | $a0 = { 48 [6] E8 [4] 48 [3] 48 [3] E8 [4] 9? 48 [6] E8 [4] B9 [4] E8 [4] 48 [2] 33 [1] 44 [3] 48 [2] E8 [4] B9 [4] E8 [4] 48 [2] 33 [1] 48 [2] 48 [3] 48 [3] 48 [6] E8 [4] 48 [6] E8 [4] 48 [6] E8 [4] 48 [4] 48 [4] 4C [4] 4C [4] C7 [7] 44 [4] 45 [2] 45 [2] 33 [1] 49 [2] FF 1? [4] 48 [3] 0F 85 [4] 48 [6] E8 [4] 9? 48 [6] E8 [4] 48 [6] E8 [4] 48 [3] 48 [2] 74 [1] 48 [3] 48 [2] 48 [5] 72 }
18 |
19 | condition:
20 | any of them
21 | }
22 |
23 | private rule id_3
24 | {
25 | meta:
26 | author = "Intezer Labs"
27 | strings:
28 | $a0 = { FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 4C [4] 4C [2] 49 [3] 49 [3] 48 [4] 4C [3] 48 [2] 4D [2] 0F 84 }
29 | $b0 = { 49 [2] FF 1? [4] BF [4] 48 [2] 0F 84 }
30 |
31 | condition:
32 | any of ($a*) and any of ($b*)
33 | }
34 |
35 | private rule id_4
36 | {
37 | meta:
38 | author = "Intezer Labs"
39 | strings:
40 | $a0 = { 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] 48 [2] FF 1? [4] 48 [2] 0F 85 [4] 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] 48 [2] FF 1? [4] 48 [2] 75 }
41 |
42 | condition:
43 | any of them
44 | }
45 |
46 | private rule id_5
47 | {
48 | meta:
49 | author = "Intezer Labs"
50 | strings:
51 | $a0 = { 48 [4] 48 [4] FF 1? [4] 0F 10 [1] F2 [4] 66 [3] 66 [4] 66 [4] 66 [4] 48 [2] 48 [2] E8 [4] 48 [2] 45 [2] 33 [1] 48 [4] FF 1? [4] 4C [2] 48 [2] 48 [4] FF 1? [4] 48 [4] E8 [4] 48 [2] 75 [1] 48 [4] 48 [3] 48 [4] 48 [2] 45 [2] 41 [3] FF 1? [4] B3 [1] EB }
52 |
53 | condition:
54 | any of them
55 | }
56 |
57 | private rule id_6
58 | {
59 | meta:
60 | author = "Intezer Labs"
61 | strings:
62 | $a0 = { 48 [6] E8 [4] 48 [6] E8 [4] B9 [4] E8 [4] 48 [2] 4D [3] 48 [6] E8 [4] 4C [4] 41 [5] 4C [2] 49 [2] 48 [2] FF 1? [4] 85 [1] 0F 84 [4] 48 [6] E8 [4] 48 [6] E8 [4] 48 [6] 49 [2] FF 1? [4] 49 [2] 48 [2] FF D? 85 [1] 74 [1] 48 [6] E9 }
63 |
64 | condition:
65 | any of them
66 | }
67 |
68 | private rule id_7
69 | {
70 | meta:
71 | author = "Intezer Labs"
72 | strings:
73 | $a0 = { FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 4C [4] 4C [2] 49 [3] 49 [3] 48 [4] 4C [3] 48 [2] 4D [2] 0F 84 [4] 44 [2] 33 [1] 8D [2] FF 1? [4] 48 [2] 48 [2] 0F 84 [4] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] FF 1? [4] 48 [2] 48 [6] FF 1? [4] 48 [2] 4D [2] 48 [2] FF 1? [4] 48 [2] FF 1? }
74 |
75 | condition:
76 | any of them
77 | }
78 |
79 | private rule id_8
80 | {
81 | meta:
82 | author = "Intezer Labs"
83 | strings:
84 | $a0 = { 48 [3] 48 [3] E8 [4] 9? B9 [4] E8 [4] 48 [2] 33 [1] 44 [3] 48 [2] E8 [4] B9 [4] E8 [4] 48 [2] 33 [1] 48 [2] 48 [3] 48 [3] 48 [4] 48 [4] 4C [4] 4C [4] C7 [7] 44 [4] 45 [2] 45 [2] 33 [1] 49 [2] FF 1? [4] 48 [3] 0F 85 [4] 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 9? 48 [6] E8 [4] 48 [6] E8 [4] 48 [3] 48 [2] 74 [1] 48 [3] 48 [2] 48 [5] 72 }
85 |
86 | condition:
87 | any of them
88 | }
89 |
90 | private rule id_9
91 | {
92 | meta:
93 | author = "Intezer Labs"
94 | strings:
95 | $a0 = { 48 [2] 48 [4] E8 [4] 48 [4] 48 [3] 48 [6] 48 [4] 48 [4] 48 [3] 8D [5] 89 [3] 48 [8] 0F 84 [4] 48 [4] 48 [4] FF 1? [4] 0F 10 [1] F2 [4] 66 [3] 66 [4] 66 [4] 66 [4] 48 [2] 48 [2] E8 [4] 48 [2] 45 [2] 33 [1] 48 [4] FF 1? [4] 4C [2] 48 [2] 48 [4] FF 1? [4] 48 [4] E8 [4] 48 [2] 75 }
96 |
97 | condition:
98 | any of them
99 | }
100 |
101 | private rule id_10
102 | {
103 | meta:
104 | author = "Intezer Labs"
105 | strings:
106 | $a0 = { 44 [2] 33 [1] 8D [2] FF 1? [4] 48 [2] 48 [2] 0F 84 [4] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] FF 1? [4] 48 [2] 48 [6] FF 1? [4] 48 [2] 4D [2] 48 [2] FF 1? [4] 48 [2] FF 1? [4] 48 [3] 48 [2] 49 [2] 0F 85 }
107 |
108 | condition:
109 | any of them
110 | }
111 |
112 | private rule id_11
113 | {
114 | meta:
115 | author = "Intezer Labs"
116 | strings:
117 | $a0 = { 48 [6] 48 [2] FF 1? [4] 48 [2] 0F 85 [4] 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] 48 [2] FF 1? [4] 48 [2] 75 [1] 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 33 [1] E9 }
118 |
119 | condition:
120 | any of them
121 | }
122 |
123 | private rule id_12
124 | {
125 | meta:
126 | author = "Intezer Labs"
127 | strings:
128 | $a0 = { 4C [3] 4D [2] 49 [2] 48 [3] E8 [4] 0F B7 [2] 48 [4] 48 [3] 48 [3] E8 [4] 48 [2] 48 [6] 48 [2] 74 [1] 48 [6] E8 [4] 48 [2] 48 [6] 48 [3] 48 [6] 48 [3] 48 [6] 4C [2] 4C [3] 4C [3] 8B [2] 48 [3] E8 [4] 48 [2] 48 [2] 0F B7 [2] 48 [3] 48 [2] 44 [4] 45 [2] 0F 84 }
129 |
130 | condition:
131 | any of them
132 | }
133 |
134 | private rule id_13
135 | {
136 | meta:
137 | author = "Intezer Labs"
138 | strings:
139 | $a0 = { 48 [2] E8 [4] 48 [2] 4C [3] 4C [4] 4C [2] 33 [1] 48 [2] E8 [4] 48 [6] E8 [4] 48 [6] 4C [6] 4C [6] 0F 57 [1] F3 [5] 4C [4] 48 [4] E8 [4] 4C [3] 4C [2] 0F B7 [2] 48 [3] 4C [2] 0F B7 [2] 8B [1] 85 [1] 74 [1] 4C [2] 44 [2] 48 [2] 0F 1F }
140 |
141 | condition:
142 | any of them
143 | }
144 |
145 | private rule id_14
146 | {
147 | meta:
148 | author = "Intezer Labs"
149 | strings:
150 | $a0 = { FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 4C [4] 4C [2] 49 [3] 49 [3] 48 [4] 4C [3] 48 [2] 4D [2] 0F 84 [4] 44 [2] 33 [1] 8D [2] FF 1? [4] 48 [2] 48 [2] 0F 84 }
151 | $b0 = { 48 [3] 48 [2] 49 [2] 0F 85 }
152 |
153 | condition:
154 | any of ($a*) and any of ($b*)
155 | }
156 |
157 | private rule id_15
158 | {
159 | meta:
160 | author = "Intezer Labs"
161 | strings:
162 | $a0 = { 4C [2] 5? 5? 41 [1] 48 [6] 48 [8] 49 [3] 49 [3] 41 [4] 41 [4] 48 [6] 48 [2] 48 [7] 48 [2] 48 [2] 49 [3] 32 [1] 0F 57 [1] 33 [1] 48 [4] 45 [2] 41 [2] 48 [4] 72 }
163 | $b0 = { 48 [4] E8 [4] 48 [4] 48 [3] 48 [6] 48 [4] 48 [4] 48 [3] 8D [5] 89 [3] 48 [8] 0F 84 [4] 48 [4] 48 [4] FF 1? [4] 0F 10 [1] F2 [4] 66 [3] 66 [4] 66 [4] 66 [4] 48 [2] 48 [2] E8 [4] 48 [2] 45 [2] 33 [1] 48 [4] FF 1? [4] 4C [2] 48 [2] 48 [4] FF 1? [4] 48 [4] E8 [4] 48 [2] 75 }
164 |
165 | condition:
166 | any of ($a*) and any of ($b*)
167 | }
168 |
169 | private rule id_16
170 | {
171 | meta:
172 | author = "Intezer Labs"
173 | strings:
174 | $a0 = { 48 [7] 4C [3] 48 [7] 0F B7 [3] 48 [2] 48 [3] 48 [3] 48 [3] 48 [3] 49 [7] 4D [3] 49 [7] 49 [3] 49 [3] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 48 [3] 49 [3] 48 [3] 49 [3] 48 [3] 49 [3] 4C [3] 0F 57 [1] 66 [4] 49 [6] 48 [3] BA [4] 9? 0F 10 [1] 0F 11 [1] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 48 [6] 0F 10 [2] 0F 11 [2] 48 [6] 48 [3] 75 [1] 48 [2] 48 [2] 49 [6] 4D [6] 48 [6] 49 [6] 4C [6] 0F 57 [1] 66 [7] 48 [6] 49 [6] 48 [6] 49 [6] 48 [6] 49 [6] 66 [7] 4C [6] 48 [6] E8 [4] 48 [6] E8 [4] 48 [3] 48 [2] 74 }
175 |
176 | condition:
177 | any of them
178 | }
179 |
180 | private rule id_17
181 | {
182 | meta:
183 | author = "Intezer Labs"
184 | strings:
185 | $a0 = { FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] FF 1? [4] 48 [2] 48 [6] FF 1? [4] 48 [2] 4D [2] 48 [2] FF 1? [4] 48 [2] FF 1? [4] 48 [3] 48 [2] 49 [2] 0F 85 [4] 49 [2] FF 1? [4] BF }
186 | $a1 = { FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [6] FF 1? [4] 48 [2] 48 [6] FF 1? [4] 48 [2] 4D [2] 48 [2] FF 1? [4] 48 [2] FF 1? [4] 48 [3] 48 [2] 49 [2] 0F 85 [4] 49 [2] FF 1? [4] BB [4] EB }
187 |
188 | condition:
189 | any of them
190 | }
191 |
192 | private rule id_18
193 | {
194 | meta:
195 | author = "Intezer Labs"
196 | strings:
197 | $a0 = { 48 [2] 48 [2] 48 [6] 49 [6] 48 [6] 49 [6] 48 [6] 49 [6] 4C [6] 0F 57 [1] 66 [7] 48 [6] 49 [6] 49 [6] 48 [6] 49 [6] 66 [7] 4C [6] 48 [6] E8 [4] 48 [3] 48 [2] 74 [1] 48 [3] 48 [2] 48 [2] 48 [6] 72 [1] 48 [3] 48 [3] 48 [2] 48 [3] 48 [3] 76 }
198 |
199 | condition:
200 | any of them
201 | }
202 |
203 | private rule id_19
204 | {
205 | meta:
206 | author = "Intezer Labs"
207 | strings:
208 | $a0 = { 8B [1] 48 [2] 48 [3] 49 [3] 75 [1] 48 [7] 4C [3] 48 [7] 0F B7 [3] 48 [2] 48 [3] 48 [3] 48 [3] 48 [3] 49 [7] 4D [3] 49 [7] 49 [3] 49 [3] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 48 [3] 49 [3] 48 [3] 49 [3] 48 [3] 49 [3] 4C [3] 0F 57 [1] 66 [4] 49 [6] 48 [3] BA [4] 9? 0F 10 [1] 0F 11 [1] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 48 [6] 0F 10 [2] 0F 11 [2] 48 [6] 48 [3] 75 }
209 |
210 | condition:
211 | any of them
212 | }
213 |
214 | private rule id_20
215 | {
216 | meta:
217 | author = "Intezer Labs"
218 | strings:
219 | $a0 = { FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [3] 48 [3] E8 [4] 9? FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] B9 [4] E8 [4] 48 [2] 33 [1] 44 [3] 48 [2] E8 [4] B9 [4] E8 [4] 48 [2] 33 [1] 48 [2] 48 [3] 48 [3] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [4] 48 [4] 4C [4] 4C [4] C7 [7] 44 [4] 45 [2] 45 [2] 33 [1] 49 [2] FF 1? [4] 48 [3] 0F 85 [4] FF 1? [4] 8B [1] 48 [6] FF 1? [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 9? 48 [6] E8 [4] 48 [6] E8 [4] 48 [3] 48 [2] 74 [1] 48 [3] 48 [2] 48 [5] 72 }
220 |
221 | condition:
222 | any of them
223 | }
224 |
225 | private rule id_21
226 | {
227 | meta:
228 | author = "Intezer Labs"
229 | strings:
230 | $a0 = { 48 [6] 48 [3] 45 [3] 0F 1F [2] 66 [9] 8B [1] 48 [2] 48 [3] 49 [3] 75 [1] 48 [7] 48 [4] 48 [3] 48 [7] 48 [4] 48 [3] 48 [3] 48 [3] 48 [3] 48 [3] 49 [6] 49 [3] 49 [7] 49 [3] 49 [3] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 48 [3] 49 [3] 48 [3] 49 [3] 48 [3] 49 [3] 4C [3] 0F 57 [1] 66 [4] 49 [6] 48 [3] 9? }
231 |
232 | condition:
233 | any of them
234 | }
235 |
236 | private rule id_22
237 | {
238 | meta:
239 | author = "Intezer Labs"
240 | strings:
241 | $a0 = { 0F 10 [1] 0F 11 [1] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 48 [6] 0F 10 [2] 0F 11 [2] 48 [6] 48 [3] 75 [1] 48 [2] 48 [2] 49 [6] 4D [6] 48 [6] 49 [6] 4C [6] 0F 57 [1] 66 [7] 48 [6] 49 [6] 48 [6] 49 [6] 48 [6] 49 [6] 66 [7] 4C [6] 48 [6] E8 [4] 48 [6] E8 [4] 48 [3] 48 [2] 74 [1] 48 [3] 48 [2] 48 [2] 48 [6] 72 }
242 |
243 | condition:
244 | any of them
245 | }
246 |
247 | private rule id_23
248 | {
249 | meta:
250 | author = "Intezer Labs"
251 | strings:
252 | $a0 = { 48 [6] E8 [4] 48 [6] E8 [4] B9 [4] E8 [4] 48 [2] 4D [3] 48 [6] E8 [4] 4C [4] 41 [5] 4C [2] 49 [2] 48 [2] FF 1? [4] 85 [1] 0F 84 [4] 48 [6] E8 [4] 48 [6] E8 [4] 48 [6] 49 [2] FF 1? [4] 49 [2] 48 [2] FF D? 85 [1] 74 [1] 48 [6] E8 [4] E9 }
253 |
254 | condition:
255 | any of them
256 | }
257 |
258 | private rule id_24
259 | {
260 | meta:
261 | author = "Intezer Labs"
262 | strings:
263 | $a0 = { 4C [2] 5? 5? 41 [1] 48 [6] 48 [8] 49 [3] 49 [3] 41 [4] 41 [4] 48 [6] 48 [2] 48 [7] 48 [2] 48 [2] 49 [3] 32 [1] 0F 57 [1] 33 [1] 48 [4] 45 [2] 41 [2] 48 [4] 72 [1] 48 [2] 48 [4] E8 [4] 48 [4] 48 [3] 48 [6] 48 [4] 48 [4] 48 [3] 8D [5] 89 [3] 48 [8] 0F 84 }
264 |
265 | condition:
266 | any of them
267 | }
268 |
269 | private rule id_25
270 | {
271 | meta:
272 | author = "Intezer Labs"
273 | strings:
274 | $a0 = { 4C [2] 49 [3] 49 [3] 5? 5? 41 [1] 48 [6] 41 [4] 41 [4] 48 [6] 48 [2] 48 [7] 48 [2] 48 [2] 49 [3] 32 [1] 0F 57 [1] 33 [1] 48 [4] 45 [2] 41 [2] 48 [4] 72 [1] 48 [2] 48 [4] E8 [4] 48 [4] 48 [3] 48 [6] 48 [4] 48 [4] 48 [3] 8D [5] 89 [3] 48 [8] 0F 84 }
275 |
276 | condition:
277 | any of them
278 | }
279 |
280 | private rule id_26
281 | {
282 | meta:
283 | author = "Intezer Labs"
284 | strings:
285 | $a0 = { E8 [4] 4C [3] 4D [2] 49 [2] 48 [3] E8 [4] 0F B7 [2] 48 [4] 48 [3] 48 [3] E8 [4] 48 [2] 48 [6] 48 [2] 74 [1] 48 [6] E8 [4] 48 [2] 48 [6] 48 [3] 48 [6] 48 [3] 48 [6] 4C [2] 4C [3] 4C [3] 8B }
286 |
287 | condition:
288 | any of them
289 | }
290 |
291 | private rule id_27
292 | {
293 | meta:
294 | author = "Intezer Labs"
295 | strings:
296 | $a0 = { 48 [3] 44 [3] 9? 8B [1] 48 [2] 48 [3] 49 [3] 75 [1] 48 [7] 4C [3] 48 [7] 0F B7 [3] 48 [2] 48 [3] 48 [3] 48 [3] 48 [3] 49 [7] 4D [3] 49 [7] 49 [3] 49 [3] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 48 [3] 49 [3] 48 [3] 49 [3] 48 [3] 49 [3] 4C [3] 0F 57 [1] 66 [4] 49 [6] 48 [3] BA [4] 9? }
297 |
298 | condition:
299 | any of them
300 | }
301 |
302 | private rule id_28
303 | {
304 | meta:
305 | author = "Intezer Labs"
306 | strings:
307 | $a0 = { 8B [1] 48 [2] 48 [3] 49 [3] 75 [1] 48 [7] 48 [4] 48 [3] 48 [7] 48 [4] 48 [3] 48 [3] 48 [3] 48 [3] 48 [3] 49 [6] 49 [3] 49 [7] 49 [3] 49 [3] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 0F 10 [2] 41 [4] 48 [3] 49 [3] 48 [3] 49 [3] 48 [3] 49 [3] 4C [3] 0F 57 [1] 66 [4] 49 [6] 48 [3] 9? 0F 10 [1] 0F 11 [1] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 0F 10 [2] 0F 11 [2] 48 [6] 0F 10 [2] 0F 11 [2] 48 [6] 49 [3] 75 }
308 |
309 | condition:
310 | any of them
311 | }
312 |
313 | private rule id_29
314 | {
315 | meta:
316 | author = "Intezer Labs"
317 | strings:
318 | $a0 = { 48 [4] 5? 5? 5? 41 [1] 41 [1] 41 [1] 41 [1] 48 [7] 48 [6] 48 [6] 48 [2] 48 [6] 48 [2] 48 [4] 4C [2] 48 [4] 48 [4] 45 [2] 4C [3] 4C [3] 4C [3] 4C [3] 4C [3] 4C [3] 0F 57 [1] 66 [4] 33 [1] 41 [5] 48 [3] E8 [4] 4C [6] 0F 57 [1] 66 [7] 0F 57 [1] 66 [7] 4C [6] 48 [2] 74 }
319 | $b0 = { 0F 11 [2] 0F 11 [2] 0F 11 [2] 0F 11 [2] FF 1? [4] C7 [5] FF 1? [4] 48 [3] 48 [2] 74 }
320 |
321 | condition:
322 | any of ($a*) and any of ($b*)
323 | }
324 |
325 | rule InjectProc
326 | {
327 | meta:
328 | author = "Intezer Labs"
329 | date = "June 2020"
330 | condition:
331 | (id_1 or id_2 or id_3 or id_4 or id_5 or id_6 or id_7 or id_8 or id_9 or id_10 or id_11 or id_12 or id_13 or id_14 or id_15 or id_16 or id_17 or id_18 or id_19 or id_20 or id_21 or id_22 or id_23 or id_24 or id_25 or id_26 or id_27 or id_28 or id_29)
332 | }
--------------------------------------------------------------------------------
/yara/MemoryModule-DIY.yar:
--------------------------------------------------------------------------------
1 | rule MemoryModule {
2 | strings:
3 | // First block:
4 | // mov , 0x4D5A
5 | // cmp [reg], reg
6 | $s1 = {B? 4D 5A 00 00 66 39 }
7 | // Second block:
8 | // mov ecx, 0xC1
9 | // call cs:
10 | // xor eax, eax
11 | $s2 = {B9 C1 00 00 00 FF 15 ?? ?? ?? ?? 33 C0 }
12 | condition:
13 | $s1 and $s2 in (@s1..@s1+0x800)
14 | }
15 |
16 |
17 |
--------------------------------------------------------------------------------
/yara/ReflectiveDLLInjection.yar:
--------------------------------------------------------------------------------
1 | private rule id_1
2 | {
3 | meta:
4 | author = "Intezer Labs"
5 | strings:
6 | $a0 = { 48 [4] 48 [4] 48 [4] 48 [4] 41 [1] 41 [1] 41 [1] 48 [3] 48 [3] 48 [2] B9 [4] 66 [4] 0F 85 [4] 8B [6] 48 [2] E8 [4] 44 [2] 48 [2] 4C [2] 41 [3] E8 [4] 41 [3] 48 [2] 8B [1] 48 [2] E8 [4] 41 [3] 44 [2] 4C [2] 85 [1] 0F 84 [4] 45 [2] 0F 1F }
7 |
8 | condition:
9 | any of them
10 | }
11 |
12 | private rule id_2
13 | {
14 | meta:
15 | author = "Intezer Labs"
16 | strings:
17 | $a0 = { 48 [4] 48 [4] 48 [4] 48 [2] 4C [4] 4C [4] E8 [4] 48 [2] 44 [2] 4C [2] 41 [3] E8 [4] 41 [3] 48 [2] 8B [1] 48 [2] E8 [4] 41 [3] 8B [1] 48 [2] 85 [1] 0F 84 [4] 45 [2] 0F 1F [1] 48 [3] 44 [2] FF C? 48 [2] 0F B7 [2] 44 [4] 4C [3] 72 [1] 44 [4] 41 [3] 45 [2] 7E }
18 |
19 | condition:
20 | any of them
21 | }
22 |
23 | private rule id_3
24 | {
25 | meta:
26 | author = "Intezer Labs"
27 | strings:
28 | $a0 = { 8B [2] 8B [2] 03 [2] 89 [2] 8B [2] 83 [2] 89 [2] 8B [2] 8B [2] 03 [1] 89 [2] 8B [2] 8B [2] 03 [2] 89 [2] 8B [2] 8B [2] 03 [2] 89 [2] B8 [4] 66 [3] 0F B7 [2] 85 [1] 0F 8E }
29 | $b0 = { 8B [2] 8B [2] 03 [2] 89 [2] 6A [1] 68 [4] 8B [2] 8B [2] 5? 6A [1] FF 5? [1] 89 [2] 8B [2] 8B [2] 89 [2] 8B [2] 89 [2] 8B [2] 89 [2] 8B [2] 8B [2] 8B [2] F3 [1] 8B [2] 0F B7 [2] 8B [2] 8D [3] 89 }
30 |
31 | condition:
32 | any of ($a*) and any of ($b*)
33 | }
34 |
35 | private rule id_4
36 | {
37 | meta:
38 | author = "Intezer Labs"
39 | strings:
40 | $a0 = { 48 [3] 33 [1] 41 [5] 48 [2] 44 [3] 8B [2] 41 [2] 8B [2] 48 [2] 48 [2] 45 [2] 4C [2] F3 [1] 0F B7 [2] BA [4] 66 [4] 74 }
41 | $b0 = { 66 [3] 8B [5] 49 [2] 8B [2] 41 [2] 0F 84 [4] 8B [1] 49 [2] 41 [2] 8B [1] 8B [2] 49 [2] 49 [2] 4C [2] 45 [2] EB }
42 |
43 | condition:
44 | any of ($a*) and any of ($b*)
45 | }
46 |
47 | private rule id_5
48 | {
49 | meta:
50 | author = "Intezer Labs"
51 | strings:
52 | $a0 = { 8B [2] 03 [1] 89 [2] 8D [2] 89 [2] 8B [1] 85 [1] 0F 85 [4] 8B [2] 8B [2] 8B [2] 6A [1] 6A [1] 6A [1] 03 [1] FF 5? [1] FF 7? [1] 6A [1] FF 7? [1] FF D? 5? 8B [1] 5? 5? 8B [1] 5? C2 }
53 |
54 | condition:
55 | any of them
56 | }
57 |
58 | private rule id_6
59 | {
60 | meta:
61 | author = "Intezer Labs"
62 | strings:
63 | $a0 = { 4D [2] 4D [2] 75 [1] 8B [2] 48 [2] 8B [2] 85 [1] 0F 85 [4] 8B [2] 45 [2] 33 [1] 48 [3] 48 [2] FF 5? [2] 4C [7] BA [4] 48 [2] FF D? 48 [2] 48 [3] 41 [1] 41 [1] 41 [1] 41 [1] 5? 5? 5? 5? C3 }
64 |
65 | condition:
66 | any of them
67 | }
68 |
69 | private rule id_7
70 | {
71 | meta:
72 | author = "Intezer Labs"
73 | strings:
74 | $a0 = { 40 [1] 48 [3] 48 [3] 48 [2] 0F B7 [3] B9 [4] 66 [2] 75 }
75 | $b0 = { B9 [4] 66 [2] 75 [1] 8B [6] 48 [4] 48 [4] 48 [4] 48 [2] 4C [4] 4C [4] E8 [4] 48 [2] 44 [2] 4C [2] 41 [3] E8 [4] 41 [3] 48 [2] 8B [1] 48 [2] E8 [4] 41 [3] 8B [1] 48 [2] 85 [1] 0F 84 }
76 |
77 | condition:
78 | any of ($a*) and any of ($b*)
79 | }
80 |
81 | private rule id_8
82 | {
83 | meta:
84 | author = "Intezer Labs"
85 | strings:
86 | $a0 = { 8B [2] 0F B7 [2] 8B [2] 66 [3] 66 [3] 8B [2] 66 [3] 85 [1] 74 }
87 | $b0 = { 8B [2] 05 [4] 89 [2] 8B [2] 8B [2] 03 [1] 89 [2] 8B [2] 83 [3] 0F 84 }
88 |
89 | condition:
90 | any of ($a*) and any of ($b*)
91 | }
92 |
93 | private rule id_9
94 | {
95 | meta:
96 | author = "Intezer Labs"
97 | strings:
98 | $a0 = { 48 [3] 33 [1] 41 [5] 48 [2] 44 [3] 8B [2] 41 [2] 8B [2] 48 [2] 48 [2] 45 [2] 4C [2] F3 [1] 0F B7 [2] BA [4] 66 [4] 74 [1] 48 [4] 66 [3] 8B [1] 8B [2] 8B [2] 48 [2] 49 [2] F3 [1] 48 [3] 66 [4] 75 }
99 |
100 | condition:
101 | any of them
102 | }
103 |
104 | private rule id_10
105 | {
106 | meta:
107 | author = "Intezer Labs"
108 | strings:
109 | $a0 = { 49 [3] 41 [5] BF [4] 48 [3] 45 [3] 8B [6] 44 [4] 44 [4] 4C [2] 4C [2] 41 [2] 44 [2] 48 [2] 8A [1] 41 [3] 0F BE [1] 49 [2] 44 [2] 8A [1] 84 [1] 75 }
110 |
111 | condition:
112 | any of them
113 | }
114 |
115 | private rule id_11
116 | {
117 | meta:
118 | author = "Intezer Labs"
119 | strings:
120 | $a0 = { 8B [6] 48 [4] 48 [4] 48 [4] 48 [2] 4C [4] 4C [4] E8 [4] 48 [2] 44 [2] 4C [2] 41 [3] E8 [4] 41 [3] 48 [2] 8B [1] 48 [2] E8 [4] 41 [3] 8B [1] 48 [2] 85 [1] 0F 84 [4] 45 [2] 0F 1F [1] 48 [3] 44 [2] FF C? 48 [2] 0F B7 [2] 44 [4] 4C [3] 72 }
121 |
122 | condition:
123 | any of them
124 | }
125 |
126 | private rule id_12
127 | {
128 | meta:
129 | author = "Intezer Labs"
130 | strings:
131 | $a0 = { 0F B7 [2] 85 [1] 0F 8E }
132 | $b0 = { 8B [2] 8B [2] 03 [2] 89 [2] 6A [1] 68 [4] 8B [2] 8B [2] 5? 6A [1] FF 5? [1] 89 [2] 8B [2] 8B [2] 89 [2] 8B [2] 89 [2] 8B [2] 89 [2] 8B [2] 8B [2] 8B [2] F3 [1] 8B [2] 0F B7 [2] 8B [2] 8D [3] 89 [2] 8B [2] 0F B7 [2] 8B [2] 66 [3] 66 [3] 8B [2] 66 [3] 85 [1] 74 }
133 |
134 | condition:
135 | any of ($a*) and any of ($b*)
136 | }
137 |
138 | private rule id_13
139 | {
140 | meta:
141 | author = "Intezer Labs"
142 | strings:
143 | $a0 = { 81 F? [4] 0F 85 [4] 49 [3] 41 [5] BF [4] 48 [3] 45 [3] 8B [6] 44 [4] 44 [4] 4C [2] 4C [2] 41 [2] 44 [2] 48 [2] 8A }
144 |
145 | condition:
146 | any of them
147 | }
148 |
149 | private rule id_14
150 | {
151 | meta:
152 | author = "Intezer Labs"
153 | strings:
154 | $a0 = { 8B [2] 8B [2] 03 [2] 89 [2] 6A [1] 68 [4] 8B [2] 8B [2] 5? 6A [1] FF 5? [1] 89 [2] 8B [2] 8B [2] 89 [2] 8B [2] 89 [2] 8B [2] 89 [2] 8B [2] 8B [2] 8B [2] F3 [1] 8B [2] 0F B7 [2] 8B [2] 8D [3] 89 [2] 8B [2] 0F B7 [2] 8B [2] 66 [3] 66 [3] 8B [2] 66 [3] 85 [1] 74 [1] 8B [2] 8B [2] 03 [2] 89 [2] 8B [2] 8B [2] 03 [2] 89 [2] 8B [2] 8B [2] 89 [2] 8B [2] 8B [2] 8B [2] F3 [1] 8B [2] 83 [2] 89 [2] EB }
155 |
156 | condition:
157 | any of them
158 | }
159 |
160 | private rule id_15
161 | {
162 | meta:
163 | author = "Intezer Labs"
164 | strings:
165 | $a0 = { 48 [2] 48 [2] 66 [3] 75 [1] 81 F? [4] 0F 85 [4] 49 [3] BF [4] 48 [3] 8B [6] B8 [4] 44 [4] 8B [3] 0F B7 [1] 4C [2] 48 [2] 45 [2] 44 }
166 |
167 | condition:
168 | any of them
169 | }
170 |
171 | private rule id_16
172 | {
173 | meta:
174 | author = "Intezer Labs"
175 | strings:
176 | $a0 = { 81 F? [4] 0F 85 [4] 49 [3] BF [4] 48 [3] 8B [6] B8 [4] 44 [4] 8B [3] 0F B7 [1] 4C [2] 48 [2] 45 [2] 44 [3] 45 [2] 41 [2] 4C [2] 41 }
177 |
178 | condition:
179 | any of them
180 | }
181 |
182 | private rule id_17
183 | {
184 | meta:
185 | author = "Intezer Labs"
186 | strings:
187 | $a0 = { 49 [3] BF [4] 48 [3] 8B [6] B8 [4] 44 [4] 8B [3] 0F B7 [1] 4C [2] 48 [2] 45 [2] 44 [3] 45 [2] 41 [2] 4C [2] 41 [2] C1 [2] 0F BE [1] 49 [2] 03 [1] 41 [2] 84 [1] 75 }
188 |
189 | condition:
190 | any of them
191 | }
192 |
193 | rule ReflectiveDLLInjection
194 | {
195 | meta:
196 | author = "Intezer Labs"
197 | date = "June 2020"
198 | condition:
199 | (id_1 or id_2 or id_3 or id_4 or id_5 or id_6 or id_7 or id_8 or id_9 or id_10 or id_11 or id_12 or id_13 or id_14 or id_15 or id_16 or id_17)
200 | }
--------------------------------------------------------------------------------
/yara/passcat.yar:
--------------------------------------------------------------------------------
1 | private rule id_1
2 | {
3 | meta:
4 | author = "Intezer Labs"
5 | strings:
6 | $a0 = { 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [4] 48 [4] 48 [6] 48 [4] 48 [4] 41 [5] 4C [6] 48 [3] 48 [4] FF 1? [4] 85 [1] 0F 85 }
7 | $b0 = { C7 [7] FF C? 48 [4] 48 [4] 48 [4] 48 [4] 4C [4] 4C [3] 8B [1] 48 [4] FF 1? [4] 8B [1] 48 [6] 48 [6] FF 1? [4] 81 F? [4] 0F 85 }
8 |
9 | condition:
10 | any of ($a*) and any of ($b*)
11 | }
12 |
13 | private rule id_2
14 | {
15 | meta:
16 | author = "Intezer Labs"
17 | strings:
18 | $a0 = { 68 [4] 8D [2] 5? 5? 89 [2] 8B [1] 6A [1] FF 1? [4] 8B [1] 83 [2] 89 [2] C6 [3] 85 [1] 74 [1] 0F 57 [1] 66 [3] C7 [6] 68 [4] C7 [6] C7 [6] E8 [4] 89 [1] EB }
19 | $a1 = { 68 [4] 8D [2] 5? 5? 89 [2] 8B [1] 6A [1] E8 [4] 8B [1] 83 [2] 89 [2] C6 [3] 85 [1] 74 [1] 0F 57 [1] 66 [3] C7 [6] 68 [4] C7 [6] C7 [6] E8 [4] 89 [1] EB }
20 | $a2 = { 8D [5] BF [4] 5? 5? 89 [5] 8B [1] 6A [1] E8 [4] 8B [1] 83 [2] 89 [5] C7 [6] 85 [1] 74 [1] 0F 57 [1] 66 [3] C7 [6] 68 [4] C7 [6] C7 [6] E8 [4] 89 [1] EB }
21 | $a3 = { 68 [4] 8D [5] 5? 5? 89 [5] 8B [1] 6A [1] E8 [4] 8B [1] 83 [2] 89 [5] C6 [3] 85 [1] 74 [1] 0F 57 [1] 66 [3] C7 [6] 68 [4] C7 [6] C7 [6] E8 [4] 89 [1] EB }
22 | $b0 = { C6 [3] 89 [1] 85 [1] 0F 84 }
23 |
24 | condition:
25 | any of ($a*) and any of ($b*)
26 | }
27 |
28 | private rule id_3
29 | {
30 | meta:
31 | author = "Intezer Labs"
32 | strings:
33 | $a0 = { 48 [4] 48 [4] 48 [6] 48 [4] 48 [4] 41 [5] 4C [6] 48 [3] 48 [4] FF 1? [4] 85 [1] 0F 85 }
34 | $b0 = { C7 [7] FF C? 48 [4] 48 [4] 48 [4] 48 [4] 4C [4] 4C [3] 8B [1] 48 [4] FF 1? [4] 8B [1] 48 [6] 48 [6] FF 1? [4] 81 F? [4] 0F 85 [4] 48 }
35 |
36 | condition:
37 | any of ($a*) and any of ($b*)
38 | }
39 |
40 | private rule id_4
41 | {
42 | meta:
43 | author = "Intezer Labs"
44 | strings:
45 | $a0 = { 2B [1] 8D [2] 5? 6A [1] 89 [2] FF D? 5? FF 1? [4] 89 [2] FF 7? [1] 85 [1] 0F 84 [4] FF 7? [1] 5? FF 1? [4] 83 [2] FF 7? [1] 6A [1] FF D? 5? FF D? 83 [3] C7 [6] C7 [6] 7E }
46 | $a1 = { 2B [1] 8D [2] 5? 6A [1] 89 [2] FF D? 5? FF 1? [4] 89 [2] FF 7? [1] 85 [1] 0F 84 [4] FF 7? [1] 5? FF 1? [4] 83 [2] FF 7? [1] 6A [1] FF D? 5? FF 1? [4] 83 [3] C7 [6] C7 [6] 0F 8E }
47 | $b0 = { 81 7? [5] 0F 85 }
48 | $b1 = { 81 B? [8] 0F 85 }
49 |
50 | condition:
51 | any of ($a*) and any of ($b*)
52 | }
53 |
54 | private rule id_5
55 | {
56 | meta:
57 | author = "Intezer Labs"
58 | strings:
59 | $a0 = { 48 [4] 48 [4] 48 [6] 48 [4] 48 [4] 41 [5] 4C [6] 48 [3] 48 [4] FF 1? [4] 85 [1] 75 [1] 48 [6] 48 [6] E8 [4] 48 [2] 48 [6] E8 [4] 48 [2] 48 [6] FF 1? [4] 48 [4] 48 [4] 48 [6] 48 [4] 48 [4] 41 [5] 4C [6] 48 [3] 48 [4] FF 1? [4] 85 [1] 0F 85 }
60 |
61 | condition:
62 | any of them
63 | }
64 |
65 | private rule id_6
66 | {
67 | meta:
68 | author = "Intezer Labs"
69 | strings:
70 | $a0 = { 3B [2] 0F 84 [4] 68 [4] 8D [2] 5? 5? 89 [2] 8B [1] 6A [1] FF 1? [4] 8B [1] 83 [2] 89 [2] C6 [3] 85 [1] 74 [1] 0F 57 [1] 66 [3] C7 [6] 68 [4] C7 [6] C7 [6] E8 [4] 89 [1] EB }
71 | $a1 = { 3B [2] 0F 84 [4] 68 [4] 8D [2] 5? 5? 89 [2] 8B [1] 6A [1] E8 [4] 8B [1] 83 [2] 89 [2] C6 [3] 85 [1] 74 [1] 0F 57 [1] 66 [3] C7 [6] 68 [4] C7 [6] C7 [6] E8 [4] 89 [1] EB }
72 | $a2 = { 3B [5] 0F 84 [4] 68 [4] 8D [5] 5? 5? 89 [5] 8B [1] 6A [1] E8 [4] 8B [1] 83 [2] 89 [5] C6 [3] 85 [1] 74 [1] 0F 57 [1] 66 [3] C7 [6] 68 [4] C7 [6] C7 [6] E8 [4] 89 [1] EB }
73 |
74 | condition:
75 | any of them
76 | }
77 |
78 | private rule id_7
79 | {
80 | meta:
81 | author = "Intezer Labs"
82 | strings:
83 | $a0 = { 48 [4] 48 [4] 48 [4] 4C [4] 41 [1] 48 [3] 48 [6] 48 [2] 48 [4] 48 [4] BB [4] FF 1? [4] 48 [2] 48 [4] 48 [8] 48 [6] FF 1? [4] 48 [2] 48 [6] FF 1? [4] 4C [2] 48 [6] FF 1? [4] 44 [2] 45 [2] 44 [2] 33 [1] 48 [2] FF 1? [4] 48 [2] 48 [4] 0F 1F [2] 66 [8] 4C [4] 44 [2] 48 [2] B9 [4] 41 [2] 85 [1] 0F 85 [4] 48 }
84 | $a1 = { 48 [4] 48 [4] 48 [4] 4C [4] 41 [1] 48 [3] 48 [6] 48 [2] 48 [4] 48 [4] BB [4] FF 1? [4] 48 [2] 48 [4] 48 [8] 48 [6] FF 1? [4] 48 [2] 48 [6] FF 1? [4] 4C [2] 48 [6] FF 1? [4] 44 [2] 45 [2] 44 [2] 33 [1] 48 [2] FF 1? [4] 48 [2] 48 [4] 0F 1F [2] 66 [8] 4C [4] 44 [2] 48 [2] B9 [4] 41 [2] 85 [1] 75 [1] 48 }
85 |
86 | condition:
87 | any of them
88 | }
89 |
90 | private rule id_8
91 | {
92 | meta:
93 | author = "Intezer Labs"
94 | strings:
95 | $a0 = { 8B [5] 33 [1] 89 [5] 39 [1] 0F 86 [4] EB }
96 | $b0 = { 68 [4] 69 [5] 8D [2] 5? 8B [5] BA [4] E8 [4] 8D [2] 8B [1] E8 [4] 83 [2] 8B [1] FF 1? [4] 8D [5] 5? 8D [5] 5? 8D [5] 5? 8B [5] 6A [1] 83 [2] 03 [1] 5? FF B? [4] FF B? [4] FF 1? [4] 85 [1] 0F 85 }
97 |
98 | condition:
99 | any of ($a*) and any of ($b*)
100 | }
101 |
102 | private rule id_9
103 | {
104 | meta:
105 | author = "Intezer Labs"
106 | strings:
107 | $a0 = { 8B [5] 33 [1] 89 [5] 39 [1] 0F 86 [4] 66 [10] 69 [5] 8D [2] 8B [5] BA [4] 68 [4] E8 [4] 5? 8D [2] 8B [1] E8 [4] 83 [2] 8B [1] FF 1? [4] 8D [5] 5? 8D [5] 5? 8D [5] 5? 8B [5] 6A [1] 83 [2] 03 [1] 5? FF B? [4] FF B? [4] FF 1? [4] 85 [1] 0F 85 }
108 | $a1 = { 8B [5] 33 [1] 89 [5] 39 [1] 0F 86 [4] 0F 1F [6] 68 [4] 69 [5] 8D [2] 5? 8B [5] BA [4] E8 [4] 8D [2] 8B [1] E8 [4] 83 [2] 8B [1] FF 1? [4] 8D [5] 5? 8D [5] 5? 8D [5] 5? 8B [5] 6A [1] 83 [2] 03 [1] 5? FF B? [4] FF B? [4] FF 1? [4] 85 [1] 0F 85 }
109 |
110 | condition:
111 | any of them
112 | }
113 |
114 | private rule id_10
115 | {
116 | meta:
117 | author = "Intezer Labs"
118 | strings:
119 | $a0 = { 2B [1] 8D [2] 5? 6A [1] 89 [2] FF D? 5? FF 1? [4] 89 [2] FF 7? [1] 85 [1] 0F 84 [4] FF 7? [1] 5? FF 1? [4] 83 [2] FF 7? [1] 6A [1] FF D? 5? FF D? 83 [3] C7 [6] C7 [6] 7E [1] 8B [2] 8D [2] 5? 8D [2] E8 [4] 83 [2] 89 [2] FF 7? [1] 6A [1] FF D? 5? FF D? FF 7? [1] 6A [1] FF D? 5? FF 1? [4] 89 [2] 85 [1] 74 }
120 | $a1 = { 2B [1] 8D [2] 5? 6A [1] 89 [2] FF D? 5? FF 1? [4] 89 [2] FF 7? [1] 85 [1] 0F 84 [4] FF 7? [1] 5? FF 1? [4] 83 [2] FF 7? [1] 6A [1] FF D? 5? FF 1? [4] 83 [3] C7 [6] C7 [6] 0F 8E [4] 8B [2] 8D [2] 5? 8D [2] E8 [4] 83 [2] 89 [2] FF 7? [1] 6A [1] FF D? 5? FF 1? [4] FF 7? [1] 6A [1] FF D? 5? FF 1? [4] 89 [2] 85 [1] 0F 84 }
121 |
122 | condition:
123 | any of them
124 | }
125 |
126 | private rule id_11
127 | {
128 | meta:
129 | author = "Intezer Labs"
130 | strings:
131 | $a0 = { 4C [4] 4C [4] 48 [6] 48 [4] 4C [6] 41 [5] 48 [2] FF 1? [4] 85 [1] 0F 84 [4] 8B [5] 89 [5] 48 [6] 48 [6] 48 [6] 48 [4] 44 [4] 4C [4] 45 [2] 45 [2] 33 [1] 48 [6] FF 1? [4] 85 [1] 74 [1] 48 [6] 48 [6] 48 [6] E8 [4] 48 }
132 | $a1 = { 48 [4] 48 [4] 48 [6] 48 [4] 4C [6] 41 [5] 49 [2] FF 1? [4] 85 [1] 0F 84 [4] 8B [5] 89 [5] 48 [6] 48 [6] 48 [6] 48 [4] 89 [3] 48 [4] 45 [2] 45 [2] 33 [1] 48 [6] FF 1? [4] 85 [1] 0F 84 [4] 48 [6] 48 [6] 48 [6] E8 [4] 48 }
133 |
134 | condition:
135 | any of them
136 | }
137 |
138 | private rule id_12
139 | {
140 | meta:
141 | author = "Intezer Labs"
142 | strings:
143 | $a0 = { 48 [4] 48 [4] 48 [6] 48 [4] 4C [6] 41 [5] 49 [2] FF 1? [4] 85 [1] 74 [1] 8B [5] 89 [5] 48 [6] 48 [6] 48 [6] 48 [4] 89 [3] 48 [4] 45 [2] 45 [2] 33 [1] 48 [6] FF 1? [4] 85 [1] 0F 84 [4] 48 [6] 48 [6] 48 [6] E8 [4] 48 [2] 48 [2] E8 [4] EB }
144 |
145 | condition:
146 | any of them
147 | }
148 |
149 | rule passcat
150 | {
151 | meta:
152 | author = "Intezer Labs"
153 | date = "June 2020"
154 | condition:
155 | (id_1 or id_2 or id_3 or id_4 or id_5 or id_6 or id_7 or id_8 or id_9 or id_10 or id_11 or id_12)
156 | }
--------------------------------------------------------------------------------
/yara/quarkspwdump.yar:
--------------------------------------------------------------------------------
1 | private rule id_1
2 | {
3 | meta:
4 | author = "Intezer Labs"
5 | strings:
6 | $a0 = { BA [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] BA [4] C1 [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] BA [4] 6B [2] 8B [2] 88 [2] BA [4] D1 [1] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B9 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] BA [4] C1 [2] 8B [2] 88 [2] B9 [4] C1 [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] B9 [4] D1 [1] 8B [2] 88 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] B9 [4] 6B [2] 8B [2] 88 [2] C7 [6] 8B [2] 5? FF 1? [4] 8B [2] 5? FF 1? [4] 8B }
7 |
8 | condition:
9 | any of them
10 | }
11 |
12 | private rule id_2
13 | {
14 | meta:
15 | author = "Intezer Labs"
16 | strings:
17 | $a0 = { 8B [5] 83 [6] 0F 85 [4] 8D [5] 5? 6A [1] 8B [5] 81 C? [4] 5? E8 [4] 83 [2] 8D [5] 5? 8B [5] 05 [4] 5? 8B [5] 81 C? [4] 5? 8B [5] 5? 68 [4] 68 [4] 8D [5] 5? E8 [4] 83 [2] 8B [5] 83 [2] 89 [5] 83 [3] 74 [1] 8D [5] 5? E8 [4] 83 [2] EB }
18 |
19 | condition:
20 | any of them
21 | }
22 |
23 | private rule id_3
24 | {
25 | meta:
26 | author = "Intezer Labs"
27 | strings:
28 | $a0 = { 83 [3] 0F 85 [4] BA [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] BA [4] C1 [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] BA [4] 6B [2] 8B [2] 88 [2] BA [4] D1 [1] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B9 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] BA [4] C1 [2] 8B [2] 88 [2] B9 [4] C1 [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] B9 [4] D1 [1] 8B [2] 88 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] B9 [4] 6B [2] 8B [2] 88 [2] C7 [6] 8B [2] 5? FF 1? }
29 |
30 | condition:
31 | any of them
32 | }
33 |
34 | private rule id_4
35 | {
36 | meta:
37 | author = "Intezer Labs"
38 | strings:
39 | $a0 = { 68 [4] E8 [4] 83 [2] 8B [5] 83 [6] 0F 85 [4] 8D [5] 5? 6A [1] 8B [5] 81 C? [4] 5? E8 [4] 83 [2] 8D [5] 5? 8B [5] 05 [4] 5? 8B [5] 81 C? [4] 5? 8B [5] 5? 68 [4] 68 [4] 8D [5] 5? E8 [4] 83 [2] 8B [5] 83 [2] 89 [5] 83 [3] 74 }
40 |
41 | condition:
42 | any of them
43 | }
44 |
45 | private rule id_5
46 | {
47 | meta:
48 | author = "Intezer Labs"
49 | strings:
50 | $a0 = { C7 [6] 6A [1] 6A [1] 6A [1] 6A [1] 6A [1] 6A [1] 6A [1] 6A [1] 6A [1] 8D [2] 5? 8D [2] 5? 8B [2] 5? FF 1? [4] 89 [2] 83 [3] 0F 85 [4] 83 [3] 0F 85 [4] BA [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] BA [4] C1 [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] BA [4] 6B [2] 8B [2] 88 [2] BA [4] D1 [1] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B9 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] BA [4] C1 [2] 8B [2] 88 [2] B9 [4] C1 [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] B9 [4] D1 [1] 8B [2] 88 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] C1 [2] B8 [4] 6B [2] 0F B6 [3] 5? E8 [4] 83 [2] 0F B6 [1] 0B [1] B9 [4] 6B [2] 8B [2] 88 [2] C7 }
51 |
52 | condition:
53 | any of them
54 | }
55 |
56 | private rule id_6
57 | {
58 | meta:
59 | author = "Intezer Labs"
60 | strings:
61 | $a0 = { 8B [5] 83 [2] 89 [5] 83 [6] 0F 8D [4] 6A [1] 8B [2] 03 [5] 5? 8D [2] 5? E8 [4] 83 [2] 8D [2] 5? 8D [2] 5? E8 [4] 83 [2] 8D [2] 5? E8 [4] 83 [2] 8D [5] 5? 8D [2] 5? E8 [4] 83 [2] 6A [1] 8D [5] 5? 8B [5] 8D [3] 5? 8B [5] 8B [2] 8D [3] 5? E8 [4] 83 [2] 8B [5] 83 [2] 89 [5] 8B [5] 83 [2] 83 [2] 76 }
62 |
63 | condition:
64 | any of them
65 | }
66 |
67 | private rule id_7
68 | {
69 | meta:
70 | author = "Intezer Labs"
71 | strings:
72 | $a0 = { 8B [2] 8B [5] 89 [5] C7 [9] 8D [5] 5? 8D [5] 5? B9 [4] D1 [1] 8B [2] 8B [6] 5? 8B [2] 5? 8B [2] 5? E8 [4] 83 [2] 89 [5] 83 [6] 0F 85 [4] 6A [1] 68 [4] 8B [5] 5? 6A [1] FF 1? [4] 8B [2] 89 [5] 8B [2] 83 [6] 75 }
73 |
74 | condition:
75 | any of them
76 | }
77 |
78 | private rule id_8
79 | {
80 | meta:
81 | author = "Intezer Labs"
82 | strings:
83 | $a0 = { 83 [6] 0F 84 [4] 6A [1] 68 [4] 8B [5] 5? 6A [1] FF 1? [4] 8B [2] 89 [5] 6A [1] 68 [4] 8B [5] 5? 6A [1] FF 1? [4] 8B [2] 89 [5] 8B [2] 83 [6] 74 [1] 8B [2] 83 [6] 75 }
84 |
85 | condition:
86 | any of them
87 | }
88 |
89 | private rule id_9
90 | {
91 | meta:
92 | author = "Intezer Labs"
93 | strings:
94 | $a0 = { 5? 8B [1] 81 E? [4] A1 [4] 33 [1] 89 [2] 8B [2] 8B [5] 0F B7 [1] 89 [5] 83 [6] 74 [1] 8B [2] 83 [6] 77 [1] 8B [2] C7 [9] B8 [4] E9 }
95 |
96 | condition:
97 | any of them
98 | }
99 |
100 | private rule id_10
101 | {
102 | meta:
103 | author = "Intezer Labs"
104 | strings:
105 | $a0 = { 83 [6] 0F 8D [4] 6A [1] 8B [2] 03 [5] 5? 8D [2] 5? E8 [4] 83 [2] 8D [2] 5? 8D [2] 5? E8 [4] 83 [2] 8D [2] 5? E8 [4] 83 [2] 8D [5] 5? 8D [2] 5? E8 [4] 83 [2] 6A [1] 8D [5] 5? 8B [5] 8D [3] 5? 8B [5] 8B [2] 8D [3] 5? E8 [4] 83 [2] 8B [5] 83 [2] 89 [5] 8B [5] 83 [2] 83 [2] 76 [1] B8 [4] 2B [5] 89 }
106 |
107 | condition:
108 | any of them
109 | }
110 |
111 | rule quarkspwdump
112 | {
113 | meta:
114 | author = "Intezer Labs"
115 | date = "June 2020"
116 | condition:
117 | (id_1 or id_2 or id_3 or id_4 or id_5 or id_6 or id_7 or id_8 or id_9 or id_10)
118 | }
--------------------------------------------------------------------------------
/yara/vncdll.yar:
--------------------------------------------------------------------------------
1 | private rule id_1
2 | {
3 | meta:
4 | author = "Intezer Labs"
5 | strings:
6 | $a0 = { 5? 8B [1] 6A [1] 68 [4] 64 [5] 5? 64 [6] 5? 5? 8B [1] 5? 5? 8D [5] 8B [1] 89 [2] E8 [4] 8B [5] C7 [6] 8B [1] 3B [1] 74 [1] 8B [1] 8B [1] 0F B7 [2] 5? FF 5? [1] 83 [6] 75 [1] 8B [1] 3B [5] 75 }
7 | $a1 = { 5? 8B [1] 6A [1] 68 [4] 64 [5] 5? 64 [6] 5? 5? 5? 8B [1] 8D [5] 5? 8B [1] 89 [2] E8 [4] 8B [5] 8B [1] C7 [6] 3B [1] 74 [1] 0F B7 [2] 8B [1] 8B [2] 5? 8B [1] FF D? 83 [6] 75 [1] 8B [1] 3B [5] 75 }
8 |
9 | condition:
10 | any of them
11 | }
12 |
13 | private rule id_2
14 | {
15 | meta:
16 | author = "Intezer Labs"
17 | strings:
18 | $a0 = { 8B [2] 0F BF [1] C1 [2] 3B [1] 0F BF [1] 89 [2] 8B [2] 89 [2] 75 [1] 3B [1] 0F 84 [4] 0F B7 [1] 0F B7 [1] C1 [2] 0B [1] 0F B7 [5] 5? 5? 5? FF 1? [4] 8B [2] 8D [2] 5? 8D [2] 5? E8 [4] 5? B8 [4] 5? 8B [1] 5? C2 }
19 | $a1 = { 8B [2] 0F BF [1] C1 [2] 0F BF [1] 89 [2] 3B [1] 8B [2] 89 [2] 75 [1] 3B [1] 74 [1] 0F B7 [1] 0F B7 [1] 0F B7 [5] C1 [2] 0B [1] 5? 5? 5? FF 1? [4] 8D [2] 5? 8D [2] 5? 8B [2] E8 [4] 5? B8 [4] 5? 8B [1] 5? C2 }
20 |
21 | condition:
22 | any of them
23 | }
24 |
25 | private rule id_3
26 | {
27 | meta:
28 | author = "Intezer Labs"
29 | strings:
30 | $a0 = { 5? 68 [4] 8D [5] 6A [1] 5? E8 [4] 83 [2] C7 [6] 8D [5] 5? 6A [1] 6A [1] FF 1? [4] 8B [2] C7 [6] 85 [1] 74 [1] 8B [1] 8B [2] 8B [2] 2B [1] 89 [2] 8B [2] 2B [1] C7 [6] 89 [2] 89 [2] 89 [2] 5? 68 [4] C6 [6] E8 [4] 8B [1] 83 [2] 85 [1] 0F 84 }
31 |
32 | condition:
33 | any of them
34 | }
35 |
36 | private rule id_4
37 | {
38 | meta:
39 | author = "Intezer Labs"
40 | strings:
41 | $a0 = { 8B [2] 8D [2] 6A [1] 5? E8 [4] 85 [1] 0F 84 [4] 8B [2] 8B [1] 8B [1] 81 E? [4] C1 [2] 0B [1] 8B [1] C1 [2] 81 E? [4] 0B [1] C1 [2] C1 [2] 0B [1] 8D [2] 5? E8 [4] 8B [1] 83 [2] 85 [1] 0F 84 [4] 5? C6 [3] 8B [2] 5? E8 [4] 85 [1] 75 }
42 | $a1 = { 8B [2] 6A [1] 8D [2] 5? E8 [4] 85 [1] 0F 84 [4] 8B [2] 8B [1] 8B [1] 8B [1] 81 E? [4] C1 [2] 25 [4] C1 [2] 0B [1] 0B [1] C1 [2] C1 [2] 0B [1] 8D [2] 5? E8 [4] 8B [1] 83 [2] 85 [1] 0F 84 [4] 5? C6 [3] 8B [2] 5? E8 [4] 85 [1] 75 }
43 |
44 | condition:
45 | any of them
46 | }
47 |
48 | private rule id_5
49 | {
50 | meta:
51 | author = "Intezer Labs"
52 | strings:
53 | $a0 = { 5? 8B [1] 64 [5] 6A [1] 68 [4] 5? 64 [6] 83 [3] 5? 8B [2] 5? 5? 8B [1] 74 [1] 8B [5] 2B [1] 99 33 [1] 2B [1] 75 [1] 8B [5] 2B [2] 99 33 [1] 2B [1] 74 }
54 | $a1 = { 5? 8B [1] 64 [5] 6A [1] 68 [4] 5? 64 [6] 83 [3] 5? 5? 5? 8B [2] 8B [1] 74 [1] 8B [5] 2B [1] 99 33 [1] 2B [1] 75 [1] 8B [5] 2B [2] 99 33 [1] 2B [1] 74 }
55 |
56 | condition:
57 | any of them
58 | }
59 |
60 | rule vncdll
61 | {
62 | meta:
63 | author = "Intezer Labs"
64 | date = "June 2020"
65 | condition:
66 | (id_1 or id_2 or id_3 or id_4 or id_5)
67 | }
--------------------------------------------------------------------------------