die-python 0.4.0__cp313-abi3-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- db/.vscode/about.txt +1 -0
- db/.vscode/settings.json +5 -0
- db/ACE +48 -0
- db/APK/APKProtect.2.sg +15 -0
- db/APK/APKProtector.2.sg +20 -0
- db/APK/AlibabaProtection.2.sg +15 -0
- db/APK/AndroidRepublic.2.sg +17 -0
- db/APK/ApktoolPlus.6.sg +12 -0
- db/APK/AppGuard.2.sg +17 -0
- db/APK/AppSolid.2.sg +12 -0
- db/APK/BaiduProtection.2.sg +18 -0
- db/APK/BangBangReinforcement.2.sg +27 -0
- db/APK/BangcleProtection.2.sg +14 -0
- db/APK/DXShield.2.sg +12 -0
- db/APK/DexProtector.2.sg +23 -0
- db/APK/DingXiangReinforcement.2.sg +14 -0
- db/APK/EasyShield.2.sg +19 -0
- db/APK/Gemalto.2.sg +19 -0
- db/APK/Hdus-Wjus.2.sg +14 -0
- db/APK/IL2CPP.4.sg +14 -0
- db/APK/Ijiami.2.sg +24 -0
- db/APK/Jiagu.2.sg +17 -0
- db/APK/Kiro.2.sg +12 -0
- db/APK/Kiwi.2.sg +23 -0
- db/APK/Kony.2.sg +12 -0
- db/APK/LIAPP.2.sg +16 -0
- db/APK/MedusaH.2.sg +12 -0
- db/APK/MobileTencentProtect.2.sg +14 -0
- db/APK/NQShield.2.sg +15 -0
- db/APK/NagaPTProtection.2.sg +14 -0
- db/APK/OLLVM-TTL.2.sg +14 -0
- db/APK/Obfuscapk.2.sg +14 -0
- db/APK/PackageName.1.sg +15 -0
- db/APK/PangXie.2.sg +14 -0
- db/APK/ProGuard.2.sg +12 -0
- db/APK/QDBH.2.sg +12 -0
- db/APK/Qihoo360Protection.2.sg +15 -0
- db/APK/SandHook.4.sg +16 -0
- db/APK/SecNeo.2.sg +19 -0
- db/APK/SecShell.2.sg +15 -0
- db/APK/SingleJar.3.sg +10 -0
- db/APK/TencentLegu.2.sg +18 -0
- db/APK/TencentProtection.2.sg +14 -0
- db/APK/TencentSecurity.2.sg +17 -0
- db/APK/TongfuShield.2.sg +21 -0
- db/APK/UnicomSDK.4.sg +21 -0
- db/APK/Unity.4.sg +12 -0
- db/APK/VDog.2.sg +16 -0
- db/APK/Yidun.2.sg +16 -0
- db/APK/_APK.0.sg +15 -0
- db/APK/_init +2 -0
- db/APK/iCrypt.2.sg +24 -0
- db/Amiga/DeliTracker.1.sg +14 -0
- db/Amiga/_Amiga.0.sg +15 -0
- db/Amiga/_init +2 -0
- db/Archive/_Archive.0.sg +17 -0
- db/Archive/_init +2 -0
- db/Binary/Amiga_loadable.1.sg +16 -0
- db/Binary/Empty.1.sg +11 -0
- db/Binary/Img.UDIF.1.sg +15 -0
- db/Binary/RIFF.1.sg +19 -0
- db/Binary/U-Boot.1.sg +321 -0
- db/Binary/Universal_Binary.1.sg +17 -0
- db/Binary/Video.FLV.1.sg +16 -0
- db/Binary/__MiniExtensionsHeuristic_By_DosX.7.sg +184 -0
- db/Binary/__MiniJavaScriptHeuristic_By_DosX.7.sg +44 -0
- db/Binary/_init +4 -0
- db/Binary/archive.7z.1.sg +14 -0
- db/Binary/archive.ACE.1.sg +10 -0
- db/Binary/archive.AR.1.sg +85 -0
- db/Binary/archive.ARC.1.sg +16 -0
- db/Binary/archive.ARJ.1.sg +9 -0
- db/Binary/archive.ASAR.sg +13 -0
- db/Binary/archive.BZip.1.sg +20 -0
- db/Binary/archive.CFL3.1.sg +25 -0
- db/Binary/archive.Cab.1.sg +25 -0
- db/Binary/archive.DEFLATE.1.sg +186 -0
- db/Binary/archive.DotBundle.sg +9 -0
- db/Binary/archive.LRZ.1.sg +57 -0
- db/Binary/archive.LZ4.1.sg +42 -0
- db/Binary/archive.LZOP.1.sg +13 -0
- db/Binary/archive.MS_Compound.1.sg +24 -0
- db/Binary/archive.PEA.1.sg +65 -0
- db/Binary/archive.RAR.1.sg +9 -0
- db/Binary/archive.Unity.1.sg +74 -0
- db/Binary/archive.ZIP.1.sg +10 -0
- db/Binary/archive.ZLIB.1.sg +14 -0
- db/Binary/archive.ZPAQ.1.sg +15 -0
- db/Binary/archive.btoa.1.sg +14 -0
- db/Binary/archives.1.sg +299 -0
- db/Binary/archives.ancient.sg +506 -0
- db/Binary/audio.1.sg +12079 -0
- db/Binary/audio.8svx.1.sg +16 -0
- db/Binary/audio.ACM.1.sg +22 -0
- db/Binary/audio.AU.1.sg +49 -0
- db/Binary/audio.DSS.1.sg +57 -0
- db/Binary/audio.FSB.1.sg +105 -0
- db/Binary/audio.VOC.1.sg +97 -0
- db/Binary/audio.WAV.1.sg +320 -0
- db/Binary/audio.mp3.2.sg +189 -0
- db/Binary/backup_images.1.sg +27 -0
- db/Binary/bin.AAALogo.1.sg +16 -0
- db/Binary/bin.Atari_ST.1.sg +12 -0
- db/Binary/bin.GameMaps.1.sg +13 -0
- db/Binary/bin.GuitarPro.1.sg +26 -0
- db/Binary/bin.Hermes.1.sg +16 -0
- db/Binary/bin.IDA.1.sg +78 -0
- db/Binary/bin.ISO_9660.1.sg +13 -0
- db/Binary/bin.JMDL.1.sg +34 -0
- db/Binary/bin.JSC.1.sg +88 -0
- db/Binary/bin.Java.1.sg +152 -0
- db/Binary/bin.KeePass.1.sg +22 -0
- db/Binary/bin.LUA.1.sg +48 -0
- db/Binary/bin.NVA.1.sg +15 -0
- db/Binary/bin.PDB.1.sg +16 -0
- db/Binary/bin.PEFF.1.sg +11 -0
- db/Binary/bin.PalmFile.1.sg +104 -0
- db/Binary/bin.Python.1.sg +628 -0
- db/Binary/bin.RPGMaker2Kdata.1.sg +242 -0
- db/Binary/bin.SWF.1.sg +26 -0
- db/Binary/bin.WAD.1.sg +19 -0
- db/Binary/bin.WindowsIconCacheDB.1.sg +34 -0
- db/Binary/bin.ZBMP.1.sg +16 -0
- db/Binary/cad.DWG.1.sg +63 -0
- db/Binary/cert.WinAuth.1.sg +13 -0
- db/Binary/database.SQLite.1.sg +45 -0
- db/Binary/databases.1.sg +117 -0
- db/Binary/debugData.1.sg +68 -0
- db/Binary/doc.CHM.1.sg +18 -0
- db/Binary/doc.DJVU.1.sg +113 -0
- db/Binary/doc.HLP.1.sg +11 -0
- db/Binary/doc.PDF.1.sg +16 -0
- db/Binary/doc.RTF.1.sg +13 -0
- db/Binary/donut.1.sg +49 -0
- db/Binary/font.ADOBE.1.sg +35 -0
- db/Binary/font.BMF.1.sg +63 -0
- db/Binary/format.MS-DBG.1.sg +19 -0
- db/Binary/format.MS-PST.sg +15 -0
- db/Binary/format.MS-VHD.1.sg +61 -0
- db/Binary/format.MS-VHDX.sg +16 -0
- db/Binary/format.MS-WIM.1.sg +43 -0
- db/Binary/format.MS-XNA.1.sg +80 -0
- db/Binary/format.UE.1.sg +36 -0
- db/Binary/format.VDI.1.sg +40 -0
- db/Binary/formats.1.sg +90 -0
- db/Binary/graphics.1.sg +37 -0
- db/Binary/image.ANI.1.sg +26 -0
- db/Binary/image.BMP.1.sg +48 -0
- db/Binary/image.CUR.1.sg +55 -0
- db/Binary/image.DDS.1.sg +26 -0
- db/Binary/image.EPS.1.sg +26 -0
- db/Binary/image.GIF.1.sg +95 -0
- db/Binary/image.ICO.1.sg +57 -0
- db/Binary/image.JNG.1.sg +34 -0
- db/Binary/image.JPEG.1.sg +52 -0
- db/Binary/image.JPEG.DQT.4.sg +13 -0
- db/Binary/image.JPEG.Tools.3.sg +53 -0
- db/Binary/image.JPEG.camera.2.sg +16 -0
- db/Binary/image.JPEG.comment.4.sg +16 -0
- db/Binary/image.JPEGXL.1.sg +15 -0
- db/Binary/image.KTX.1.sg +44 -0
- db/Binary/image.LBM.1.sg +69 -0
- db/Binary/image.MNG.1.sg +19 -0
- db/Binary/image.PCX.1.sg +69 -0
- db/Binary/image.PNG.1.sg +165 -0
- db/Binary/image.PSD.1.sg +63 -0
- db/Binary/image.PVR.1.sg +29 -0
- db/Binary/image.QOI.1.sg +36 -0
- db/Binary/image.TGA.1.sg +149 -0
- db/Binary/image.TIFF.1.sg +186 -0
- db/Binary/image.XAR.1.sg +31 -0
- db/Binary/img.VM.1.sg +13 -0
- db/Binary/overlays.6.sg +367 -0
- db/Binary/rom.1.sg +1327 -0
- db/Binary/shellcode.pe_to_shellcode.1.sg +107 -0
- db/Binary/srdi-monoxgas.1.sg +128 -0
- db/Binary/text.HTML.1.sg +14 -0
- db/Binary/text.Pascal.1.sg +19 -0
- db/Binary/text.RegistryFile.sg +20 -0
- db/Binary/text.Shell.1.sg +14 -0
- db/Binary/text.XML.1.sg +18 -0
- db/Binary/text.c.1.sg +35 -0
- db/Binary/text.pdb.1.sg +40 -0
- db/Binary/text.plaintext.3.sg +25 -0
- db/Binary/text.python.1.sg +17 -0
- db/Binary/text.script.2.sg +16 -0
- db/Binary/video.MP4.1.sg +16 -0
- db/Borland +19 -0
- db/COM/32-bit_crypt.2.sg +13 -0
- db/COM/4kZIP.2.sg +13 -0
- db/COM/8086_Forth_83.4.sg +14 -0
- db/COM/A3E.1.sg +13 -0
- db/COM/ABK-Scrambler.2.sg +12 -0
- db/COM/ACE_Scrambler.2.sg +34 -0
- db/COM/ACiDDRAW.1.sg +16 -0
- db/COM/ANS2ALL.1.sg +18 -0
- db/COM/ARF_AV_Inject.1.sg +14 -0
- db/COM/ASC2COM.1.sg +25 -0
- db/COM/ASIC-Basic.4.sg +21 -0
- db/COM/AVAST-Protect.2.sg +13 -0
- db/COM/AVPACK.2.sg +14 -0
- db/COM/AdFlt.2.sg +17 -0
- db/COM/Anti-Lamer_Cryptor.2.sg +14 -0
- db/COM/Anti-hack_encryption_system.2.sg +13 -0
- db/COM/AutoCracker.1.sg +14 -0
- db/COM/BAT2EXEC.2.sg +18 -0
- db/COM/BIN-Lock.2.sg +14 -0
- db/COM/BatLite.4.sg +13 -0
- db/COM/Best_Protection_Kit-B.2.sg +16 -0
- db/COM/Borland_C++.4.sg +17 -0
- db/COM/Budokan.1.sg +13 -0
- db/COM/C-crypt.2.sg +14 -0
- db/COM/CC#3.2.sg +13 -0
- db/COM/CC.2.sg +22 -0
- db/COM/CC286.2.sg +14 -0
- db/COM/CCC.2.sg +16 -0
- db/COM/CHECKPRG.2.sg +13 -0
- db/COM/CNT.2.sg +13 -0
- db/COM/COM-Protect.2.sg +16 -0
- db/COM/COM-Protection.2.sg +13 -0
- db/COM/COM2TXT.1.sg +13 -0
- db/COM/COMCRYPT.2.sg +23 -0
- db/COM/COMPACK.2.sg +32 -0
- db/COM/COMPROTECT.2.sg +14 -0
- db/COM/COM_Sccrambler.2.sg +14 -0
- db/COM/COP.2.sg +14 -0
- db/COM/CPAV.1.sg +13 -0
- db/COM/CRX2COM.1.sg +12 -0
- db/COM/Character_Intro_Engine.1.sg +16 -0
- db/COM/Cheat_packer.2.sg +13 -0
- db/COM/CodeLock.2.sg +14 -0
- db/COM/ComProt.2.sg +13 -0
- db/COM/ComProtector.2.sg +18 -0
- db/COM/Comlock.2.sg +19 -0
- db/COM/CrAcKeR.2.sg +14 -0
- db/COM/Crack2EXE.1.sg +14 -0
- db/COM/CryptCom.2.sg +18 -0
- db/COM/CryptGeneric.2.sg +12 -0
- db/COM/Crypt_(Dismember).2.sg +16 -0
- db/COM/Crypto-King.2.sg +13 -0
- db/COM/CyberWare_Packer.2.sg +13 -0
- db/COM/DCFR.2.sg +13 -0
- db/COM/DIGPAK.1.sg +16 -0
- db/COM/DOC2COM.1.sg +13 -0
- db/COM/DOC2PAGE.1.sg +13 -0
- db/COM/DS-CRP.2.sg +16 -0
- db/COM/Datalight_C.4.sg +15 -0
- db/COM/Deep_Crypter.2.sg +14 -0
- db/COM/Deeper.2.sg +17 -0
- db/COM/Diet.2.sg +26 -0
- db/COM/Dn.COM_Cruncher.2.sg +13 -0
- db/COM/E2C-Scrambler.2.sg +13 -0
- db/COM/E2C.1.sg +16 -0
- db/COM/E2C1.2.sg +13 -0
- db/COM/EPW.2.sg +14 -0
- db/COM/EXE2COM.1.sg +72 -0
- db/COM/EXETools.2.sg +22 -0
- db/COM/EXETools_EXE2COM.1.sg +16 -0
- db/COM/Easy!-C.4.sg +13 -0
- db/COM/Entropy_Coder.2.sg +13 -0
- db/COM/ExOM.2.sg +14 -0
- db/COM/FCRYPT.2.sg +14 -0
- db/COM/FIXCRK.1.sg +13 -0
- db/COM/Fig-FORTH.4.sg +13 -0
- db/COM/ForthCMP.2.sg +23 -0
- db/COM/ForthCMP.4.sg +18 -0
- db/COM/FromBAT.1.sg +18 -0
- db/COM/GOAT.2.sg +19 -0
- db/COM/GP-FORTH.4.sg +14 -0
- db/COM/Guardian_Angel.2.sg +28 -0
- db/COM/HDKPROTC.2.sg +13 -0
- db/COM/HYPDOC.1.sg +13 -0
- db/COM/HackStop.2.sg +19 -0
- db/COM/ICE.1.sg +13 -0
- db/COM/IMMUN.1.sg +14 -0
- db/COM/Inbuild_Encryption.2.sg +14 -0
- db/COM/IntroC0der.1.sg +13 -0
- db/COM/J0B_cryptor.2.sg +13 -0
- db/COM/Keygen_crypt.2.sg +14 -0
- db/COM/Khrome_Crypt.2.sg +14 -0
- db/COM/LAME_GG.2.sg +12 -0
- db/COM/LAMPROT.2.sg +13 -0
- db/COM/LGLZ.2.sg +14 -0
- db/COM/LHA.1.sg +16 -0
- db/COM/LHarc_SFX.1.sg +16 -0
- db/COM/Lattice_C.4.sg +32 -0
- db/COM/List.1.sg +21 -0
- db/COM/Lock-Master.2.sg +14 -0
- db/COM/MASK.2.sg +26 -0
- db/COM/MCLock.2.sg +13 -0
- db/COM/MESS.2.sg +13 -0
- db/COM/MICRO-C.4.sg +16 -0
- db/COM/MIDPAK.1.sg +13 -0
- db/COM/MINIFORTH.4.sg +14 -0
- db/COM/MSCC.2.sg +14 -0
- db/COM/MakeRead.1.sg +14 -0
- db/COM/Maveriks_C0der.2.sg +16 -0
- db/COM/MegaShield.2.sg +14 -0
- db/COM/Microsoft_C.4.sg +13 -0
- db/COM/Microsoft_RTL.3.sg +16 -0
- db/COM/Microxor.2.sg +13 -0
- db/COM/MoonRock.2.sg +14 -0
- db/COM/NH.2.sg +13 -0
- db/COM/NetCode.1.sg +18 -0
- db/COM/NetRun.1.sg +13 -0
- db/COM/NoAV.2.sg +13 -0
- db/COM/Nodebug.2.sg +14 -0
- db/COM/ONLINE-HELP.1.sg +13 -0
- db/COM/OUTFORTH.4.sg +13 -0
- db/COM/PBFC.2.sg +14 -0
- db/COM/PCOM.2.sg +14 -0
- db/COM/PCRYPT.2.sg +14 -0
- db/COM/PCVault-Protect.2.sg +13 -0
- db/COM/PC_FORTH.4.sg +13 -0
- db/COM/PKLITE.2.sg +29 -0
- db/COM/PKZip.1.sg +18 -0
- db/COM/PRO-PACK.2.sg +21 -0
- db/COM/PROTECT.2.sg +67 -0
- db/COM/PTP.2.sg +16 -0
- db/COM/PU-Cryptor.2.sg +25 -0
- db/COM/PassCOM.2.sg +13 -0
- db/COM/Phrozen_Crew_cryptor.2.sg +13 -0
- db/COM/ProtEXE.2.sg +14 -0
- db/COM/R-Crypt.2.sg +19 -0
- db/COM/RCC.2.sg +25 -0
- db/COM/RDT_Compressor2.2.sg +13 -0
- db/COM/RDT_ENC_3.2.sg +13 -0
- db/COM/RELETTER.1.sg +14 -0
- db/COM/RMCOBOL.4.sg +16 -0
- db/COM/RSCC.2.sg +65 -0
- db/COM/SCC.2.sg +13 -0
- db/COM/SCRAM.2.sg +14 -0
- db/COM/SCRE2B.2.sg +14 -0
- db/COM/SCRNCH.2.sg +22 -0
- db/COM/SDW.2.sg +34 -0
- db/COM/SHOWV20.1.sg +18 -0
- db/COM/SHOW_IT.1.sg +13 -0
- db/COM/SHRINK.2.sg +14 -0
- db/COM/SP-FORTH.4.sg +18 -0
- db/COM/SPHINX_C--.4.sg +24 -0
- db/COM/Scramb.2.sg +18 -0
- db/COM/Scrypt!.2.sg +18 -0
- db/COM/Scrypt.2.sg +14 -0
- db/COM/SelfCrypt.2.sg +13 -0
- db/COM/SelfProtect386.2.sg +12 -0
- db/COM/Shadow.2.sg +14 -0
- db/COM/Shadow_COM_encryptor.2.sg +14 -0
- db/COM/Six-2-Four.2.sg +18 -0
- db/COM/SnoopStop.2.sg +14 -0
- db/COM/SoftGuard.1.sg +13 -0
- db/COM/Steplock.2.sg +14 -0
- db/COM/Surpas-86.4.sg +14 -0
- db/COM/Sydex.2.sg +13 -0
- db/COM/TCEC.2.sg +14 -0
- db/COM/TCOM.4.sg +16 -0
- db/COM/TPACK.2.sg +18 -0
- db/COM/TPC_Scramble.2.sg +12 -0
- db/COM/TXT2COM.1.sg +22 -0
- db/COM/TXTmaker.1.sg +14 -0
- db/COM/Text_Header.1.sg +14 -0
- db/COM/The_DRAW.1.sg +15 -0
- db/COM/Tiny_Xor.2.sg +14 -0
- db/COM/TurboBAT.1.sg +21 -0
- db/COM/Turbo_C++.4.sg +13 -0
- db/COM/Turbo_C.4.sg +27 -0
- db/COM/Turbo_Pascal.4.sg +30 -0
- db/COM/Txt2Exe.1.sg +14 -0
- db/COM/UNIFORTH.4.sg +13 -0
- db/COM/UPX.2.sg +22 -0
- db/COM/USCC.2.sg +14 -0
- db/COM/UnPackStop.2.sg +17 -0
- db/COM/UniCrypt.1.sg +14 -0
- db/COM/Unknown_cryptors.2.sg +74 -0
- db/COM/VGA_font_loader.1.sg +13 -0
- db/COM/VSF&K_protection.2.sg +13 -0
- db/COM/VSS.1.sg +13 -0
- db/COM/Vacsina.4.sg +12 -0
- db/COM/Venus.2.sg +12 -0
- db/COM/Vienna-C.4.sg +12 -0
- db/COM/Watcom_C.4.sg +37 -0
- db/COM/WiZ_Cryptor.2.sg +14 -0
- db/COM/XCK2COM.1.sg +12 -0
- db/COM/XE.2.sg +13 -0
- db/COM/XORCOPY.2.sg +14 -0
- db/COM/XPACK.2.sg +22 -0
- db/COM/XcomOR.2.sg +24 -0
- db/COM/XoReR.2.sg +26 -0
- db/COM/XorCom.2.sg +14 -0
- db/COM/Zbikowski_C.4.sg +13 -0
- db/COM/Zortech_C.4.sg +26 -0
- db/COM/_init +2 -0
- db/COM/aPACK.2.sg +22 -0
- db/COM/aPatch.2.sg +13 -0
- db/COM/acBBS_protection.2.sg +13 -0
- db/COM/com-crypt.2.sg +16 -0
- db/COM/com_RLE_packer.2.sg +15 -0
- db/COM/cryptors.2.sg +214 -0
- db/COM/envelope.2.sg +13 -0
- db/COM/fds-cp.2.sg +13 -0
- db/COM/integrity_checker.1.sg +13 -0
- db/COM/mCrypt.2.sg +14 -0
- db/COM/muSIMP-83.4.sg +14 -0
- db/COM/packers.2.sg +26 -0
- db/COM/patchers.1.sg +100 -0
- db/COM/protection.2.sg +13 -0
- db/COM/readme.com.1.sg +12 -0
- db/COM/simple_ansi_viewer.1.sg +12 -0
- db/COM/simple_self-displayer.1.sg +12 -0
- db/COM/spirit.2.sg +22 -0
- db/COM/x3.2.sg +18 -0
- db/CurIcoBPP +14 -0
- db/DEX/AESObfuscator.2.sg +14 -0
- db/DEX/APKProtect.2.sg +12 -0
- db/DEX/AlibabaProtection.2.sg +12 -0
- db/DEX/AllatoriObfuscator.2.sg +14 -0
- db/DEX/ApkEncryptor.2.sg +12 -0
- db/DEX/ApkToolPlus.6.sg +12 -0
- db/DEX/AppSolid.2.sg +12 -0
- db/DEX/BaiduProtection.2.sg +12 -0
- db/DEX/BangcleProtection.2.sg +12 -0
- db/DEX/EasyProtector.2.sg +12 -0
- db/DEX/Jiagu.2.sg +12 -0
- db/DEX/Kiwi.2.sg +12 -0
- db/DEX/LIAPP.2.sg +12 -0
- db/DEX/MedusaH.2.sg +12 -0
- db/DEX/ModGuard.2.sg +16 -0
- db/DEX/NQShield.2.sg +12 -0
- db/DEX/NagaPTProtection.2.sg +12 -0
- db/DEX/PangXie.2.sg +12 -0
- db/DEX/ProGuard.2.sg +12 -0
- db/DEX/QDBH.2.sg +12 -0
- db/DEX/SecNeo.2.sg +12 -0
- db/DEX/TencentProtection.2.sg +12 -0
- db/DEX/UnicomSDK.4.sg +12 -0
- db/DEX/VDog.2.sg +12 -0
- db/DEX/Yidun.2.sg +12 -0
- db/DEX/_DEX.0.sg +15 -0
- db/DEX/_init +2 -0
- db/DOS16M/_DOS16M.0.sg +15 -0
- db/DOS16M/_init +2 -0
- db/DOS4G/_DOS4G.0.sg +15 -0
- db/DOS4G/_init +2 -0
- db/ELF/Borland_Kylix.4.sg +19 -0
- db/ELF/Burneye.2.sg +12 -0
- db/ELF/DMD.4.sg +31 -0
- db/ELF/ELFCrypt.2.sg +12 -0
- db/ELF/Ezuri.1.sg +30 -0
- db/ELF/FASM.4.sg +23 -0
- db/ELF/Flexlm.4.sg +15 -0
- db/ELF/Free_Pascal.4.sg +46 -0
- db/ELF/GLIBC.3.sg +49 -0
- db/ELF/Go.4.sg +126 -0
- db/ELF/HASP.1.sg +28 -0
- db/ELF/HP_C++.4.sg +12 -0
- db/ELF/IBM_AIX_kernel_loader.sg +18 -0
- db/ELF/Oracle_Solaris_Studio.4.sg +47 -0
- db/ELF/PyInstaller.2.sg +24 -0
- db/ELF/QT.3.sg +44 -0
- db/ELF/Rust.4.sg +25 -0
- db/ELF/SDL.3.sg +35 -0
- db/ELF/UPX.2.sg +57 -0
- db/ELF/VBCC.4.sg +17 -0
- db/ELF/Virbox.2.sg +17 -0
- db/ELF/Watcom.4.sg +15 -0
- db/ELF/Zig.4.sg +22 -0
- db/ELF/_ELF.0.sg +15 -0
- db/ELF/_init +2 -0
- db/ELF/gcc.4.sg +95 -0
- db/ELF/gdc.4.sg +13 -0
- db/ELF/ldc.4.sg +34 -0
- db/ELF/movfuscator.4.sg +19 -0
- db/FASM +9 -0
- db/FPC +11 -0
- db/IPA/_init +2 -0
- db/JAR/SingleJar.3.sg +13 -0
- db/JAR/_JAR.0.sg +15 -0
- db/JAR/_init +2 -0
- db/LE/UPX.1.sg +85 -0
- db/LE/Watcom_C.4.sg +24 -0
- db/LE/_LE.0.sg +15 -0
- db/LE/_init +2 -0
- db/LX/Watcom C.4.sg +51 -0
- db/LX/_LX.0.sg +15 -0
- db/LX/_init +2 -0
- db/MACH/Carbon.3.sg +13 -0
- db/MACH/Cocoa.3.sg +11 -0
- db/MACH/Delphi.4.sg +21 -0
- db/MACH/QT.3.sg +18 -0
- db/MACH/UPX.2.sg +15 -0
- db/MACH/Virbox.2.sg +13 -0
- db/MACH/WebKit.3.sg +11 -0
- db/MACH/Zig.4.sg +22 -0
- db/MACH/_MACH.0.sg +15 -0
- db/MACH/_init +2 -0
- db/MACH/gcc.4.sg +35 -0
- db/MACH/java.3.sg +15 -0
- db/MACHOFAT/_MACHOFAT.0.sg +15 -0
- db/MACHOFAT/_init +2 -0
- db/MFC +14 -0
- db/MSDOS/$pirit.2.sg +47 -0
- db/MSDOS/32stub.0a.sg +13 -0
- db/MSDOS/ABKprot.2.sg +12 -0
- db/MSDOS/ACE.6.sg +10 -0
- db/MSDOS/AEP.2.sg +12 -0
- db/MSDOS/AINEXE.2.sg +19 -0
- db/MSDOS/ALEC.2.sg +14 -0
- db/MSDOS/ANS2ALL.1.sg +14 -0
- db/MSDOS/ARC.1.sg +23 -0
- db/MSDOS/ARJ.1.sg +14 -0
- db/MSDOS/ASIC-Basic.4.sg +18 -0
- db/MSDOS/AVAST_CRC-Check.2.sg +14 -0
- db/MSDOS/AVPACK.2.sg +16 -0
- db/MSDOS/Ada89.4.sg +13 -0
- db/MSDOS/Adys_COM2EXE.1.sg +11 -0
- db/MSDOS/Adys_Glue.2.sg +15 -0
- db/MSDOS/Aluwain.2.sg +12 -0
- db/MSDOS/Amisetup.1.sg +13 -0
- db/MSDOS/Anti-LAME.2.sg +13 -0
- db/MSDOS/Anti-hack_encryption_system.2.sg +13 -0
- db/MSDOS/Antilame.2.sg +14 -0
- db/MSDOS/ApBasic.4.sg +17 -0
- db/MSDOS/AutoHack.1.sg +12 -0
- db/MSDOS/Aztec_C-86.4.sg +40 -0
- db/MSDOS/BAT2EXEC.4.sg +16 -0
- db/MSDOS/BSTAR_FORTH.4.sg +13 -0
- db/MSDOS/BatLite.4.sg +13 -0
- db/MSDOS/BetterBASIC.4.sg +13 -0
- db/MSDOS/Bitlok.2.sg +14 -0
- db/MSDOS/Black_fist.2.sg +13 -0
- db/MSDOS/Blinker.0a.sg +25 -0
- db/MSDOS/Borland_C.4.sg +89 -0
- db/MSDOS/Borland_Pascal.4.sg +89 -0
- db/MSDOS/Borland_RTM.0a.sg +33 -0
- db/MSDOS/Borland_TDS.sg +14 -0
- db/MSDOS/Borland_TLINK.5.sg +13 -0
- db/MSDOS/Bunny.2.sg +14 -0
- db/MSDOS/CC.2.sg +18 -0
- db/MSDOS/CEPexe.2.sg +12 -0
- db/MSDOS/CERBERUS.2.sg +12 -0
- db/MSDOS/CII-C.4.sg +18 -0
- db/MSDOS/COMCRYPT.2.sg +15 -0
- db/MSDOS/COMPACK.2.sg +15 -0
- db/MSDOS/COMPROTECT.2.sg +14 -0
- db/MSDOS/CONVOY.2.sg +17 -0
- db/MSDOS/CPAV.1.sg +13 -0
- db/MSDOS/CRYPACK.2.sg +12 -0
- db/MSDOS/CRYPTEXE.2.sg +19 -0
- db/MSDOS/CSCRYPT_Pro.2.sg +14 -0
- db/MSDOS/CWSDPMI.0a.sg +22 -0
- db/MSDOS/CauseWay_DOS_Extender.0a.sg +16 -0
- db/MSDOS/ChSFX.1.sg +27 -0
- db/MSDOS/Ciphator.2.sg +12 -0
- db/MSDOS/Coderunner.1.sg +22 -0
- db/MSDOS/Codesafe.2.sg +13 -0
- db/MSDOS/ComProtector.2.sg +15 -0
- db/MSDOS/ComprEXE.2.sg +14 -0
- db/MSDOS/Compress-EXE.2.sg +14 -0
- db/MSDOS/Concurrent_Small_C.4.sg +16 -0
- db/MSDOS/CopyQM_SFX.1.sg +16 -0
- db/MSDOS/Copy_Protector.2.sg +15 -0
- db/MSDOS/Copylock_PC.1.sg +13 -0
- db/MSDOS/CrAcKeR.2.sg +14 -0
- db/MSDOS/CrackStop.2.sg +16 -0
- db/MSDOS/Cruncher.2.sg +12 -0
- db/MSDOS/CryExe.2.sg +12 -0
- db/MSDOS/CryptCom.2.sg +14 -0
- db/MSDOS/Crypt_(Dismember).2.sg +25 -0
- db/MSDOS/Crypt_(LightShow).2.sg +25 -0
- db/MSDOS/CrypteXeC.2.sg +15 -0
- db/MSDOS/Cryptors.2.sg +59 -0
- db/MSDOS/DAEMON_Protect.2.sg +12 -0
- db/MSDOS/DCREXE.2.sg +18 -0
- db/MSDOS/DIET.2.sg +33 -0
- db/MSDOS/DMC.2.sg +14 -0
- db/MSDOS/DOS32.0a.sg +22 -0
- db/MSDOS/DOS32_loader.0a.sg +14 -0
- db/MSDOS/DOS4G.0a.sg +16 -0
- db/MSDOS/DOSX16.0a.sg +27 -0
- db/MSDOS/DOS_16M.0a.sg +31 -0
- db/MSDOS/DOS_32A.0a.sg +22 -0
- db/MSDOS/DSHIELD.2.sg +11 -0
- db/MSDOS/Deeper.2.sg +17 -0
- db/MSDOS/DemoMaker.2.sg +14 -0
- db/MSDOS/DexEXE.2.sg +14 -0
- db/MSDOS/Digital_Research_C.4.sg +16 -0
- db/MSDOS/Disk_eXPress.1.sg +14 -0
- db/MSDOS/E-PROT.2.sg +14 -0
- db/MSDOS/EEXE.2.sg +14 -0
- db/MSDOS/EMMXXXX0_check.0a.sg +12 -0
- db/MSDOS/EMX.0a.sg +16 -0
- db/MSDOS/EPW.2.sg +18 -0
- db/MSDOS/EXARJ.1.sg +13 -0
- db/MSDOS/EXE-Crypt.2.sg +13 -0
- db/MSDOS/EXE-Cryptor.2.sg +19 -0
- db/MSDOS/EXE-Protect.2.sg +13 -0
- db/MSDOS/EXE2COM.1.sg +22 -0
- db/MSDOS/EXECUTRIX.2.sg +13 -0
- db/MSDOS/EXEGUARD.2.sg +12 -0
- db/MSDOS/EXEHigh.2.sg +14 -0
- db/MSDOS/EXEPACK.2.sg +57 -0
- db/MSDOS/EXETools.2.sg +16 -0
- db/MSDOS/EXETools_COM2EXE.1.sg +12 -0
- db/MSDOS/EXE_Manager.2.sg +14 -0
- db/MSDOS/EXE_Packer.2.sg +15 -0
- db/MSDOS/EXE_encryption.2.sg +13 -0
- db/MSDOS/Easy!-C.4.sg +15 -0
- db/MSDOS/Eliashim's_CodeTrack.1.sg +12 -0
- db/MSDOS/Encriptor.2.sg +12 -0
- db/MSDOS/Enkryptonator.2.sg +12 -0
- db/MSDOS/ExeCode.2.sg +18 -0
- db/MSDOS/ExeLITE.2.sg +15 -0
- db/MSDOS/ExeLock.2.sg +16 -0
- db/MSDOS/F-XLOCK.1.sg +13 -0
- db/MSDOS/FACRYPT.2.sg +12 -0
- db/MSDOS/FCP_IV.2.sg +13 -0
- db/MSDOS/FSE.2.sg +61 -0
- db/MSDOS/File_Shield.1.sg +19 -0
- db/MSDOS/Fitted_Modula-2.4.sg +14 -0
- db/MSDOS/ForthInfo.4.sg +18 -0
- db/MSDOS/FromBAT.1.sg +13 -0
- db/MSDOS/GFX_to_EXE.1.sg +14 -0
- db/MSDOS/GIFEXE.1.sg +16 -0
- db/MSDOS/GOAT.1.sg +21 -0
- db/MSDOS/GRABBER.1.sg +26 -0
- db/MSDOS/GRASP.4.sg +20 -0
- db/MSDOS/GamBit_Pro_Library.1.sg +14 -0
- db/MSDOS/GameWizard_DOS_Extender.0a.sg +12 -0
- db/MSDOS/Go32Stub.0a.sg +22 -0
- db/MSDOS/Graphic_WorkShop.1.sg +14 -0
- db/MSDOS/Guardian_Angel.2.sg +21 -0
- db/MSDOS/H+BEDV_SelfCheck.1.sg +18 -0
- db/MSDOS/HACKSTOP.2.sg +77 -0
- db/MSDOS/HASP.2.sg +14 -0
- db/MSDOS/HEALTH.2.sg +12 -0
- db/MSDOS/Header_Changer.2.sg +13 -0
- db/MSDOS/Hi-Tech_C.4.sg +16 -0
- db/MSDOS/HyperLOCK_386.2.sg +14 -0
- db/MSDOS/IBM_PC_Pascal.4.sg +32 -0
- db/MSDOS/ICE.1.sg +13 -0
- db/MSDOS/IMMUN.1.sg +14 -0
- db/MSDOS/Inertia.2.sg +14 -0
- db/MSDOS/Ironthorn.2.sg +14 -0
- db/MSDOS/JAM.2.sg +12 -0
- db/MSDOS/JmCryptExe.2.sg +19 -0
- db/MSDOS/John_Socha_Library.3.sg +13 -0
- db/MSDOS/Joke.2.sg +13 -0
- db/MSDOS/KeyMaker.2.sg +14 -0
- db/MSDOS/Khrome_Crypt.2.sg +12 -0
- db/MSDOS/Kvetch.2.sg +14 -0
- db/MSDOS/LE.0.sg +11 -0
- db/MSDOS/LGLZ.2.sg +14 -0
- db/MSDOS/LH.1.sg +11 -0
- db/MSDOS/LHA.1.sg +20 -0
- db/MSDOS/LHarc.1.sg +19 -0
- db/MSDOS/LOCK.2.sg +14 -0
- db/MSDOS/LSI_C.4.sg +14 -0
- db/MSDOS/LX.0.sg +11 -0
- db/MSDOS/LZEXE.2.sg +42 -0
- db/MSDOS/L_O_V_E__FORTH.4.sg +18 -0
- db/MSDOS/Lahey_Fortran.4.sg +15 -0
- db/MSDOS/LamerStop.2.sg +12 -0
- db/MSDOS/Lattice_C.4.sg +88 -0
- db/MSDOS/LockTite+.2.sg +12 -0
- db/MSDOS/Logitech_Modula-2.4.sg +14 -0
- db/MSDOS/MEGALITE.2.sg +12 -0
- db/MSDOS/MESS.2.sg +30 -0
- db/MSDOS/MSLite.1.sg +14 -0
- db/MSDOS/Maker.2.sg +14 -0
- db/MSDOS/Mandrake.2.sg +13 -0
- db/MSDOS/MegaBasic.4.sg +16 -0
- db/MSDOS/MegaBasic1.4.sg +30 -0
- db/MSDOS/Meridian_Ada.4.sg +29 -0
- db/MSDOS/Meridian_Pascal.4.sg +22 -0
- db/MSDOS/MetaWare_High_C.4.sg +30 -0
- db/MSDOS/MetaWare_Professional_Pascal.4.sg +24 -0
- db/MSDOS/Micro_Focus_Cobol.4.sg +19 -0
- db/MSDOS/Micro_Focus_DOS_extender.0a.sg +13 -0
- db/MSDOS/Microsoft_Basic.4.sg +23 -0
- db/MSDOS/Microsoft_C.4.sg +57 -0
- db/MSDOS/Microsoft_C_Library.3.sg +20 -0
- db/MSDOS/Microsoft_Fortran.4.sg +15 -0
- db/MSDOS/Microsoft_Quick_Basic.4.sg +35 -0
- db/MSDOS/Microsoft_Quick_Pascal.4.sg +16 -0
- db/MSDOS/Microsoft_RTL.3.sg +48 -0
- db/MSDOS/Microsoft_RTL_(Clipper).3.sg +13 -0
- db/MSDOS/MultiLoop_Protection.2.sg +13 -0
- db/MSDOS/MutaWWP.2.sg +14 -0
- db/MSDOS/Mutate.2.sg +21 -0
- db/MSDOS/NE.0.sg +11 -0
- db/MSDOS/NOCLIP.2.sg +14 -0
- db/MSDOS/NOTA.2.sg +14 -0
- db/MSDOS/NTShell.2.sg +14 -0
- db/MSDOS/Netware_loader.1.sg +12 -0
- db/MSDOS/Nodebug.2.sg +14 -0
- db/MSDOS/Novex.2.sg +12 -0
- db/MSDOS/Oberon-M.4.sg +14 -0
- db/MSDOS/Optlink.2.sg +31 -0
- db/MSDOS/Overlay.2.sg +13 -0
- db/MSDOS/Oyster.1.sg +13 -0
- db/MSDOS/PACKWIN.2.sg +14 -0
- db/MSDOS/PC-Guard.2.sg +30 -0
- db/MSDOS/PCC.4.sg +28 -0
- db/MSDOS/PCOM.2.sg +14 -0
- db/MSDOS/PDC_Prolog.4.sg +15 -0
- db/MSDOS/PGMPAK.2.sg +17 -0
- db/MSDOS/PGPROT.1.sg +12 -0
- db/MSDOS/PKEXE.2.sg +13 -0
- db/MSDOS/PKLITE.2.sg +59 -0
- db/MSDOS/PKSFX.1.sg +15 -0
- db/MSDOS/PKTINY.2.sg +14 -0
- db/MSDOS/PKZIP-SFX.1.sg +13 -0
- db/MSDOS/PKZIP_mini-sfx.1.sg +17 -0
- db/MSDOS/PK_sig.1.sg +12 -0
- db/MSDOS/PMODE.0a.sg +17 -0
- db/MSDOS/PMWLite.2.sg +14 -0
- db/MSDOS/PRO-PACK.2.sg +16 -0
- db/MSDOS/PRO32.0a.sg +14 -0
- db/MSDOS/PROPACK_SFX.1.sg +13 -0
- db/MSDOS/PROTECT.2.sg +101 -0
- db/MSDOS/PVAC.2.sg +14 -0
- db/MSDOS/Pacific_C.4.sg +24 -0
- db/MSDOS/Pack.2.sg +14 -0
- db/MSDOS/Packers.2.sg +17 -0
- db/MSDOS/Palladix.1.sg +12 -0
- db/MSDOS/Panda_immunizer.1.sg +14 -0
- db/MSDOS/Pascal_MT+86.4.sg +20 -0
- db/MSDOS/PassEXE.2.sg +12 -0
- db/MSDOS/Patchers.1.sg +18 -0
- db/MSDOS/Phar_Lap.0a.sg +31 -0
- db/MSDOS/Pksmart.2.sg +14 -0
- db/MSDOS/Power_C.4.sg +16 -0
- db/MSDOS/ProtEXE.2.sg +58 -0
- db/MSDOS/Protector.2.sg +13 -0
- db/MSDOS/Quadru-Lock.2.sg +12 -0
- db/MSDOS/R-Crypt.2.sg +13 -0
- db/MSDOS/RAR.6.sg +8 -0
- db/MSDOS/REC.2.sg +22 -0
- db/MSDOS/REC_small.1.sg +26 -0
- db/MSDOS/REC_small_AV.1.sg +18 -0
- db/MSDOS/RELETTER.1.sg +14 -0
- db/MSDOS/RERP.2.sg +13 -0
- db/MSDOS/RHC.2.sg +14 -0
- db/MSDOS/RJcrush.2.sg +12 -0
- db/MSDOS/RLE_com-packer.2.sg +13 -0
- db/MSDOS/RM_FORTRAN.4.sg +14 -0
- db/MSDOS/ROSETINY.2.sg +15 -0
- db/MSDOS/RSX.0a.sg +12 -0
- db/MSDOS/RTLink_VM_Manager.0a.sg +12 -0
- db/MSDOS/RTPatch_SFX.1.sg +13 -0
- db/MSDOS/Realia_Cobol.4.sg +16 -0
- db/MSDOS/Realia_SPITBOL.4.sg +14 -0
- db/MSDOS/Relpack.2.sg +14 -0
- db/MSDOS/SCRNCH.2.sg +14 -0
- db/MSDOS/SEA-AXE.2.sg +15 -0
- db/MSDOS/SFX.1.sg +14 -0
- db/MSDOS/SHOW_IT.1.sg +14 -0
- db/MSDOS/SP-FORTH.4.sg +18 -0
- db/MSDOS/Scramb.2.sg +13 -0
- db/MSDOS/Secure.2.sg +37 -0
- db/MSDOS/SelfChk.2.sg +14 -0
- db/MSDOS/Self_UnStuffer.2.sg +16 -0
- db/MSDOS/Shrink.2.sg +15 -0
- db/MSDOS/Shrinker.2.sg +14 -0
- db/MSDOS/SimplyWare.1.sg +22 -0
- db/MSDOS/Small_C.4.sg +20 -0
- db/MSDOS/SnoopStop.2.sg +12 -0
- db/MSDOS/StonyBrook_Pascal.4.sg +26 -0
- db/MSDOS/Stub-386.0a.sg +13 -0
- db/MSDOS/SuckStop.2.sg +27 -0
- db/MSDOS/Sydex_SFX.1.sg +19 -0
- db/MSDOS/Symantec_BASIC.4.sg +16 -0
- db/MSDOS/TCEC.2.sg +18 -0
- db/MSDOS/TMTSTUB.0a.sg +14 -0
- db/MSDOS/TSCRUNCH.2.sg +13 -0
- db/MSDOS/TTW.1.sg +17 -0
- db/MSDOS/TUCCRYP.2.sg +14 -0
- db/MSDOS/TXT2COM.1.sg +18 -0
- db/MSDOS/TXTmaker.1.sg +14 -0
- db/MSDOS/Tenth_Planet.2.sg +13 -0
- db/MSDOS/TinyProg.2.sg +27 -0
- db/MSDOS/Tinyprot.2.sg +16 -0
- db/MSDOS/Topspeed_C.4.sg +20 -0
- db/MSDOS/Topspeed_Modula.4.sg +42 -0
- db/MSDOS/TraceLock.2.sg +13 -0
- db/MSDOS/Trap.2.sg +50 -0
- db/MSDOS/TurboChainer.1.sg +13 -0
- db/MSDOS/Turbo_Basic.4.sg +18 -0
- db/MSDOS/Turbo_Prolog.4.sg +16 -0
- db/MSDOS/Txt2Exe.1.sg +14 -0
- db/MSDOS/UCEXE.2.sg +22 -0
- db/MSDOS/UPX.2.sg +46 -0
- db/MSDOS/UR_FORTH.4.sg +14 -0
- db/MSDOS/Un2pack.2.sg +14 -0
- db/MSDOS/UnPackStop.2.sg +33 -0
- db/MSDOS/UniVac.1.sg +14 -0
- db/MSDOS/Unknown_cryptors.2.sg +54 -0
- db/MSDOS/Upper_Deck_Forth.4.sg +14 -0
- db/MSDOS/V-Load.1.sg +13 -0
- db/MSDOS/Visual_Cobol.4.sg +16 -0
- db/MSDOS/WATCOM.4.sg +59 -0
- db/MSDOS/WDOSX.0a.sg +14 -0
- db/MSDOS/WDOSX32.0a.sg +12 -0
- db/MSDOS/WPFORTH.4.sg +14 -0
- db/MSDOS/WWPACK.2.sg +89 -0
- db/MSDOS/WWPACK_mutator.2.sg +53 -0
- db/MSDOS/Whitesmiths_C.4.sg +21 -0
- db/MSDOS/Window_book.1.sg +21 -0
- db/MSDOS/Wizardy_protection.1.sg +12 -0
- db/MSDOS/WordPerfect_EXEPack.2.sg +12 -0
- db/MSDOS/XDOC.2.sg +13 -0
- db/MSDOS/XMLOD.0a.sg +16 -0
- db/MSDOS/XPACK.2.sg +37 -0
- db/MSDOS/Xtender.0a.sg +14 -0
- db/MSDOS/ZIPSCRUB.2.sg +14 -0
- db/MSDOS/ZOO.1.sg +14 -0
- db/MSDOS/Zbikowski_C.4.sg +19 -0
- db/MSDOS/Zip.6.sg +8 -0
- db/MSDOS/Zortech(Symantec)_C.4.sg +56 -0
- db/MSDOS/Zurenava_DOS_Extender.0a.sg +13 -0
- db/MSDOS/_MSDOS.0.sg +15 -0
- db/MSDOS/_init +52 -0
- db/MSDOS/aPACK.2.sg +60 -0
- db/MSDOS/aPatch.2.sg +13 -0
- db/MSDOS/anti-tracing_add-on.1.sg +12 -0
- db/MSDOS/com2exe.2.sg +21 -0
- db/MSDOS/cramble.2.sg +12 -0
- db/MSDOS/deep-CRyPTer.2.sg +12 -0
- db/MSDOS/djgpp.4.sg +16 -0
- db/MSDOS/dos_extender.0a.sg +16 -0
- db/MSDOS/dos_extender1.0a.sg +13 -0
- db/MSDOS/dos_extender2.0a.sg +16 -0
- db/MSDOS/iLUCRYPT.2.sg +18 -0
- db/MSDOS/immunizer.1.sg +13 -0
- db/MSDOS/mbp_SHRINK.2.sg +13 -0
- db/MSDOS/muLISP-87.4.sg +20 -0
- db/MSDOS/nbuild.2.sg +12 -0
- db/MSDOS/overlays.6.sg +73 -0
- db/MSDOS/self-displayer.1.sg +13 -0
- db/MSDOS/virus.1.sg +13 -0
- db/NE/ARC_SFX.1.sg +13 -0
- db/NE/Borland_C++.1.sg +25 -0
- db/NE/Borland_Pascal.1.sg +13 -0
- db/NE/MS_RTL.0.sg +28 -0
- db/NE/PKZIP-SFX.1.sg +13 -0
- db/NE/Setup-Specialist.1.sg +16 -0
- db/NE/Sydex_SFX.1.sg +13 -0
- db/NE/Watcom_C.1.sg +35 -0
- db/NE/_NE.0.sg +15 -0
- db/NE/_init +2 -0
- db/NPM/JavaScript.5.sg +11 -0
- db/NPM/PackageName.1.sg +15 -0
- db/NPM/TypeScript.5.sg +11 -0
- db/NPM/_NPM.0.sg +16 -0
- db/NPM/_init +2 -0
- db/PE/12Ghosts_Zip2.1.sg +16 -0
- db/PE/32Lite.2.sg +13 -0
- db/PE/7z.1.sg +43 -0
- db/PE/7z.4.sg +14 -0
- db/PE/7z.6.sg +21 -0
- db/PE/ACCAStore.1.sg +14 -0
- db/PE/ACE.6.sg +10 -0
- db/PE/ACProtect.2.sg +30 -0
- db/PE/ADS_Self_Extractor.1.sg +14 -0
- db/PE/AHTeam_EP_Protector.2.sg +71 -0
- db/PE/AHpacker.2.sg +13 -0
- db/PE/AMD_FSR.4.sg +23 -0
- db/PE/ANDpakk.2.sg +21 -0
- db/PE/AOLSetup.1.sg +15 -0
- db/PE/ARJSFX.1.sg +44 -0
- db/PE/ARM_Protector.2.sg +21 -0
- db/PE/ARQ.1.sg +16 -0
- db/PE/ASDPack.2.sg +12 -0
- db/PE/ASM_Guard.2.sg +27 -0
- db/PE/ASPR_Stripper.2.sg +12 -0
- db/PE/ASPack.2.sg +95 -0
- db/PE/ASProtect.2.sg +56 -0
- db/PE/AT4RE_Protector.2.sg +13 -0
- db/PE/AZProtect_0001.2.sg +11 -0
- db/PE/Aase_Crypter.2.sg +12 -0
- db/PE/Abbyy_Lingvo.1.sg +15 -0
- db/PE/Acronis_installer.1.sg +30 -0
- db/PE/ActiveMark.2.sg +14 -0
- db/PE/Active_Delivery.1.sg +16 -0
- db/PE/Actual_Installer.1.sg +16 -0
- db/PE/Adobe_FlashPlayer_downloader.1.sg +17 -0
- db/PE/Adobe_installers.1.sg +32 -0
- db/PE/Advanced_BAT_to_EXE_converter.2.sg +13 -0
- db/PE/Advanced_installer.1.sg +30 -0
- db/PE/Adveractive.1.sg +14 -0
- db/PE/Aeco_installer.1.sg +13 -0
- db/PE/Agile.2.sg +11 -0
- db/PE/Alchemy_Mindworks_installer.1.sg +19 -0
- db/PE/Alex_Protector.2.sg +15 -0
- db/PE/Alienyze.1.sg +14 -0
- db/PE/Amber.2.sg +17 -0
- db/PE/Anskya_Binder.2.sg +12 -0
- db/PE/Anskya_NTPacker_Generator.2.sg +11 -0
- db/PE/AntiDote.2.sg +33 -0
- db/PE/Anticrack_Software_Protector.2.sg +15 -0
- db/PE/App_Encryptor.2.sg +13 -0
- db/PE/ArmDot.2.sg +17 -0
- db/PE/Armadillo.2.sg +48 -0
- db/PE/Arxan.2.sg +69 -0
- db/PE/AssemblyInvoke.2.sg +11 -0
- db/PE/Astrum.1.sg +21 -0
- db/PE/AtomPePacker.2.sg +16 -0
- db/PE/AutoHotKey.3.sg +20 -0
- db/PE/AutoIt.3.sg +21 -0
- db/PE/AutoPlay_Media_Studio.1.sg +26 -0
- db/PE/Autodesk_Self-Extract.1.sg +14 -0
- db/PE/AutorunProEnterprise.1.sg +16 -0
- db/PE/AutorunProEnterpriseII.1.sg +16 -0
- db/PE/AverCryptor.2.sg +22 -0
- db/PE/BJFnt.2.sg +18 -0
- db/PE/Babel_.NET.2.sg +23 -0
- db/PE/BatToExe.1.sg +15 -0
- db/PE/BatToExeConverter.2.sg +18 -0
- db/PE/BatchToApp.2.sg +15 -0
- db/PE/BattlEye.5.sg +18 -0
- db/PE/BattleshipCrypter.2.sg +12 -0
- db/PE/BeRo.2.sg +37 -0
- db/PE/BeRo_Tiny_Pascal.4.sg +13 -0
- db/PE/Berio.2.sg +15 -0
- db/PE/BitRock_Installer.1.sg +22 -0
- db/PE/BitShape_PE_Crypt.2.sg +15 -0
- db/PE/BlindSpot.2.sg +12 -0
- db/PE/Blizzard_PrePatch.1.sg +15 -0
- db/PE/Borland_C++.4.sg +37 -0
- db/PE/Break_Into_Pattern.2.sg +12 -0
- db/PE/BulletProofSoft_installer.1.sg +14 -0
- db/PE/ByfronTech.2.sg +67 -0
- db/PE/ByteGuard.2.sg +17 -0
- db/PE/Bytessence_Install_Maker.1.sg +19 -0
- db/PE/CExe.2.sg +13 -0
- db/PE/CICompress.2.sg +12 -0
- db/PE/CSDD_installer.1.sg +18 -0
- db/PE/CUDA-Driver.4.sg +14 -0
- db/PE/CZ_installer.1.sg +14 -0
- db/PE/Cab.1.sg +60 -0
- db/PE/Cab.6.sg +33 -0
- db/PE/Calibre_installer.1.sg +19 -0
- db/PE/Cameyo.2.sg +12 -0
- db/PE/Celesty_File_Binder.1.sg +18 -0
- db/PE/ChainskiCrypter.1.sg +11 -0
- db/PE/Chaos_Software_installer.1.sg +14 -0
- db/PE/Chilkat_ZIP_Self-Extractor.1.sg +14 -0
- db/PE/Chromium_Embedded_Framework.4.sg +14 -0
- db/PE/Chromium_WebView.4.sg +14 -0
- db/PE/CipherWall.1.sg +20 -0
- db/PE/CliSecure.2.sg +21 -0
- db/PE/ClickTeam.1.sg +17 -0
- db/PE/CodeCrypt.2.sg +21 -0
- db/PE/CodeFusion_Wizard.1.sg +14 -0
- db/PE/CodeSafe.2.sg +12 -0
- db/PE/CodeVeil.2.sg +20 -0
- db/PE/Code_Virtualizer.2.sg +12 -0
- db/PE/Codegear_Installer.1.sg +14 -0
- db/PE/Codewall.2.sg +18 -0
- db/PE/CoffeeCup_SFX.2.sg +14 -0
- db/PE/Confuser.2.sg +39 -0
- db/PE/CopyMinder.2.sg +11 -0
- db/PE/Costura.Fody.4.sg +11 -0
- db/PE/CreateInstall.1.sg +22 -0
- db/PE/Crinkler.2.sg +15 -0
- db/PE/CronosCrypter.1.sg +12 -0
- db/PE/Crunch.2.sg +25 -0
- db/PE/CrypKey.2.sg +20 -0
- db/PE/CrypKey_Installer.1.sg +14 -0
- db/PE/CrypToCrack_Pe_Protector.2.sg +15 -0
- db/PE/Cryptect.1.sg +13 -0
- db/PE/Cryptic.2.sg +12 -0
- db/PE/CryptoObfuscator.2.sg +17 -0
- db/PE/Cxfreeze.1.sg +23 -0
- db/PE/Cygwin32.4.sg +11 -0
- db/PE/DBPE.2.sg +25 -0
- db/PE/DECFortran.4.sg +23 -0
- db/PE/DMD.4.sg +44 -0
- db/PE/DNGuard.2.sg +33 -0
- db/PE/DS.EZ-Logic.sg +12 -0
- db/PE/DS.Eutron_SmartKey_dongle.5.sg +29 -0
- db/PE/DS.HASP_dongle.5.sg +22 -0
- db/PE/DS.Hardlock_dongle.5.sg +24 -0
- db/PE/DS.MARX_Crypto-Box_dongle.5.sg +30 -0
- db/PE/DS.Matrix_Hardware_Lock_dongle.5.sg +19 -0
- db/PE/DS.NetHASP_dongle.5.sg +19 -0
- db/PE/DS.Novex_dongle.4.sg +13 -0
- db/PE/DS.RLM.4.sg +25 -0
- db/PE/DS.SenseLock_dongle.5.sg +20 -0
- db/PE/DS.Sentinel_SuperPro.2.sg +21 -0
- db/PE/DS.Sentinel_SuperPro_dongle.5.sg +20 -0
- db/PE/DS.Sentinel_dongle.5.sg +28 -0
- db/PE/DS.SoftLok_dongle.5.sg +17 -0
- db/PE/DS.Unikey_dongle.5.sg +30 -0
- db/PE/DS.WIBU_Key_dongle.5.sg +20 -0
- db/PE/DS.Wizzkey_dongle.5.sg +13 -0
- db/PE/DYAMAR.2.sg +12 -0
- db/PE/DZA_Patcher.2.sg +15 -0
- db/PE/Daemon_Protect.2.sg +13 -0
- db/PE/DalKrypt.2.sg +12 -0
- db/PE/DataAnubis.1.sg +11 -0
- db/PE/DeepSea.2.sg +18 -0
- db/PE/DelZip_SFX.2.sg +14 -0
- db/PE/Delphi.4.sg +270 -0
- db/PE/Denuvo.2.sg +97 -0
- db/PE/DeployMaster.1.sg +15 -0
- db/PE/Dimd_SFX.1.sg +15 -0
- db/PE/Ding_Boys_PE-lock_Phantasm.2.sg +18 -0
- db/PE/Direct2D.4.sg +14 -0
- db/PE/Direct3D.4.sg +38 -0
- db/PE/DirectX.4.sg +14 -0
- db/PE/Dolphin_VM.1.sg +18 -0
- db/PE/DotFix_Nice_Protect.2.sg +23 -0
- db/PE/Dotfuscator.2.sg +11 -0
- db/PE/Duals_eXe_Encryptor.2.sg +19 -0
- db/PE/DxPack.2.sg +22 -0
- db/PE/ENIGMA.2.sg +115 -0
- db/PE/EXE32Pack.2.sg +12 -0
- db/PE/EXECryptor.2.sg +99 -0
- db/PE/EXEFog.2.sg +22 -0
- db/PE/EXE_Password_Protector.2.sg +12 -0
- db/PE/Eazfuscator.2.sg +16 -0
- db/PE/ElecKey.2.sg +33 -0
- db/PE/ElectronApp.3.sg +22 -0
- db/PE/Enigma_Virtual_Box.2.sg +13 -0
- db/PE/Envoy_Packager.1.sg +15 -0
- db/PE/Escargot.2.sg +15 -0
- db/PE/Eschalon_installer.1.sg +15 -0
- db/PE/ExE_Pack.2.sg +23 -0
- db/PE/Excelsior_Installer.1.sg +14 -0
- db/PE/Excelsior_JET.4.sg +36 -0
- db/PE/ExeSplitter.1.sg +24 -0
- db/PE/ExeStealth.2.sg +40 -0
- db/PE/Exe_Guarder.2.sg +12 -0
- db/PE/Exe_Locker.2.sg +12 -0
- db/PE/Exe_Shield.2.sg +28 -0
- db/PE/FASM.4.sg +22 -0
- db/PE/FDM_Installer.1.sg +18 -0
- db/PE/FISH_.NET.2.sg +17 -0
- db/PE/FSG.2.sg +136 -0
- db/PE/FileSplit_Self-Merger.2.sg +13 -0
- db/PE/FishPE_Shield.2.sg +21 -0
- db/PE/Fish_PE.2.sg +22 -0
- db/PE/FixupPak.2.sg +12 -0
- db/PE/Fox_Pro.3.sg +25 -0
- db/PE/FreeBasic.6.sg +28 -0
- db/PE/FreeJoiner.1.sg +45 -0
- db/PE/Free_Pascal.4.sg +54 -0
- db/PE/Fusion.2.sg +12 -0
- db/PE/G!X_Protector.2.sg +12 -0
- db/PE/GPInstall.1.sg +19 -0
- db/PE/GSplit.1.sg +20 -0
- db/PE/GZip.1.sg +20 -0
- db/PE/GameGuard.2.sg +12 -0
- db/PE/Gentee_Installer.1.sg +35 -0
- db/PE/Ghost_Installer.1.sg +16 -0
- db/PE/GkSetup.1.sg +18 -0
- db/PE/Go.4.sg +61 -0
- db/PE/Goats_PE_Mutilator.2.sg +12 -0
- db/PE/GoldSrc.3.sg +20 -0
- db/PE/Goliath.2.sg +15 -0
- db/PE/Gremlin_patcher.1.sg +21 -0
- db/PE/HASP.2.sg +22 -0
- db/PE/HASP_HL_Protection.2.sg +34 -0
- db/PE/HTML_executable.1.sg +20 -0
- db/PE/HackShield.2.sg +17 -0
- db/PE/Hide&Protect.2.sg +12 -0
- db/PE/HidePE.2.sg +255 -0
- db/PE/Huan.1.sg +12 -0
- db/PE/HyperTech_Crackproof.2.sg +13 -0
- db/PE/I-D_Media_installer.1.sg +15 -0
- db/PE/IDM_Installer.1.sg +15 -0
- db/PE/ID_Application_Protector(NoNamePacker).2.sg +12 -0
- db/PE/ILProtector.2.sg +13 -0
- db/PE/ILUCRYPT.2.sg +15 -0
- db/PE/IMPostor_Pack.2.sg +12 -0
- db/PE/INCrypter.2.sg +12 -0
- db/PE/INFTool.1.sg +15 -0
- db/PE/INTENIUM.1.sg +13 -0
- db/PE/IProtect.2.sg +17 -0
- db/PE/Inno_Setup_Module.1.sg +97 -0
- db/PE/Inquartos_Obfuscator.2.sg +12 -0
- db/PE/Instalit.1.sg +25 -0
- db/PE/Install4j_installer.1.sg +16 -0
- db/PE/InstallAnywhere.1.sg +36 -0
- db/PE/InstallShield.1.sg +90 -0
- db/PE/InstallUs.1.sg +16 -0
- db/PE/Install_Factory.1.sg +14 -0
- db/PE/Intel_C.4.sg +14 -0
- db/PE/Intel_IPP.sg +15 -0
- db/PE/IntelliProtector.2.sg +17 -0
- db/PE/InxObfuscator.2.sg +14 -0
- db/PE/JDPack.2.sg +15 -0
- db/PE/JScript.4.sg +15 -0
- db/PE/Jar2exe.1.sg +26 -0
- db/PE/KBys_Packer.2.sg +21 -0
- db/PE/KGCrypt.2.sg +11 -0
- db/PE/KRZIP_SFX.2.sg +15 -0
- db/PE/KoiVM.2.sg +20 -0
- db/PE/Kryptonit.2.sg +17 -0
- db/PE/LARP.2.sg +13 -0
- db/PE/LCC-Win32.4.sg +15 -0
- db/PE/LCL.5.sg +17 -0
- db/PE/LDK.2.sg +21 -0
- db/PE/LDK_.NET.2.sg +13 -0
- db/PE/Lahey_Fortran_90.4.sg +20 -0
- db/PE/LameCrypt.2.sg +12 -0
- db/PE/Laserlok.2.sg +12 -0
- db/PE/LimeCrypter.2.sg +56 -0
- db/PE/Lua_Runtime.4.sg +17 -0
- db/PE/LucasArts_Update_Installer.1.sg +14 -0
- db/PE/Lyme_SFX.1.sg +15 -0
- db/PE/MEW.2.sg +26 -0
- db/PE/MP-ZipTool.1.sg +14 -0
- db/PE/MPQ.1.sg +15 -0
- db/PE/MPRESS.2.sg +52 -0
- db/PE/MSLRH.2.sg +117 -0
- db/PE/MZ-Crypt.2.sg +12 -0
- db/PE/MZ0oPE.2.sg +12 -0
- db/PE/MaskPE.2.sg +15 -0
- db/PE/Maxtocode.2.sg +21 -0
- db/PE/Metrowerks_CodeWarrior.2.sg +26 -0
- db/PE/MicroJoiner.1.sg +21 -0
- db/PE/Microsoft.6.sg +1735 -0
- db/PE/Microsoft_C_Runtime.4.sg +16 -0
- db/PE/Microsoft_Class_Installer.1.sg +22 -0
- db/PE/Microsoft_Compound-based_installer.1.sg +14 -0
- db/PE/Microsoft_Edge_WebView.4.sg +14 -0
- db/PE/Microsoft_NET_Runtime.4.sg +15 -0
- db/PE/Microsoft_Warbird.2.sg +15 -0
- db/PE/Microsoft_dotNET_installer.1.sg +16 -0
- db/PE/Miktex_Installer.1.sg +15 -0
- db/PE/MinGW.4.sg +78 -0
- db/PE/Minke.2.sg +12 -0
- db/PE/Mioplanet_installer.1.sg +14 -0
- db/PE/MoleBox.2.sg +41 -0
- db/PE/Morphnah.2.sg +23 -0
- db/PE/Multimedia_Fusion_Installer.1.sg +14 -0
- db/PE/Mystic_Compressor.2.sg +15 -0
- db/PE/N-Joiner.1.sg +12 -0
- db/PE/N-Joy.2.sg +25 -0
- db/PE/NETZ.2.sg +11 -0
- db/PE/NET_Spider.2.sg +14 -0
- db/PE/NOS_Installer.1.sg +22 -0
- db/PE/NOS_Packer.2.sg +13 -0
- db/PE/NTShell.2.sg +13 -0
- db/PE/NTkrnl_Protector.2.sg +37 -0
- db/PE/NakedPacker.2.sg +13 -0
- db/PE/NanoZip.1.sg +16 -0
- db/PE/NativeCryptor_by_DosX.2.sg +13 -0
- db/PE/Native_UD_Packer.2.sg +12 -0
- db/PE/NecroVM.Virt.2.sg +46 -0
- db/PE/NeoLite.2.sg +39 -0
- db/PE/NetReactor.2.sg +103 -0
- db/PE/NetShieldProtector.2.sg +55 -0
- db/PE/Newtonsoft.Json.4.sg +14 -0
- db/PE/Nim.4.sg +18 -0
- db/PE/Ningishzida.2.sg +12 -0
- db/PE/NodeJS_Nexe.sg +16 -0
- db/PE/NodeJS_Pkg.sg +16 -0
- db/PE/NoobyProtect.2.sg +12 -0
- db/PE/North_Star_PE_Shrinker.2.sg +12 -0
- db/PE/NsPacK.2.sg +61 -0
- db/PE/Nuitka.1.sg +26 -0
- db/PE/Nullsoft_Scriptable_Install_System.1.sg +96 -0
- db/PE/Nvidia_DLSS.4.sg +22 -0
- db/PE/Nvidia_PhysX.4.sg +15 -0
- db/PE/O'Setup95.1.sg +15 -0
- db/PE/ORiEN.2.sg +19 -0
- db/PE/Obfuscar.2.sg +14 -0
- db/PE/Obfuscator_.NET_2009.2.sg +16 -0
- db/PE/Obsidium.2.sg +272 -0
- db/PE/OneVM.2.sg +23 -0
- db/PE/OpenAL.4.sg +14 -0
- db/PE/OpenCL.4.sg +14 -0
- db/PE/OpenCV.4.sg +18 -0
- db/PE/OpenGL.4.sg +14 -0
- db/PE/OpenSSL.4.sg +14 -0
- db/PE/OpusAudio.4.sg +15 -0
- db/PE/Oreans_CodeVirtualizer.2.sg +14 -0
- db/PE/OxiJoiner.sg +15 -0
- db/PE/PACE.2.sg +17 -0
- db/PE/PACKWIN.2.sg +12 -0
- db/PE/PCInstall.1.sg +14 -0
- db/PE/PCShrink.2.sg +15 -0
- db/PE/PC_Guard.2.sg +20 -0
- db/PE/PE-Admin.2.sg +12 -0
- db/PE/PE-Armor.2.sg +21 -0
- db/PE/PE-Shield.2.sg +16 -0
- db/PE/PEBundle.2.sg +25 -0
- db/PE/PECRYPT32.2.sg +22 -0
- db/PE/PECompact.2.sg +167 -0
- db/PE/PELock.2.sg +47 -0
- db/PE/PESpin.2.sg +56 -0
- db/PE/PETetris.sg +11 -0
- db/PE/PEUnion.2.sg +122 -0
- db/PE/PE_Diminisher.2.sg +16 -0
- db/PE/PE_Encrypt.2.sg +12 -0
- db/PE/PE_Intro.2.sg +12 -0
- db/PE/PE_Lock_NT.2.sg +21 -0
- db/PE/PE_Password.2.sg +12 -0
- db/PE/PE_Protect.2.sg +15 -0
- db/PE/PEncrypt.2.sg +21 -0
- db/PE/PEnguinCrypt.2.sg +12 -0
- db/PE/PIMP.1.sg +14 -0
- db/PE/PKLITE.2.sg +15 -0
- db/PE/PKSFX.1.sg +14 -0
- db/PE/PMaker.1.sg +13 -0
- db/PE/PUNiSHER.2.sg +12 -0
- db/PE/Pack_Master.2.sg +12 -0
- db/PE/PackageForTheWeb.1.sg +15 -0
- db/PE/Packanoid.2.sg +12 -0
- db/PE/Packman.2.sg +18 -0
- db/PE/Pantaray_QSetup.1.sg +29 -0
- db/PE/Paquet.1.sg +16 -0
- db/PE/Paquet_Builder.1.sg +15 -0
- db/PE/Patch.1.sg +20 -0
- db/PE/PePack.2.sg +16 -0
- db/PE/PeX.2.sg +12 -0
- db/PE/Pe_Ninja.2.sg +12 -0
- db/PE/Pelles_C.4.sg +14 -0
- db/PE/Perl.3.sg +93 -0
- db/PE/PerlApp.1.sg +21 -0
- db/PE/Petite.2.sg +56 -0
- db/PE/Phoenix.2.sg +19 -0
- db/PE/Photo_Compiler.2.sg +15 -0
- db/PE/PowerBASIC.4.sg +14 -0
- db/PE/Power_Screen_Recorder.1.sg +16 -0
- db/PE/Private_EXE_Protector.2.sg +86 -0
- db/PE/PureBasic.4.sg +55 -0
- db/PE/PwdProtect.2.sg +11 -0
- db/PE/Py2exe.1.sg +15 -0
- db/PE/PyInstaller.2.sg +72 -0
- db/PE/PyInstallerHider.1.sg +27 -0
- db/PE/Python.3.sg +22 -0
- db/PE/Qt.4.sg +33 -0
- db/PE/Quantum.1.sg +17 -0
- db/PE/QuestPowerGUI.2.sg +16 -0
- db/PE/QuickBFC.2.sg +19 -0
- db/PE/QuickPack_NT.2.sg +13 -0
- db/PE/RADBasic.4.sg +17 -0
- db/PE/RCryptor.2.sg +39 -0
- db/PE/RDG_Tejon_Crypter.2.sg +12 -0
- db/PE/RJoiner.1.sg +17 -0
- db/PE/RLP.2.sg +12 -0
- db/PE/RLPack.2.sg +47 -0
- db/PE/RNsetup.1.sg +17 -0
- db/PE/RPP.1.sg +14 -0
- db/PE/RTPatch.1.sg +15 -0
- db/PE/ReNET-pack.2.sg +11 -0
- db/PE/RealBasic.4.sg +24 -0
- db/PE/RobustObfuscator.2.sg +15 -0
- db/PE/RosASM.4.sg +20 -0
- db/PE/Rust.4.sg +34 -0
- db/PE/SCE_installer.1.sg +18 -0
- db/PE/SC_Obfuscator.2.sg +12 -0
- db/PE/SC_Pack.2.sg +13 -0
- db/PE/SDL.4.sg +21 -0
- db/PE/SDProtector.2.sg +18 -0
- db/PE/SFXRun.1.sg +14 -0
- db/PE/SLVc0deProtector.2.sg +21 -0
- db/PE/STATICSUP.1.sg +14 -0
- db/PE/STUD.2.sg +12 -0
- db/PE/SVK_Protector.2.sg +22 -0
- db/PE/SZDD.1.sg +40 -0
- db/PE/Safedisc.2.sg +13 -0
- db/PE/Safenet_RMS.2.sg +12 -0
- db/PE/Safengine_Shielden.2.sg +43 -0
- db/PE/ScriptHookV.4.sg +14 -0
- db/PE/SecuPack.2.sg +13 -0
- db/PE/SecuROM.2.sg +22 -0
- db/PE/Secure_Shade.2.sg +13 -0
- db/PE/SerGreen_Appacker.2.sg +16 -0
- db/PE/Setup-Specialist.1.sg +15 -0
- db/PE/Setup_Factory.1.sg +42 -0
- db/PE/SfxCA.1.sg +20 -0
- db/PE/Shrink_Wrap.2.sg +12 -0
- db/PE/Shrinker.2.sg +27 -0
- db/PE/SimbiOZ.2.sg +19 -0
- db/PE/SimplePackerByEronana.2.sg +14 -0
- db/PE/Simple_Pack.2.sg +15 -0
- db/PE/Sixxpack.2.sg +20 -0
- db/PE/Skater.2.sg +16 -0
- db/PE/Smart_Assembly.2.sg +36 -0
- db/PE/Smart_Install_Maker.1.sg +17 -0
- db/PE/SmokesCrypt.2.sg +12 -0
- db/PE/SoftProtect.2.sg +13 -0
- db/PE/SoftSentry.2.sg +16 -0
- db/PE/Soft_Defender.2.sg +20 -0
- db/PE/Softlocx.1.sg +13 -0
- db/PE/Software_Compress.2.sg +15 -0
- db/PE/Sony_Windows_Installer.1.sg +16 -0
- db/PE/SpASM.4.sg +20 -0
- db/PE/Special_EXE_Password_Protector.2.sg +12 -0
- db/PE/SpicesNet.2.sg +34 -0
- db/PE/Spoon_Installer.1.sg +23 -0
- db/PE/Spoon_Studio.2.sg +16 -0
- db/PE/Squeez_SFX.1.sg +15 -0
- db/PE/Squirrel_installer.1.sg +16 -0
- db/PE/Squishy.2.sg +11 -0
- db/PE/StarForce.2.sg +58 -0
- db/PE/Ste@lth_PE.2.sg +16 -0
- db/PE/Steam.4.sg +14 -0
- db/PE/Stones_PE_Encryptor.2.sg +22 -0
- db/PE/Store_Installer.1.sg +13 -0
- db/PE/SwiftView_installer.1.sg +15 -0
- db/PE/Synactis_In-The-Box_Installer.1.sg +21 -0
- db/PE/TPP_Pack.2.sg +12 -0
- db/PE/Tages.2.sg +12 -0
- db/PE/Tarma_Installer.1.sg +29 -0
- db/PE/TheArk.2.sg +11 -0
- db/PE/Themida.2.sg +89 -0
- db/PE/Thinstall.2.sg +89 -0
- db/PE/TrueCrypt-VeraCrypt_installer.1.sg +18 -0
- db/PE/UFI_installer.1.sg +14 -0
- db/PE/UG2002_Cruncher.2.sg +12 -0
- db/PE/UPX-Patcher.6.sg +29 -0
- db/PE/UPX.2.sg +174 -0
- db/PE/UPXFreak.2.sg +12 -0
- db/PE/UPX_Inliner.2.sg +12 -0
- db/PE/UPX_Modifier.2.sg +12 -0
- db/PE/UPX_Mutanter.2.sg +21 -0
- db/PE/UPX_Protector.2.sg +12 -0
- db/PE/UPX_lock.2.sg +12 -0
- db/PE/UPX_scrambler.2.sg +20 -0
- db/PE/UPX_shit.2.sg +21 -0
- db/PE/UPXcrypter.2.sg +11 -0
- db/PE/UPolyX.2.sg +30 -0
- db/PE/UltraPro.2.sg +18 -0
- db/PE/UnoPiX.2.sg +27 -0
- db/PE/VBox.2.sg +15 -0
- db/PE/VCasm-Protector.2.sg +21 -0
- db/PE/VMProtect.2.sg +296 -0
- db/PE/VMProtect_NET.2.sg +57 -0
- db/PE/VPacker.2.sg +13 -0
- db/PE/VaySoft_PDF2EXE.2.sg +16 -0
- db/PE/VbsToExe.1.sg +31 -0
- db/PE/VbsToExeConverter.2.sg +18 -0
- db/PE/Virbox.2.sg +13 -0
- db/PE/Virtual_Pascal.4.sg +15 -0
- db/PE/Vise.1.sg +16 -0
- db/PE/VisualStudio_NET.6.sg +14 -0
- db/PE/Visual_Objects.4.sg +13 -0
- db/PE/Visual_Prolog.4.sg +15 -0
- db/PE/Vulkan.4.sg +14 -0
- db/PE/WF.Guna.UI2.4.sg +15 -0
- db/PE/WF.Krypton.4.sg +14 -0
- db/PE/WF.MetroFramework.4.sg +14 -0
- db/PE/WF_WPF.MaterialSkin.4.sg +14 -0
- db/PE/WWPACK.2.sg +11 -0
- db/PE/Watcom.4.sg +36 -0
- db/PE/WiX_Toolset_installer.1.sg +21 -0
- db/PE/Wibu_Codemeter.1.sg +30 -0
- db/PE/WinACE.1.sg +12 -0
- db/PE/WinIMP.1.sg +15 -0
- db/PE/WinImage.1.sg +15 -0
- db/PE/WinPatch.1.sg +18 -0
- db/PE/WinRAR.1.sg +18 -0
- db/PE/WinRAR_Installer.1.sg +28 -0
- db/PE/WinUpack.2.sg +64 -0
- db/PE/WinZip.1.sg +44 -0
- db/PE/Winamp_Installer.1.sg +14 -0
- db/PE/Wind_of_Crypt.2.sg +12 -0
- db/PE/Windows_Authenticode.7.sg +13 -0
- db/PE/Windows_Installer.1.sg +22 -0
- db/PE/Wine.3.sg +12 -0
- db/PE/Wise_Installer.1.sg +52 -0
- db/PE/XCR.2.sg +13 -0
- db/PE/XComp.2.sg +19 -0
- db/PE/XPACK.2.sg +17 -0
- db/PE/Xash.3.sg +20 -0
- db/PE/Xbase.4.sg +30 -0
- db/PE/Xenocode_Postbuild.2.sg +12 -0
- db/PE/Xerces-CPP.4.sg +15 -0
- db/PE/XerinFuscator.2.sg +31 -0
- db/PE/Xojo.3.sg +29 -0
- db/PE/Xoreax_installer.1.sg +19 -0
- db/PE/Xtreamlok.2.sg +22 -0
- db/PE/Yano.2.sg +12 -0
- db/PE/Yodas_Crypter.2.sg +35 -0
- db/PE/Yodas_Protector.2.sg +15 -0
- db/PE/Yummy_Game_SoftwareShield.2.sg +17 -0
- db/PE/Zig.4.sg +22 -0
- db/PE/ZipCentral_SFX.1.sg +16 -0
- db/PE/Zip_SFX.2.sg +62 -0
- db/PE/Zprotect.2.sg +26 -0
- db/PE/Zydis.4.sg +14 -0
- db/PE/_FixDetects.9.sg +79 -0
- db/PE/_NetCompilersLibs.4.sg +39 -0
- db/PE/_PE.0.sg +22 -0
- db/PE/__GenericHeuristicAnalysis_By_DosX.7.sg +3357 -0
- db/PE/_init +138 -0
- db/PE/_simpleNetAntivirus.1.sg +246 -0
- db/PE/aPack.2.sg +26 -0
- db/PE/arj.6.sg +10 -0
- db/PE/beria.2.sg +12 -0
- db/PE/curl.4.sg +14 -0
- db/PE/dUP.1.sg +20 -0
- db/PE/de4dot.6.sg +20 -0
- db/PE/dePACK.2.sg +13 -0
- db/PE/distutils.1.sg +18 -0
- db/PE/eXPressor.2.sg +59 -0
- db/PE/ezip.2.sg +14 -0
- db/PE/gcc.4.sg +15 -0
- db/PE/hXOR_packer.sg +13 -0
- db/PE/hmimys_PE-Pack.2.sg +23 -0
- db/PE/hmimys_Protect.2.sg +18 -0
- db/PE/iPB_Protect.2.sg +12 -0
- db/PE/inPEct.1.sg +10 -0
- db/PE/java.3.sg +21 -0
- db/PE/keygens.1.sg +25 -0
- db/PE/kkrunchy.2.sg +19 -0
- db/PE/ldc.4.sg +13 -0
- db/PE/linker.6.sg +100 -0
- db/PE/mPack.2.sg +15 -0
- db/PE/mkfPack.2.sg +12 -0
- db/PE/nPack.2.sg +36 -0
- db/PE/netshrink.2.sg +25 -0
- db/PE/obfus_h.5.sg +15 -0
- db/PE/obfusheader_h.5.sg +32 -0
- db/PE/ps2exe.2.sg +15 -0
- db/PE/rar.1.sg +16 -0
- db/PE/rar.6.sg +10 -0
- db/PE/scr2exe.2.sg +18 -0
- db/PE/sql-server.sg +14 -0
- db/PE/sqlite.4.sg +14 -0
- db/PE/sqx.1.sg +14 -0
- db/PE/tElock.2.sg +81 -0
- db/PE/tcc.4.sg +45 -0
- db/PE/wxWidgets.5.sg +27 -0
- db/PE/yzPack.2.sg +26 -0
- db/PE/zip.6.sg +10 -0
- db/PE/zlib.4.sg +14 -0
- db/QtFramework +16 -0
- db/RosASM +13 -0
- db/SpASM +8 -0
- db/ZIP/_ZIP.0.sg +17 -0
- db/ZIP/_init +2 -0
- db/_debug +23 -0
- db/_init +149 -0
- db/archive-file +36 -0
- db/arj +80 -0
- db/cab +45 -0
- db/duration +14 -0
- db/language +46 -0
- db/python +30 -0
- db/rar +75 -0
- db/read +692 -0
- db/shell-script +24 -0
- db/wxWidgets +12 -0
- db/zip-file +87 -0
- db/zlib +23 -0
- die/Qt6Concurrent.dll +0 -0
- die/Qt6Core.dll +0 -0
- die/Qt6Network.dll +0 -0
- die/Qt6Qml.dll +0 -0
- die/__init__.py +125 -0
- die/_die.cp313-win_amd64.pyd +0 -0
- die/db/db/.vscode/about.txt +1 -0
- die/db/db/.vscode/settings.json +5 -0
- die/db/db/ACE +48 -0
- die/db/db/APK/APKProtect.2.sg +15 -0
- die/db/db/APK/APKProtector.2.sg +20 -0
- die/db/db/APK/AlibabaProtection.2.sg +15 -0
- die/db/db/APK/AndroidRepublic.2.sg +17 -0
- die/db/db/APK/ApktoolPlus.6.sg +12 -0
- die/db/db/APK/AppGuard.2.sg +17 -0
- die/db/db/APK/AppSolid.2.sg +12 -0
- die/db/db/APK/BaiduProtection.2.sg +18 -0
- die/db/db/APK/BangBangReinforcement.2.sg +27 -0
- die/db/db/APK/BangcleProtection.2.sg +14 -0
- die/db/db/APK/DXShield.2.sg +12 -0
- die/db/db/APK/DexProtector.2.sg +23 -0
- die/db/db/APK/DingXiangReinforcement.2.sg +14 -0
- die/db/db/APK/EasyShield.2.sg +19 -0
- die/db/db/APK/Gemalto.2.sg +19 -0
- die/db/db/APK/Hdus-Wjus.2.sg +14 -0
- die/db/db/APK/IL2CPP.4.sg +14 -0
- die/db/db/APK/Ijiami.2.sg +24 -0
- die/db/db/APK/Jiagu.2.sg +17 -0
- die/db/db/APK/Kiro.2.sg +12 -0
- die/db/db/APK/Kiwi.2.sg +23 -0
- die/db/db/APK/Kony.2.sg +12 -0
- die/db/db/APK/LIAPP.2.sg +16 -0
- die/db/db/APK/MedusaH.2.sg +12 -0
- die/db/db/APK/MobileTencentProtect.2.sg +14 -0
- die/db/db/APK/NQShield.2.sg +15 -0
- die/db/db/APK/NagaPTProtection.2.sg +14 -0
- die/db/db/APK/OLLVM-TTL.2.sg +14 -0
- die/db/db/APK/Obfuscapk.2.sg +14 -0
- die/db/db/APK/PackageName.1.sg +15 -0
- die/db/db/APK/PangXie.2.sg +14 -0
- die/db/db/APK/ProGuard.2.sg +12 -0
- die/db/db/APK/QDBH.2.sg +12 -0
- die/db/db/APK/Qihoo360Protection.2.sg +15 -0
- die/db/db/APK/SandHook.4.sg +16 -0
- die/db/db/APK/SecNeo.2.sg +19 -0
- die/db/db/APK/SecShell.2.sg +15 -0
- die/db/db/APK/SingleJar.3.sg +10 -0
- die/db/db/APK/TencentLegu.2.sg +18 -0
- die/db/db/APK/TencentProtection.2.sg +14 -0
- die/db/db/APK/TencentSecurity.2.sg +17 -0
- die/db/db/APK/TongfuShield.2.sg +21 -0
- die/db/db/APK/UnicomSDK.4.sg +21 -0
- die/db/db/APK/Unity.4.sg +12 -0
- die/db/db/APK/VDog.2.sg +16 -0
- die/db/db/APK/Yidun.2.sg +16 -0
- die/db/db/APK/_APK.0.sg +15 -0
- die/db/db/APK/_init +2 -0
- die/db/db/APK/iCrypt.2.sg +24 -0
- die/db/db/Amiga/DeliTracker.1.sg +14 -0
- die/db/db/Amiga/_Amiga.0.sg +15 -0
- die/db/db/Amiga/_init +2 -0
- die/db/db/Archive/_Archive.0.sg +17 -0
- die/db/db/Archive/_init +2 -0
- die/db/db/Binary/Amiga_loadable.1.sg +16 -0
- die/db/db/Binary/Empty.1.sg +11 -0
- die/db/db/Binary/Img.UDIF.1.sg +15 -0
- die/db/db/Binary/RIFF.1.sg +19 -0
- die/db/db/Binary/U-Boot.1.sg +321 -0
- die/db/db/Binary/Universal_Binary.1.sg +17 -0
- die/db/db/Binary/Video.FLV.1.sg +16 -0
- die/db/db/Binary/__MiniExtensionsHeuristic_By_DosX.7.sg +184 -0
- die/db/db/Binary/__MiniJavaScriptHeuristic_By_DosX.7.sg +44 -0
- die/db/db/Binary/_init +4 -0
- die/db/db/Binary/archive.7z.1.sg +14 -0
- die/db/db/Binary/archive.ACE.1.sg +10 -0
- die/db/db/Binary/archive.AR.1.sg +85 -0
- die/db/db/Binary/archive.ARC.1.sg +16 -0
- die/db/db/Binary/archive.ARJ.1.sg +9 -0
- die/db/db/Binary/archive.ASAR.sg +13 -0
- die/db/db/Binary/archive.BZip.1.sg +20 -0
- die/db/db/Binary/archive.CFL3.1.sg +25 -0
- die/db/db/Binary/archive.Cab.1.sg +25 -0
- die/db/db/Binary/archive.DEFLATE.1.sg +186 -0
- die/db/db/Binary/archive.DotBundle.sg +9 -0
- die/db/db/Binary/archive.LRZ.1.sg +57 -0
- die/db/db/Binary/archive.LZ4.1.sg +42 -0
- die/db/db/Binary/archive.LZOP.1.sg +13 -0
- die/db/db/Binary/archive.MS_Compound.1.sg +24 -0
- die/db/db/Binary/archive.PEA.1.sg +65 -0
- die/db/db/Binary/archive.RAR.1.sg +9 -0
- die/db/db/Binary/archive.Unity.1.sg +74 -0
- die/db/db/Binary/archive.ZIP.1.sg +10 -0
- die/db/db/Binary/archive.ZLIB.1.sg +14 -0
- die/db/db/Binary/archive.ZPAQ.1.sg +15 -0
- die/db/db/Binary/archive.btoa.1.sg +14 -0
- die/db/db/Binary/archives.1.sg +299 -0
- die/db/db/Binary/archives.ancient.sg +506 -0
- die/db/db/Binary/audio.1.sg +12079 -0
- die/db/db/Binary/audio.8svx.1.sg +16 -0
- die/db/db/Binary/audio.ACM.1.sg +22 -0
- die/db/db/Binary/audio.AU.1.sg +49 -0
- die/db/db/Binary/audio.DSS.1.sg +57 -0
- die/db/db/Binary/audio.FSB.1.sg +105 -0
- die/db/db/Binary/audio.VOC.1.sg +97 -0
- die/db/db/Binary/audio.WAV.1.sg +320 -0
- die/db/db/Binary/audio.mp3.2.sg +189 -0
- die/db/db/Binary/backup_images.1.sg +27 -0
- die/db/db/Binary/bin.AAALogo.1.sg +16 -0
- die/db/db/Binary/bin.Atari_ST.1.sg +12 -0
- die/db/db/Binary/bin.GameMaps.1.sg +13 -0
- die/db/db/Binary/bin.GuitarPro.1.sg +26 -0
- die/db/db/Binary/bin.Hermes.1.sg +16 -0
- die/db/db/Binary/bin.IDA.1.sg +78 -0
- die/db/db/Binary/bin.ISO_9660.1.sg +13 -0
- die/db/db/Binary/bin.JMDL.1.sg +34 -0
- die/db/db/Binary/bin.JSC.1.sg +88 -0
- die/db/db/Binary/bin.Java.1.sg +152 -0
- die/db/db/Binary/bin.KeePass.1.sg +22 -0
- die/db/db/Binary/bin.LUA.1.sg +48 -0
- die/db/db/Binary/bin.NVA.1.sg +15 -0
- die/db/db/Binary/bin.PDB.1.sg +16 -0
- die/db/db/Binary/bin.PEFF.1.sg +11 -0
- die/db/db/Binary/bin.PalmFile.1.sg +104 -0
- die/db/db/Binary/bin.Python.1.sg +628 -0
- die/db/db/Binary/bin.RPGMaker2Kdata.1.sg +242 -0
- die/db/db/Binary/bin.SWF.1.sg +26 -0
- die/db/db/Binary/bin.WAD.1.sg +19 -0
- die/db/db/Binary/bin.WindowsIconCacheDB.1.sg +34 -0
- die/db/db/Binary/bin.ZBMP.1.sg +16 -0
- die/db/db/Binary/cad.DWG.1.sg +63 -0
- die/db/db/Binary/cert.WinAuth.1.sg +13 -0
- die/db/db/Binary/database.SQLite.1.sg +45 -0
- die/db/db/Binary/databases.1.sg +117 -0
- die/db/db/Binary/debugData.1.sg +68 -0
- die/db/db/Binary/doc.CHM.1.sg +18 -0
- die/db/db/Binary/doc.DJVU.1.sg +113 -0
- die/db/db/Binary/doc.HLP.1.sg +11 -0
- die/db/db/Binary/doc.PDF.1.sg +16 -0
- die/db/db/Binary/doc.RTF.1.sg +13 -0
- die/db/db/Binary/donut.1.sg +49 -0
- die/db/db/Binary/font.ADOBE.1.sg +35 -0
- die/db/db/Binary/font.BMF.1.sg +63 -0
- die/db/db/Binary/format.MS-DBG.1.sg +19 -0
- die/db/db/Binary/format.MS-PST.sg +15 -0
- die/db/db/Binary/format.MS-VHD.1.sg +61 -0
- die/db/db/Binary/format.MS-VHDX.sg +16 -0
- die/db/db/Binary/format.MS-WIM.1.sg +43 -0
- die/db/db/Binary/format.MS-XNA.1.sg +80 -0
- die/db/db/Binary/format.UE.1.sg +36 -0
- die/db/db/Binary/format.VDI.1.sg +40 -0
- die/db/db/Binary/formats.1.sg +90 -0
- die/db/db/Binary/graphics.1.sg +37 -0
- die/db/db/Binary/image.ANI.1.sg +26 -0
- die/db/db/Binary/image.BMP.1.sg +48 -0
- die/db/db/Binary/image.CUR.1.sg +55 -0
- die/db/db/Binary/image.DDS.1.sg +26 -0
- die/db/db/Binary/image.EPS.1.sg +26 -0
- die/db/db/Binary/image.GIF.1.sg +95 -0
- die/db/db/Binary/image.ICO.1.sg +57 -0
- die/db/db/Binary/image.JNG.1.sg +34 -0
- die/db/db/Binary/image.JPEG.1.sg +52 -0
- die/db/db/Binary/image.JPEG.DQT.4.sg +13 -0
- die/db/db/Binary/image.JPEG.Tools.3.sg +53 -0
- die/db/db/Binary/image.JPEG.camera.2.sg +16 -0
- die/db/db/Binary/image.JPEG.comment.4.sg +16 -0
- die/db/db/Binary/image.JPEGXL.1.sg +15 -0
- die/db/db/Binary/image.KTX.1.sg +44 -0
- die/db/db/Binary/image.LBM.1.sg +69 -0
- die/db/db/Binary/image.MNG.1.sg +19 -0
- die/db/db/Binary/image.PCX.1.sg +69 -0
- die/db/db/Binary/image.PNG.1.sg +165 -0
- die/db/db/Binary/image.PSD.1.sg +63 -0
- die/db/db/Binary/image.PVR.1.sg +29 -0
- die/db/db/Binary/image.QOI.1.sg +36 -0
- die/db/db/Binary/image.TGA.1.sg +149 -0
- die/db/db/Binary/image.TIFF.1.sg +186 -0
- die/db/db/Binary/image.XAR.1.sg +31 -0
- die/db/db/Binary/img.VM.1.sg +13 -0
- die/db/db/Binary/overlays.6.sg +367 -0
- die/db/db/Binary/rom.1.sg +1327 -0
- die/db/db/Binary/shellcode.pe_to_shellcode.1.sg +107 -0
- die/db/db/Binary/srdi-monoxgas.1.sg +128 -0
- die/db/db/Binary/text.HTML.1.sg +14 -0
- die/db/db/Binary/text.Pascal.1.sg +19 -0
- die/db/db/Binary/text.RegistryFile.sg +20 -0
- die/db/db/Binary/text.Shell.1.sg +14 -0
- die/db/db/Binary/text.XML.1.sg +18 -0
- die/db/db/Binary/text.c.1.sg +35 -0
- die/db/db/Binary/text.pdb.1.sg +40 -0
- die/db/db/Binary/text.plaintext.3.sg +25 -0
- die/db/db/Binary/text.python.1.sg +17 -0
- die/db/db/Binary/text.script.2.sg +16 -0
- die/db/db/Binary/video.MP4.1.sg +16 -0
- die/db/db/Borland +19 -0
- die/db/db/COM/32-bit_crypt.2.sg +13 -0
- die/db/db/COM/4kZIP.2.sg +13 -0
- die/db/db/COM/8086_Forth_83.4.sg +14 -0
- die/db/db/COM/A3E.1.sg +13 -0
- die/db/db/COM/ABK-Scrambler.2.sg +12 -0
- die/db/db/COM/ACE_Scrambler.2.sg +34 -0
- die/db/db/COM/ACiDDRAW.1.sg +16 -0
- die/db/db/COM/ANS2ALL.1.sg +18 -0
- die/db/db/COM/ARF_AV_Inject.1.sg +14 -0
- die/db/db/COM/ASC2COM.1.sg +25 -0
- die/db/db/COM/ASIC-Basic.4.sg +21 -0
- die/db/db/COM/AVAST-Protect.2.sg +13 -0
- die/db/db/COM/AVPACK.2.sg +14 -0
- die/db/db/COM/AdFlt.2.sg +17 -0
- die/db/db/COM/Anti-Lamer_Cryptor.2.sg +14 -0
- die/db/db/COM/Anti-hack_encryption_system.2.sg +13 -0
- die/db/db/COM/AutoCracker.1.sg +14 -0
- die/db/db/COM/BAT2EXEC.2.sg +18 -0
- die/db/db/COM/BIN-Lock.2.sg +14 -0
- die/db/db/COM/BatLite.4.sg +13 -0
- die/db/db/COM/Best_Protection_Kit-B.2.sg +16 -0
- die/db/db/COM/Borland_C++.4.sg +17 -0
- die/db/db/COM/Budokan.1.sg +13 -0
- die/db/db/COM/C-crypt.2.sg +14 -0
- die/db/db/COM/CC#3.2.sg +13 -0
- die/db/db/COM/CC.2.sg +22 -0
- die/db/db/COM/CC286.2.sg +14 -0
- die/db/db/COM/CCC.2.sg +16 -0
- die/db/db/COM/CHECKPRG.2.sg +13 -0
- die/db/db/COM/CNT.2.sg +13 -0
- die/db/db/COM/COM-Protect.2.sg +16 -0
- die/db/db/COM/COM-Protection.2.sg +13 -0
- die/db/db/COM/COM2TXT.1.sg +13 -0
- die/db/db/COM/COMCRYPT.2.sg +23 -0
- die/db/db/COM/COMPACK.2.sg +32 -0
- die/db/db/COM/COMPROTECT.2.sg +14 -0
- die/db/db/COM/COM_Sccrambler.2.sg +14 -0
- die/db/db/COM/COP.2.sg +14 -0
- die/db/db/COM/CPAV.1.sg +13 -0
- die/db/db/COM/CRX2COM.1.sg +12 -0
- die/db/db/COM/Character_Intro_Engine.1.sg +16 -0
- die/db/db/COM/Cheat_packer.2.sg +13 -0
- die/db/db/COM/CodeLock.2.sg +14 -0
- die/db/db/COM/ComProt.2.sg +13 -0
- die/db/db/COM/ComProtector.2.sg +18 -0
- die/db/db/COM/Comlock.2.sg +19 -0
- die/db/db/COM/CrAcKeR.2.sg +14 -0
- die/db/db/COM/Crack2EXE.1.sg +14 -0
- die/db/db/COM/CryptCom.2.sg +18 -0
- die/db/db/COM/CryptGeneric.2.sg +12 -0
- die/db/db/COM/Crypt_(Dismember).2.sg +16 -0
- die/db/db/COM/Crypto-King.2.sg +13 -0
- die/db/db/COM/CyberWare_Packer.2.sg +13 -0
- die/db/db/COM/DCFR.2.sg +13 -0
- die/db/db/COM/DIGPAK.1.sg +16 -0
- die/db/db/COM/DOC2COM.1.sg +13 -0
- die/db/db/COM/DOC2PAGE.1.sg +13 -0
- die/db/db/COM/DS-CRP.2.sg +16 -0
- die/db/db/COM/Datalight_C.4.sg +15 -0
- die/db/db/COM/Deep_Crypter.2.sg +14 -0
- die/db/db/COM/Deeper.2.sg +17 -0
- die/db/db/COM/Diet.2.sg +26 -0
- die/db/db/COM/Dn.COM_Cruncher.2.sg +13 -0
- die/db/db/COM/E2C-Scrambler.2.sg +13 -0
- die/db/db/COM/E2C.1.sg +16 -0
- die/db/db/COM/E2C1.2.sg +13 -0
- die/db/db/COM/EPW.2.sg +14 -0
- die/db/db/COM/EXE2COM.1.sg +72 -0
- die/db/db/COM/EXETools.2.sg +22 -0
- die/db/db/COM/EXETools_EXE2COM.1.sg +16 -0
- die/db/db/COM/Easy!-C.4.sg +13 -0
- die/db/db/COM/Entropy_Coder.2.sg +13 -0
- die/db/db/COM/ExOM.2.sg +14 -0
- die/db/db/COM/FCRYPT.2.sg +14 -0
- die/db/db/COM/FIXCRK.1.sg +13 -0
- die/db/db/COM/Fig-FORTH.4.sg +13 -0
- die/db/db/COM/ForthCMP.2.sg +23 -0
- die/db/db/COM/ForthCMP.4.sg +18 -0
- die/db/db/COM/FromBAT.1.sg +18 -0
- die/db/db/COM/GOAT.2.sg +19 -0
- die/db/db/COM/GP-FORTH.4.sg +14 -0
- die/db/db/COM/Guardian_Angel.2.sg +28 -0
- die/db/db/COM/HDKPROTC.2.sg +13 -0
- die/db/db/COM/HYPDOC.1.sg +13 -0
- die/db/db/COM/HackStop.2.sg +19 -0
- die/db/db/COM/ICE.1.sg +13 -0
- die/db/db/COM/IMMUN.1.sg +14 -0
- die/db/db/COM/Inbuild_Encryption.2.sg +14 -0
- die/db/db/COM/IntroC0der.1.sg +13 -0
- die/db/db/COM/J0B_cryptor.2.sg +13 -0
- die/db/db/COM/Keygen_crypt.2.sg +14 -0
- die/db/db/COM/Khrome_Crypt.2.sg +14 -0
- die/db/db/COM/LAME_GG.2.sg +12 -0
- die/db/db/COM/LAMPROT.2.sg +13 -0
- die/db/db/COM/LGLZ.2.sg +14 -0
- die/db/db/COM/LHA.1.sg +16 -0
- die/db/db/COM/LHarc_SFX.1.sg +16 -0
- die/db/db/COM/Lattice_C.4.sg +32 -0
- die/db/db/COM/List.1.sg +21 -0
- die/db/db/COM/Lock-Master.2.sg +14 -0
- die/db/db/COM/MASK.2.sg +26 -0
- die/db/db/COM/MCLock.2.sg +13 -0
- die/db/db/COM/MESS.2.sg +13 -0
- die/db/db/COM/MICRO-C.4.sg +16 -0
- die/db/db/COM/MIDPAK.1.sg +13 -0
- die/db/db/COM/MINIFORTH.4.sg +14 -0
- die/db/db/COM/MSCC.2.sg +14 -0
- die/db/db/COM/MakeRead.1.sg +14 -0
- die/db/db/COM/Maveriks_C0der.2.sg +16 -0
- die/db/db/COM/MegaShield.2.sg +14 -0
- die/db/db/COM/Microsoft_C.4.sg +13 -0
- die/db/db/COM/Microsoft_RTL.3.sg +16 -0
- die/db/db/COM/Microxor.2.sg +13 -0
- die/db/db/COM/MoonRock.2.sg +14 -0
- die/db/db/COM/NH.2.sg +13 -0
- die/db/db/COM/NetCode.1.sg +18 -0
- die/db/db/COM/NetRun.1.sg +13 -0
- die/db/db/COM/NoAV.2.sg +13 -0
- die/db/db/COM/Nodebug.2.sg +14 -0
- die/db/db/COM/ONLINE-HELP.1.sg +13 -0
- die/db/db/COM/OUTFORTH.4.sg +13 -0
- die/db/db/COM/PBFC.2.sg +14 -0
- die/db/db/COM/PCOM.2.sg +14 -0
- die/db/db/COM/PCRYPT.2.sg +14 -0
- die/db/db/COM/PCVault-Protect.2.sg +13 -0
- die/db/db/COM/PC_FORTH.4.sg +13 -0
- die/db/db/COM/PKLITE.2.sg +29 -0
- die/db/db/COM/PKZip.1.sg +18 -0
- die/db/db/COM/PRO-PACK.2.sg +21 -0
- die/db/db/COM/PROTECT.2.sg +67 -0
- die/db/db/COM/PTP.2.sg +16 -0
- die/db/db/COM/PU-Cryptor.2.sg +25 -0
- die/db/db/COM/PassCOM.2.sg +13 -0
- die/db/db/COM/Phrozen_Crew_cryptor.2.sg +13 -0
- die/db/db/COM/ProtEXE.2.sg +14 -0
- die/db/db/COM/R-Crypt.2.sg +19 -0
- die/db/db/COM/RCC.2.sg +25 -0
- die/db/db/COM/RDT_Compressor2.2.sg +13 -0
- die/db/db/COM/RDT_ENC_3.2.sg +13 -0
- die/db/db/COM/RELETTER.1.sg +14 -0
- die/db/db/COM/RMCOBOL.4.sg +16 -0
- die/db/db/COM/RSCC.2.sg +65 -0
- die/db/db/COM/SCC.2.sg +13 -0
- die/db/db/COM/SCRAM.2.sg +14 -0
- die/db/db/COM/SCRE2B.2.sg +14 -0
- die/db/db/COM/SCRNCH.2.sg +22 -0
- die/db/db/COM/SDW.2.sg +34 -0
- die/db/db/COM/SHOWV20.1.sg +18 -0
- die/db/db/COM/SHOW_IT.1.sg +13 -0
- die/db/db/COM/SHRINK.2.sg +14 -0
- die/db/db/COM/SP-FORTH.4.sg +18 -0
- die/db/db/COM/SPHINX_C--.4.sg +24 -0
- die/db/db/COM/Scramb.2.sg +18 -0
- die/db/db/COM/Scrypt!.2.sg +18 -0
- die/db/db/COM/Scrypt.2.sg +14 -0
- die/db/db/COM/SelfCrypt.2.sg +13 -0
- die/db/db/COM/SelfProtect386.2.sg +12 -0
- die/db/db/COM/Shadow.2.sg +14 -0
- die/db/db/COM/Shadow_COM_encryptor.2.sg +14 -0
- die/db/db/COM/Six-2-Four.2.sg +18 -0
- die/db/db/COM/SnoopStop.2.sg +14 -0
- die/db/db/COM/SoftGuard.1.sg +13 -0
- die/db/db/COM/Steplock.2.sg +14 -0
- die/db/db/COM/Surpas-86.4.sg +14 -0
- die/db/db/COM/Sydex.2.sg +13 -0
- die/db/db/COM/TCEC.2.sg +14 -0
- die/db/db/COM/TCOM.4.sg +16 -0
- die/db/db/COM/TPACK.2.sg +18 -0
- die/db/db/COM/TPC_Scramble.2.sg +12 -0
- die/db/db/COM/TXT2COM.1.sg +22 -0
- die/db/db/COM/TXTmaker.1.sg +14 -0
- die/db/db/COM/Text_Header.1.sg +14 -0
- die/db/db/COM/The_DRAW.1.sg +15 -0
- die/db/db/COM/Tiny_Xor.2.sg +14 -0
- die/db/db/COM/TurboBAT.1.sg +21 -0
- die/db/db/COM/Turbo_C++.4.sg +13 -0
- die/db/db/COM/Turbo_C.4.sg +27 -0
- die/db/db/COM/Turbo_Pascal.4.sg +30 -0
- die/db/db/COM/Txt2Exe.1.sg +14 -0
- die/db/db/COM/UNIFORTH.4.sg +13 -0
- die/db/db/COM/UPX.2.sg +22 -0
- die/db/db/COM/USCC.2.sg +14 -0
- die/db/db/COM/UnPackStop.2.sg +17 -0
- die/db/db/COM/UniCrypt.1.sg +14 -0
- die/db/db/COM/Unknown_cryptors.2.sg +74 -0
- die/db/db/COM/VGA_font_loader.1.sg +13 -0
- die/db/db/COM/VSF&K_protection.2.sg +13 -0
- die/db/db/COM/VSS.1.sg +13 -0
- die/db/db/COM/Vacsina.4.sg +12 -0
- die/db/db/COM/Venus.2.sg +12 -0
- die/db/db/COM/Vienna-C.4.sg +12 -0
- die/db/db/COM/Watcom_C.4.sg +37 -0
- die/db/db/COM/WiZ_Cryptor.2.sg +14 -0
- die/db/db/COM/XCK2COM.1.sg +12 -0
- die/db/db/COM/XE.2.sg +13 -0
- die/db/db/COM/XORCOPY.2.sg +14 -0
- die/db/db/COM/XPACK.2.sg +22 -0
- die/db/db/COM/XcomOR.2.sg +24 -0
- die/db/db/COM/XoReR.2.sg +26 -0
- die/db/db/COM/XorCom.2.sg +14 -0
- die/db/db/COM/Zbikowski_C.4.sg +13 -0
- die/db/db/COM/Zortech_C.4.sg +26 -0
- die/db/db/COM/_init +2 -0
- die/db/db/COM/aPACK.2.sg +22 -0
- die/db/db/COM/aPatch.2.sg +13 -0
- die/db/db/COM/acBBS_protection.2.sg +13 -0
- die/db/db/COM/com-crypt.2.sg +16 -0
- die/db/db/COM/com_RLE_packer.2.sg +15 -0
- die/db/db/COM/cryptors.2.sg +214 -0
- die/db/db/COM/envelope.2.sg +13 -0
- die/db/db/COM/fds-cp.2.sg +13 -0
- die/db/db/COM/integrity_checker.1.sg +13 -0
- die/db/db/COM/mCrypt.2.sg +14 -0
- die/db/db/COM/muSIMP-83.4.sg +14 -0
- die/db/db/COM/packers.2.sg +26 -0
- die/db/db/COM/patchers.1.sg +100 -0
- die/db/db/COM/protection.2.sg +13 -0
- die/db/db/COM/readme.com.1.sg +12 -0
- die/db/db/COM/simple_ansi_viewer.1.sg +12 -0
- die/db/db/COM/simple_self-displayer.1.sg +12 -0
- die/db/db/COM/spirit.2.sg +22 -0
- die/db/db/COM/x3.2.sg +18 -0
- die/db/db/CurIcoBPP +14 -0
- die/db/db/DEX/AESObfuscator.2.sg +14 -0
- die/db/db/DEX/APKProtect.2.sg +12 -0
- die/db/db/DEX/AlibabaProtection.2.sg +12 -0
- die/db/db/DEX/AllatoriObfuscator.2.sg +14 -0
- die/db/db/DEX/ApkEncryptor.2.sg +12 -0
- die/db/db/DEX/ApkToolPlus.6.sg +12 -0
- die/db/db/DEX/AppSolid.2.sg +12 -0
- die/db/db/DEX/BaiduProtection.2.sg +12 -0
- die/db/db/DEX/BangcleProtection.2.sg +12 -0
- die/db/db/DEX/EasyProtector.2.sg +12 -0
- die/db/db/DEX/Jiagu.2.sg +12 -0
- die/db/db/DEX/Kiwi.2.sg +12 -0
- die/db/db/DEX/LIAPP.2.sg +12 -0
- die/db/db/DEX/MedusaH.2.sg +12 -0
- die/db/db/DEX/ModGuard.2.sg +16 -0
- die/db/db/DEX/NQShield.2.sg +12 -0
- die/db/db/DEX/NagaPTProtection.2.sg +12 -0
- die/db/db/DEX/PangXie.2.sg +12 -0
- die/db/db/DEX/ProGuard.2.sg +12 -0
- die/db/db/DEX/QDBH.2.sg +12 -0
- die/db/db/DEX/SecNeo.2.sg +12 -0
- die/db/db/DEX/TencentProtection.2.sg +12 -0
- die/db/db/DEX/UnicomSDK.4.sg +12 -0
- die/db/db/DEX/VDog.2.sg +12 -0
- die/db/db/DEX/Yidun.2.sg +12 -0
- die/db/db/DEX/_DEX.0.sg +15 -0
- die/db/db/DEX/_init +2 -0
- die/db/db/DOS16M/_DOS16M.0.sg +15 -0
- die/db/db/DOS16M/_init +2 -0
- die/db/db/DOS4G/_DOS4G.0.sg +15 -0
- die/db/db/DOS4G/_init +2 -0
- die/db/db/ELF/Borland_Kylix.4.sg +19 -0
- die/db/db/ELF/Burneye.2.sg +12 -0
- die/db/db/ELF/DMD.4.sg +31 -0
- die/db/db/ELF/ELFCrypt.2.sg +12 -0
- die/db/db/ELF/Ezuri.1.sg +30 -0
- die/db/db/ELF/FASM.4.sg +23 -0
- die/db/db/ELF/Flexlm.4.sg +15 -0
- die/db/db/ELF/Free_Pascal.4.sg +46 -0
- die/db/db/ELF/GLIBC.3.sg +49 -0
- die/db/db/ELF/Go.4.sg +126 -0
- die/db/db/ELF/HASP.1.sg +28 -0
- die/db/db/ELF/HP_C++.4.sg +12 -0
- die/db/db/ELF/IBM_AIX_kernel_loader.sg +18 -0
- die/db/db/ELF/Oracle_Solaris_Studio.4.sg +47 -0
- die/db/db/ELF/PyInstaller.2.sg +24 -0
- die/db/db/ELF/QT.3.sg +44 -0
- die/db/db/ELF/Rust.4.sg +25 -0
- die/db/db/ELF/SDL.3.sg +35 -0
- die/db/db/ELF/UPX.2.sg +57 -0
- die/db/db/ELF/VBCC.4.sg +17 -0
- die/db/db/ELF/Virbox.2.sg +17 -0
- die/db/db/ELF/Watcom.4.sg +15 -0
- die/db/db/ELF/Zig.4.sg +22 -0
- die/db/db/ELF/_ELF.0.sg +15 -0
- die/db/db/ELF/_init +2 -0
- die/db/db/ELF/gcc.4.sg +95 -0
- die/db/db/ELF/gdc.4.sg +13 -0
- die/db/db/ELF/ldc.4.sg +34 -0
- die/db/db/ELF/movfuscator.4.sg +19 -0
- die/db/db/FASM +9 -0
- die/db/db/FPC +11 -0
- die/db/db/IPA/_init +2 -0
- die/db/db/JAR/SingleJar.3.sg +13 -0
- die/db/db/JAR/_JAR.0.sg +15 -0
- die/db/db/JAR/_init +2 -0
- die/db/db/LE/UPX.1.sg +85 -0
- die/db/db/LE/Watcom_C.4.sg +24 -0
- die/db/db/LE/_LE.0.sg +15 -0
- die/db/db/LE/_init +2 -0
- die/db/db/LX/Watcom C.4.sg +51 -0
- die/db/db/LX/_LX.0.sg +15 -0
- die/db/db/LX/_init +2 -0
- die/db/db/MACH/Carbon.3.sg +13 -0
- die/db/db/MACH/Cocoa.3.sg +11 -0
- die/db/db/MACH/Delphi.4.sg +21 -0
- die/db/db/MACH/QT.3.sg +18 -0
- die/db/db/MACH/UPX.2.sg +15 -0
- die/db/db/MACH/Virbox.2.sg +13 -0
- die/db/db/MACH/WebKit.3.sg +11 -0
- die/db/db/MACH/Zig.4.sg +22 -0
- die/db/db/MACH/_MACH.0.sg +15 -0
- die/db/db/MACH/_init +2 -0
- die/db/db/MACH/gcc.4.sg +35 -0
- die/db/db/MACH/java.3.sg +15 -0
- die/db/db/MACHOFAT/_MACHOFAT.0.sg +15 -0
- die/db/db/MACHOFAT/_init +2 -0
- die/db/db/MFC +14 -0
- die/db/db/MSDOS/$pirit.2.sg +47 -0
- die/db/db/MSDOS/32stub.0a.sg +13 -0
- die/db/db/MSDOS/ABKprot.2.sg +12 -0
- die/db/db/MSDOS/ACE.6.sg +10 -0
- die/db/db/MSDOS/AEP.2.sg +12 -0
- die/db/db/MSDOS/AINEXE.2.sg +19 -0
- die/db/db/MSDOS/ALEC.2.sg +14 -0
- die/db/db/MSDOS/ANS2ALL.1.sg +14 -0
- die/db/db/MSDOS/ARC.1.sg +23 -0
- die/db/db/MSDOS/ARJ.1.sg +14 -0
- die/db/db/MSDOS/ASIC-Basic.4.sg +18 -0
- die/db/db/MSDOS/AVAST_CRC-Check.2.sg +14 -0
- die/db/db/MSDOS/AVPACK.2.sg +16 -0
- die/db/db/MSDOS/Ada89.4.sg +13 -0
- die/db/db/MSDOS/Adys_COM2EXE.1.sg +11 -0
- die/db/db/MSDOS/Adys_Glue.2.sg +15 -0
- die/db/db/MSDOS/Aluwain.2.sg +12 -0
- die/db/db/MSDOS/Amisetup.1.sg +13 -0
- die/db/db/MSDOS/Anti-LAME.2.sg +13 -0
- die/db/db/MSDOS/Anti-hack_encryption_system.2.sg +13 -0
- die/db/db/MSDOS/Antilame.2.sg +14 -0
- die/db/db/MSDOS/ApBasic.4.sg +17 -0
- die/db/db/MSDOS/AutoHack.1.sg +12 -0
- die/db/db/MSDOS/Aztec_C-86.4.sg +40 -0
- die/db/db/MSDOS/BAT2EXEC.4.sg +16 -0
- die/db/db/MSDOS/BSTAR_FORTH.4.sg +13 -0
- die/db/db/MSDOS/BatLite.4.sg +13 -0
- die/db/db/MSDOS/BetterBASIC.4.sg +13 -0
- die/db/db/MSDOS/Bitlok.2.sg +14 -0
- die/db/db/MSDOS/Black_fist.2.sg +13 -0
- die/db/db/MSDOS/Blinker.0a.sg +25 -0
- die/db/db/MSDOS/Borland_C.4.sg +89 -0
- die/db/db/MSDOS/Borland_Pascal.4.sg +89 -0
- die/db/db/MSDOS/Borland_RTM.0a.sg +33 -0
- die/db/db/MSDOS/Borland_TDS.sg +14 -0
- die/db/db/MSDOS/Borland_TLINK.5.sg +13 -0
- die/db/db/MSDOS/Bunny.2.sg +14 -0
- die/db/db/MSDOS/CC.2.sg +18 -0
- die/db/db/MSDOS/CEPexe.2.sg +12 -0
- die/db/db/MSDOS/CERBERUS.2.sg +12 -0
- die/db/db/MSDOS/CII-C.4.sg +18 -0
- die/db/db/MSDOS/COMCRYPT.2.sg +15 -0
- die/db/db/MSDOS/COMPACK.2.sg +15 -0
- die/db/db/MSDOS/COMPROTECT.2.sg +14 -0
- die/db/db/MSDOS/CONVOY.2.sg +17 -0
- die/db/db/MSDOS/CPAV.1.sg +13 -0
- die/db/db/MSDOS/CRYPACK.2.sg +12 -0
- die/db/db/MSDOS/CRYPTEXE.2.sg +19 -0
- die/db/db/MSDOS/CSCRYPT_Pro.2.sg +14 -0
- die/db/db/MSDOS/CWSDPMI.0a.sg +22 -0
- die/db/db/MSDOS/CauseWay_DOS_Extender.0a.sg +16 -0
- die/db/db/MSDOS/ChSFX.1.sg +27 -0
- die/db/db/MSDOS/Ciphator.2.sg +12 -0
- die/db/db/MSDOS/Coderunner.1.sg +22 -0
- die/db/db/MSDOS/Codesafe.2.sg +13 -0
- die/db/db/MSDOS/ComProtector.2.sg +15 -0
- die/db/db/MSDOS/ComprEXE.2.sg +14 -0
- die/db/db/MSDOS/Compress-EXE.2.sg +14 -0
- die/db/db/MSDOS/Concurrent_Small_C.4.sg +16 -0
- die/db/db/MSDOS/CopyQM_SFX.1.sg +16 -0
- die/db/db/MSDOS/Copy_Protector.2.sg +15 -0
- die/db/db/MSDOS/Copylock_PC.1.sg +13 -0
- die/db/db/MSDOS/CrAcKeR.2.sg +14 -0
- die/db/db/MSDOS/CrackStop.2.sg +16 -0
- die/db/db/MSDOS/Cruncher.2.sg +12 -0
- die/db/db/MSDOS/CryExe.2.sg +12 -0
- die/db/db/MSDOS/CryptCom.2.sg +14 -0
- die/db/db/MSDOS/Crypt_(Dismember).2.sg +25 -0
- die/db/db/MSDOS/Crypt_(LightShow).2.sg +25 -0
- die/db/db/MSDOS/CrypteXeC.2.sg +15 -0
- die/db/db/MSDOS/Cryptors.2.sg +59 -0
- die/db/db/MSDOS/DAEMON_Protect.2.sg +12 -0
- die/db/db/MSDOS/DCREXE.2.sg +18 -0
- die/db/db/MSDOS/DIET.2.sg +33 -0
- die/db/db/MSDOS/DMC.2.sg +14 -0
- die/db/db/MSDOS/DOS32.0a.sg +22 -0
- die/db/db/MSDOS/DOS32_loader.0a.sg +14 -0
- die/db/db/MSDOS/DOS4G.0a.sg +16 -0
- die/db/db/MSDOS/DOSX16.0a.sg +27 -0
- die/db/db/MSDOS/DOS_16M.0a.sg +31 -0
- die/db/db/MSDOS/DOS_32A.0a.sg +22 -0
- die/db/db/MSDOS/DSHIELD.2.sg +11 -0
- die/db/db/MSDOS/Deeper.2.sg +17 -0
- die/db/db/MSDOS/DemoMaker.2.sg +14 -0
- die/db/db/MSDOS/DexEXE.2.sg +14 -0
- die/db/db/MSDOS/Digital_Research_C.4.sg +16 -0
- die/db/db/MSDOS/Disk_eXPress.1.sg +14 -0
- die/db/db/MSDOS/E-PROT.2.sg +14 -0
- die/db/db/MSDOS/EEXE.2.sg +14 -0
- die/db/db/MSDOS/EMMXXXX0_check.0a.sg +12 -0
- die/db/db/MSDOS/EMX.0a.sg +16 -0
- die/db/db/MSDOS/EPW.2.sg +18 -0
- die/db/db/MSDOS/EXARJ.1.sg +13 -0
- die/db/db/MSDOS/EXE-Crypt.2.sg +13 -0
- die/db/db/MSDOS/EXE-Cryptor.2.sg +19 -0
- die/db/db/MSDOS/EXE-Protect.2.sg +13 -0
- die/db/db/MSDOS/EXE2COM.1.sg +22 -0
- die/db/db/MSDOS/EXECUTRIX.2.sg +13 -0
- die/db/db/MSDOS/EXEGUARD.2.sg +12 -0
- die/db/db/MSDOS/EXEHigh.2.sg +14 -0
- die/db/db/MSDOS/EXEPACK.2.sg +57 -0
- die/db/db/MSDOS/EXETools.2.sg +16 -0
- die/db/db/MSDOS/EXETools_COM2EXE.1.sg +12 -0
- die/db/db/MSDOS/EXE_Manager.2.sg +14 -0
- die/db/db/MSDOS/EXE_Packer.2.sg +15 -0
- die/db/db/MSDOS/EXE_encryption.2.sg +13 -0
- die/db/db/MSDOS/Easy!-C.4.sg +15 -0
- die/db/db/MSDOS/Eliashim's_CodeTrack.1.sg +12 -0
- die/db/db/MSDOS/Encriptor.2.sg +12 -0
- die/db/db/MSDOS/Enkryptonator.2.sg +12 -0
- die/db/db/MSDOS/ExeCode.2.sg +18 -0
- die/db/db/MSDOS/ExeLITE.2.sg +15 -0
- die/db/db/MSDOS/ExeLock.2.sg +16 -0
- die/db/db/MSDOS/F-XLOCK.1.sg +13 -0
- die/db/db/MSDOS/FACRYPT.2.sg +12 -0
- die/db/db/MSDOS/FCP_IV.2.sg +13 -0
- die/db/db/MSDOS/FSE.2.sg +61 -0
- die/db/db/MSDOS/File_Shield.1.sg +19 -0
- die/db/db/MSDOS/Fitted_Modula-2.4.sg +14 -0
- die/db/db/MSDOS/ForthInfo.4.sg +18 -0
- die/db/db/MSDOS/FromBAT.1.sg +13 -0
- die/db/db/MSDOS/GFX_to_EXE.1.sg +14 -0
- die/db/db/MSDOS/GIFEXE.1.sg +16 -0
- die/db/db/MSDOS/GOAT.1.sg +21 -0
- die/db/db/MSDOS/GRABBER.1.sg +26 -0
- die/db/db/MSDOS/GRASP.4.sg +20 -0
- die/db/db/MSDOS/GamBit_Pro_Library.1.sg +14 -0
- die/db/db/MSDOS/GameWizard_DOS_Extender.0a.sg +12 -0
- die/db/db/MSDOS/Go32Stub.0a.sg +22 -0
- die/db/db/MSDOS/Graphic_WorkShop.1.sg +14 -0
- die/db/db/MSDOS/Guardian_Angel.2.sg +21 -0
- die/db/db/MSDOS/H+BEDV_SelfCheck.1.sg +18 -0
- die/db/db/MSDOS/HACKSTOP.2.sg +77 -0
- die/db/db/MSDOS/HASP.2.sg +14 -0
- die/db/db/MSDOS/HEALTH.2.sg +12 -0
- die/db/db/MSDOS/Header_Changer.2.sg +13 -0
- die/db/db/MSDOS/Hi-Tech_C.4.sg +16 -0
- die/db/db/MSDOS/HyperLOCK_386.2.sg +14 -0
- die/db/db/MSDOS/IBM_PC_Pascal.4.sg +32 -0
- die/db/db/MSDOS/ICE.1.sg +13 -0
- die/db/db/MSDOS/IMMUN.1.sg +14 -0
- die/db/db/MSDOS/Inertia.2.sg +14 -0
- die/db/db/MSDOS/Ironthorn.2.sg +14 -0
- die/db/db/MSDOS/JAM.2.sg +12 -0
- die/db/db/MSDOS/JmCryptExe.2.sg +19 -0
- die/db/db/MSDOS/John_Socha_Library.3.sg +13 -0
- die/db/db/MSDOS/Joke.2.sg +13 -0
- die/db/db/MSDOS/KeyMaker.2.sg +14 -0
- die/db/db/MSDOS/Khrome_Crypt.2.sg +12 -0
- die/db/db/MSDOS/Kvetch.2.sg +14 -0
- die/db/db/MSDOS/LE.0.sg +11 -0
- die/db/db/MSDOS/LGLZ.2.sg +14 -0
- die/db/db/MSDOS/LH.1.sg +11 -0
- die/db/db/MSDOS/LHA.1.sg +20 -0
- die/db/db/MSDOS/LHarc.1.sg +19 -0
- die/db/db/MSDOS/LOCK.2.sg +14 -0
- die/db/db/MSDOS/LSI_C.4.sg +14 -0
- die/db/db/MSDOS/LX.0.sg +11 -0
- die/db/db/MSDOS/LZEXE.2.sg +42 -0
- die/db/db/MSDOS/L_O_V_E__FORTH.4.sg +18 -0
- die/db/db/MSDOS/Lahey_Fortran.4.sg +15 -0
- die/db/db/MSDOS/LamerStop.2.sg +12 -0
- die/db/db/MSDOS/Lattice_C.4.sg +88 -0
- die/db/db/MSDOS/LockTite+.2.sg +12 -0
- die/db/db/MSDOS/Logitech_Modula-2.4.sg +14 -0
- die/db/db/MSDOS/MEGALITE.2.sg +12 -0
- die/db/db/MSDOS/MESS.2.sg +30 -0
- die/db/db/MSDOS/MSLite.1.sg +14 -0
- die/db/db/MSDOS/Maker.2.sg +14 -0
- die/db/db/MSDOS/Mandrake.2.sg +13 -0
- die/db/db/MSDOS/MegaBasic.4.sg +16 -0
- die/db/db/MSDOS/MegaBasic1.4.sg +30 -0
- die/db/db/MSDOS/Meridian_Ada.4.sg +29 -0
- die/db/db/MSDOS/Meridian_Pascal.4.sg +22 -0
- die/db/db/MSDOS/MetaWare_High_C.4.sg +30 -0
- die/db/db/MSDOS/MetaWare_Professional_Pascal.4.sg +24 -0
- die/db/db/MSDOS/Micro_Focus_Cobol.4.sg +19 -0
- die/db/db/MSDOS/Micro_Focus_DOS_extender.0a.sg +13 -0
- die/db/db/MSDOS/Microsoft_Basic.4.sg +23 -0
- die/db/db/MSDOS/Microsoft_C.4.sg +57 -0
- die/db/db/MSDOS/Microsoft_C_Library.3.sg +20 -0
- die/db/db/MSDOS/Microsoft_Fortran.4.sg +15 -0
- die/db/db/MSDOS/Microsoft_Quick_Basic.4.sg +35 -0
- die/db/db/MSDOS/Microsoft_Quick_Pascal.4.sg +16 -0
- die/db/db/MSDOS/Microsoft_RTL.3.sg +48 -0
- die/db/db/MSDOS/Microsoft_RTL_(Clipper).3.sg +13 -0
- die/db/db/MSDOS/MultiLoop_Protection.2.sg +13 -0
- die/db/db/MSDOS/MutaWWP.2.sg +14 -0
- die/db/db/MSDOS/Mutate.2.sg +21 -0
- die/db/db/MSDOS/NE.0.sg +11 -0
- die/db/db/MSDOS/NOCLIP.2.sg +14 -0
- die/db/db/MSDOS/NOTA.2.sg +14 -0
- die/db/db/MSDOS/NTShell.2.sg +14 -0
- die/db/db/MSDOS/Netware_loader.1.sg +12 -0
- die/db/db/MSDOS/Nodebug.2.sg +14 -0
- die/db/db/MSDOS/Novex.2.sg +12 -0
- die/db/db/MSDOS/Oberon-M.4.sg +14 -0
- die/db/db/MSDOS/Optlink.2.sg +31 -0
- die/db/db/MSDOS/Overlay.2.sg +13 -0
- die/db/db/MSDOS/Oyster.1.sg +13 -0
- die/db/db/MSDOS/PACKWIN.2.sg +14 -0
- die/db/db/MSDOS/PC-Guard.2.sg +30 -0
- die/db/db/MSDOS/PCC.4.sg +28 -0
- die/db/db/MSDOS/PCOM.2.sg +14 -0
- die/db/db/MSDOS/PDC_Prolog.4.sg +15 -0
- die/db/db/MSDOS/PGMPAK.2.sg +17 -0
- die/db/db/MSDOS/PGPROT.1.sg +12 -0
- die/db/db/MSDOS/PKEXE.2.sg +13 -0
- die/db/db/MSDOS/PKLITE.2.sg +59 -0
- die/db/db/MSDOS/PKSFX.1.sg +15 -0
- die/db/db/MSDOS/PKTINY.2.sg +14 -0
- die/db/db/MSDOS/PKZIP-SFX.1.sg +13 -0
- die/db/db/MSDOS/PKZIP_mini-sfx.1.sg +17 -0
- die/db/db/MSDOS/PK_sig.1.sg +12 -0
- die/db/db/MSDOS/PMODE.0a.sg +17 -0
- die/db/db/MSDOS/PMWLite.2.sg +14 -0
- die/db/db/MSDOS/PRO-PACK.2.sg +16 -0
- die/db/db/MSDOS/PRO32.0a.sg +14 -0
- die/db/db/MSDOS/PROPACK_SFX.1.sg +13 -0
- die/db/db/MSDOS/PROTECT.2.sg +101 -0
- die/db/db/MSDOS/PVAC.2.sg +14 -0
- die/db/db/MSDOS/Pacific_C.4.sg +24 -0
- die/db/db/MSDOS/Pack.2.sg +14 -0
- die/db/db/MSDOS/Packers.2.sg +17 -0
- die/db/db/MSDOS/Palladix.1.sg +12 -0
- die/db/db/MSDOS/Panda_immunizer.1.sg +14 -0
- die/db/db/MSDOS/Pascal_MT+86.4.sg +20 -0
- die/db/db/MSDOS/PassEXE.2.sg +12 -0
- die/db/db/MSDOS/Patchers.1.sg +18 -0
- die/db/db/MSDOS/Phar_Lap.0a.sg +31 -0
- die/db/db/MSDOS/Pksmart.2.sg +14 -0
- die/db/db/MSDOS/Power_C.4.sg +16 -0
- die/db/db/MSDOS/ProtEXE.2.sg +58 -0
- die/db/db/MSDOS/Protector.2.sg +13 -0
- die/db/db/MSDOS/Quadru-Lock.2.sg +12 -0
- die/db/db/MSDOS/R-Crypt.2.sg +13 -0
- die/db/db/MSDOS/RAR.6.sg +8 -0
- die/db/db/MSDOS/REC.2.sg +22 -0
- die/db/db/MSDOS/REC_small.1.sg +26 -0
- die/db/db/MSDOS/REC_small_AV.1.sg +18 -0
- die/db/db/MSDOS/RELETTER.1.sg +14 -0
- die/db/db/MSDOS/RERP.2.sg +13 -0
- die/db/db/MSDOS/RHC.2.sg +14 -0
- die/db/db/MSDOS/RJcrush.2.sg +12 -0
- die/db/db/MSDOS/RLE_com-packer.2.sg +13 -0
- die/db/db/MSDOS/RM_FORTRAN.4.sg +14 -0
- die/db/db/MSDOS/ROSETINY.2.sg +15 -0
- die/db/db/MSDOS/RSX.0a.sg +12 -0
- die/db/db/MSDOS/RTLink_VM_Manager.0a.sg +12 -0
- die/db/db/MSDOS/RTPatch_SFX.1.sg +13 -0
- die/db/db/MSDOS/Realia_Cobol.4.sg +16 -0
- die/db/db/MSDOS/Realia_SPITBOL.4.sg +14 -0
- die/db/db/MSDOS/Relpack.2.sg +14 -0
- die/db/db/MSDOS/SCRNCH.2.sg +14 -0
- die/db/db/MSDOS/SEA-AXE.2.sg +15 -0
- die/db/db/MSDOS/SFX.1.sg +14 -0
- die/db/db/MSDOS/SHOW_IT.1.sg +14 -0
- die/db/db/MSDOS/SP-FORTH.4.sg +18 -0
- die/db/db/MSDOS/Scramb.2.sg +13 -0
- die/db/db/MSDOS/Secure.2.sg +37 -0
- die/db/db/MSDOS/SelfChk.2.sg +14 -0
- die/db/db/MSDOS/Self_UnStuffer.2.sg +16 -0
- die/db/db/MSDOS/Shrink.2.sg +15 -0
- die/db/db/MSDOS/Shrinker.2.sg +14 -0
- die/db/db/MSDOS/SimplyWare.1.sg +22 -0
- die/db/db/MSDOS/Small_C.4.sg +20 -0
- die/db/db/MSDOS/SnoopStop.2.sg +12 -0
- die/db/db/MSDOS/StonyBrook_Pascal.4.sg +26 -0
- die/db/db/MSDOS/Stub-386.0a.sg +13 -0
- die/db/db/MSDOS/SuckStop.2.sg +27 -0
- die/db/db/MSDOS/Sydex_SFX.1.sg +19 -0
- die/db/db/MSDOS/Symantec_BASIC.4.sg +16 -0
- die/db/db/MSDOS/TCEC.2.sg +18 -0
- die/db/db/MSDOS/TMTSTUB.0a.sg +14 -0
- die/db/db/MSDOS/TSCRUNCH.2.sg +13 -0
- die/db/db/MSDOS/TTW.1.sg +17 -0
- die/db/db/MSDOS/TUCCRYP.2.sg +14 -0
- die/db/db/MSDOS/TXT2COM.1.sg +18 -0
- die/db/db/MSDOS/TXTmaker.1.sg +14 -0
- die/db/db/MSDOS/Tenth_Planet.2.sg +13 -0
- die/db/db/MSDOS/TinyProg.2.sg +27 -0
- die/db/db/MSDOS/Tinyprot.2.sg +16 -0
- die/db/db/MSDOS/Topspeed_C.4.sg +20 -0
- die/db/db/MSDOS/Topspeed_Modula.4.sg +42 -0
- die/db/db/MSDOS/TraceLock.2.sg +13 -0
- die/db/db/MSDOS/Trap.2.sg +50 -0
- die/db/db/MSDOS/TurboChainer.1.sg +13 -0
- die/db/db/MSDOS/Turbo_Basic.4.sg +18 -0
- die/db/db/MSDOS/Turbo_Prolog.4.sg +16 -0
- die/db/db/MSDOS/Txt2Exe.1.sg +14 -0
- die/db/db/MSDOS/UCEXE.2.sg +22 -0
- die/db/db/MSDOS/UPX.2.sg +46 -0
- die/db/db/MSDOS/UR_FORTH.4.sg +14 -0
- die/db/db/MSDOS/Un2pack.2.sg +14 -0
- die/db/db/MSDOS/UnPackStop.2.sg +33 -0
- die/db/db/MSDOS/UniVac.1.sg +14 -0
- die/db/db/MSDOS/Unknown_cryptors.2.sg +54 -0
- die/db/db/MSDOS/Upper_Deck_Forth.4.sg +14 -0
- die/db/db/MSDOS/V-Load.1.sg +13 -0
- die/db/db/MSDOS/Visual_Cobol.4.sg +16 -0
- die/db/db/MSDOS/WATCOM.4.sg +59 -0
- die/db/db/MSDOS/WDOSX.0a.sg +14 -0
- die/db/db/MSDOS/WDOSX32.0a.sg +12 -0
- die/db/db/MSDOS/WPFORTH.4.sg +14 -0
- die/db/db/MSDOS/WWPACK.2.sg +89 -0
- die/db/db/MSDOS/WWPACK_mutator.2.sg +53 -0
- die/db/db/MSDOS/Whitesmiths_C.4.sg +21 -0
- die/db/db/MSDOS/Window_book.1.sg +21 -0
- die/db/db/MSDOS/Wizardy_protection.1.sg +12 -0
- die/db/db/MSDOS/WordPerfect_EXEPack.2.sg +12 -0
- die/db/db/MSDOS/XDOC.2.sg +13 -0
- die/db/db/MSDOS/XMLOD.0a.sg +16 -0
- die/db/db/MSDOS/XPACK.2.sg +37 -0
- die/db/db/MSDOS/Xtender.0a.sg +14 -0
- die/db/db/MSDOS/ZIPSCRUB.2.sg +14 -0
- die/db/db/MSDOS/ZOO.1.sg +14 -0
- die/db/db/MSDOS/Zbikowski_C.4.sg +19 -0
- die/db/db/MSDOS/Zip.6.sg +8 -0
- die/db/db/MSDOS/Zortech(Symantec)_C.4.sg +56 -0
- die/db/db/MSDOS/Zurenava_DOS_Extender.0a.sg +13 -0
- die/db/db/MSDOS/_MSDOS.0.sg +15 -0
- die/db/db/MSDOS/_init +52 -0
- die/db/db/MSDOS/aPACK.2.sg +60 -0
- die/db/db/MSDOS/aPatch.2.sg +13 -0
- die/db/db/MSDOS/anti-tracing_add-on.1.sg +12 -0
- die/db/db/MSDOS/com2exe.2.sg +21 -0
- die/db/db/MSDOS/cramble.2.sg +12 -0
- die/db/db/MSDOS/deep-CRyPTer.2.sg +12 -0
- die/db/db/MSDOS/djgpp.4.sg +16 -0
- die/db/db/MSDOS/dos_extender.0a.sg +16 -0
- die/db/db/MSDOS/dos_extender1.0a.sg +13 -0
- die/db/db/MSDOS/dos_extender2.0a.sg +16 -0
- die/db/db/MSDOS/iLUCRYPT.2.sg +18 -0
- die/db/db/MSDOS/immunizer.1.sg +13 -0
- die/db/db/MSDOS/mbp_SHRINK.2.sg +13 -0
- die/db/db/MSDOS/muLISP-87.4.sg +20 -0
- die/db/db/MSDOS/nbuild.2.sg +12 -0
- die/db/db/MSDOS/overlays.6.sg +73 -0
- die/db/db/MSDOS/self-displayer.1.sg +13 -0
- die/db/db/MSDOS/virus.1.sg +13 -0
- die/db/db/NE/ARC_SFX.1.sg +13 -0
- die/db/db/NE/Borland_C++.1.sg +25 -0
- die/db/db/NE/Borland_Pascal.1.sg +13 -0
- die/db/db/NE/MS_RTL.0.sg +28 -0
- die/db/db/NE/PKZIP-SFX.1.sg +13 -0
- die/db/db/NE/Setup-Specialist.1.sg +16 -0
- die/db/db/NE/Sydex_SFX.1.sg +13 -0
- die/db/db/NE/Watcom_C.1.sg +35 -0
- die/db/db/NE/_NE.0.sg +15 -0
- die/db/db/NE/_init +2 -0
- die/db/db/NPM/JavaScript.5.sg +11 -0
- die/db/db/NPM/PackageName.1.sg +15 -0
- die/db/db/NPM/TypeScript.5.sg +11 -0
- die/db/db/NPM/_NPM.0.sg +16 -0
- die/db/db/NPM/_init +2 -0
- die/db/db/PE/12Ghosts_Zip2.1.sg +16 -0
- die/db/db/PE/32Lite.2.sg +13 -0
- die/db/db/PE/7z.1.sg +43 -0
- die/db/db/PE/7z.4.sg +14 -0
- die/db/db/PE/7z.6.sg +21 -0
- die/db/db/PE/ACCAStore.1.sg +14 -0
- die/db/db/PE/ACE.6.sg +10 -0
- die/db/db/PE/ACProtect.2.sg +30 -0
- die/db/db/PE/ADS_Self_Extractor.1.sg +14 -0
- die/db/db/PE/AHTeam_EP_Protector.2.sg +71 -0
- die/db/db/PE/AHpacker.2.sg +13 -0
- die/db/db/PE/AMD_FSR.4.sg +23 -0
- die/db/db/PE/ANDpakk.2.sg +21 -0
- die/db/db/PE/AOLSetup.1.sg +15 -0
- die/db/db/PE/ARJSFX.1.sg +44 -0
- die/db/db/PE/ARM_Protector.2.sg +21 -0
- die/db/db/PE/ARQ.1.sg +16 -0
- die/db/db/PE/ASDPack.2.sg +12 -0
- die/db/db/PE/ASM_Guard.2.sg +27 -0
- die/db/db/PE/ASPR_Stripper.2.sg +12 -0
- die/db/db/PE/ASPack.2.sg +95 -0
- die/db/db/PE/ASProtect.2.sg +56 -0
- die/db/db/PE/AT4RE_Protector.2.sg +13 -0
- die/db/db/PE/AZProtect_0001.2.sg +11 -0
- die/db/db/PE/Aase_Crypter.2.sg +12 -0
- die/db/db/PE/Abbyy_Lingvo.1.sg +15 -0
- die/db/db/PE/Acronis_installer.1.sg +30 -0
- die/db/db/PE/ActiveMark.2.sg +14 -0
- die/db/db/PE/Active_Delivery.1.sg +16 -0
- die/db/db/PE/Actual_Installer.1.sg +16 -0
- die/db/db/PE/Adobe_FlashPlayer_downloader.1.sg +17 -0
- die/db/db/PE/Adobe_installers.1.sg +32 -0
- die/db/db/PE/Advanced_BAT_to_EXE_converter.2.sg +13 -0
- die/db/db/PE/Advanced_installer.1.sg +30 -0
- die/db/db/PE/Adveractive.1.sg +14 -0
- die/db/db/PE/Aeco_installer.1.sg +13 -0
- die/db/db/PE/Agile.2.sg +11 -0
- die/db/db/PE/Alchemy_Mindworks_installer.1.sg +19 -0
- die/db/db/PE/Alex_Protector.2.sg +15 -0
- die/db/db/PE/Alienyze.1.sg +14 -0
- die/db/db/PE/Amber.2.sg +17 -0
- die/db/db/PE/Anskya_Binder.2.sg +12 -0
- die/db/db/PE/Anskya_NTPacker_Generator.2.sg +11 -0
- die/db/db/PE/AntiDote.2.sg +33 -0
- die/db/db/PE/Anticrack_Software_Protector.2.sg +15 -0
- die/db/db/PE/App_Encryptor.2.sg +13 -0
- die/db/db/PE/ArmDot.2.sg +17 -0
- die/db/db/PE/Armadillo.2.sg +48 -0
- die/db/db/PE/Arxan.2.sg +69 -0
- die/db/db/PE/AssemblyInvoke.2.sg +11 -0
- die/db/db/PE/Astrum.1.sg +21 -0
- die/db/db/PE/AtomPePacker.2.sg +16 -0
- die/db/db/PE/AutoHotKey.3.sg +20 -0
- die/db/db/PE/AutoIt.3.sg +21 -0
- die/db/db/PE/AutoPlay_Media_Studio.1.sg +26 -0
- die/db/db/PE/Autodesk_Self-Extract.1.sg +14 -0
- die/db/db/PE/AutorunProEnterprise.1.sg +16 -0
- die/db/db/PE/AutorunProEnterpriseII.1.sg +16 -0
- die/db/db/PE/AverCryptor.2.sg +22 -0
- die/db/db/PE/BJFnt.2.sg +18 -0
- die/db/db/PE/Babel_.NET.2.sg +23 -0
- die/db/db/PE/BatToExe.1.sg +15 -0
- die/db/db/PE/BatToExeConverter.2.sg +18 -0
- die/db/db/PE/BatchToApp.2.sg +15 -0
- die/db/db/PE/BattlEye.5.sg +18 -0
- die/db/db/PE/BattleshipCrypter.2.sg +12 -0
- die/db/db/PE/BeRo.2.sg +37 -0
- die/db/db/PE/BeRo_Tiny_Pascal.4.sg +13 -0
- die/db/db/PE/Berio.2.sg +15 -0
- die/db/db/PE/BitRock_Installer.1.sg +22 -0
- die/db/db/PE/BitShape_PE_Crypt.2.sg +15 -0
- die/db/db/PE/BlindSpot.2.sg +12 -0
- die/db/db/PE/Blizzard_PrePatch.1.sg +15 -0
- die/db/db/PE/Borland_C++.4.sg +37 -0
- die/db/db/PE/Break_Into_Pattern.2.sg +12 -0
- die/db/db/PE/BulletProofSoft_installer.1.sg +14 -0
- die/db/db/PE/ByfronTech.2.sg +67 -0
- die/db/db/PE/ByteGuard.2.sg +17 -0
- die/db/db/PE/Bytessence_Install_Maker.1.sg +19 -0
- die/db/db/PE/CExe.2.sg +13 -0
- die/db/db/PE/CICompress.2.sg +12 -0
- die/db/db/PE/CSDD_installer.1.sg +18 -0
- die/db/db/PE/CUDA-Driver.4.sg +14 -0
- die/db/db/PE/CZ_installer.1.sg +14 -0
- die/db/db/PE/Cab.1.sg +60 -0
- die/db/db/PE/Cab.6.sg +33 -0
- die/db/db/PE/Calibre_installer.1.sg +19 -0
- die/db/db/PE/Cameyo.2.sg +12 -0
- die/db/db/PE/Celesty_File_Binder.1.sg +18 -0
- die/db/db/PE/ChainskiCrypter.1.sg +11 -0
- die/db/db/PE/Chaos_Software_installer.1.sg +14 -0
- die/db/db/PE/Chilkat_ZIP_Self-Extractor.1.sg +14 -0
- die/db/db/PE/Chromium_Embedded_Framework.4.sg +14 -0
- die/db/db/PE/Chromium_WebView.4.sg +14 -0
- die/db/db/PE/CipherWall.1.sg +20 -0
- die/db/db/PE/CliSecure.2.sg +21 -0
- die/db/db/PE/ClickTeam.1.sg +17 -0
- die/db/db/PE/CodeCrypt.2.sg +21 -0
- die/db/db/PE/CodeFusion_Wizard.1.sg +14 -0
- die/db/db/PE/CodeSafe.2.sg +12 -0
- die/db/db/PE/CodeVeil.2.sg +20 -0
- die/db/db/PE/Code_Virtualizer.2.sg +12 -0
- die/db/db/PE/Codegear_Installer.1.sg +14 -0
- die/db/db/PE/Codewall.2.sg +18 -0
- die/db/db/PE/CoffeeCup_SFX.2.sg +14 -0
- die/db/db/PE/Confuser.2.sg +39 -0
- die/db/db/PE/CopyMinder.2.sg +11 -0
- die/db/db/PE/Costura.Fody.4.sg +11 -0
- die/db/db/PE/CreateInstall.1.sg +22 -0
- die/db/db/PE/Crinkler.2.sg +15 -0
- die/db/db/PE/CronosCrypter.1.sg +12 -0
- die/db/db/PE/Crunch.2.sg +25 -0
- die/db/db/PE/CrypKey.2.sg +20 -0
- die/db/db/PE/CrypKey_Installer.1.sg +14 -0
- die/db/db/PE/CrypToCrack_Pe_Protector.2.sg +15 -0
- die/db/db/PE/Cryptect.1.sg +13 -0
- die/db/db/PE/Cryptic.2.sg +12 -0
- die/db/db/PE/CryptoObfuscator.2.sg +17 -0
- die/db/db/PE/Cxfreeze.1.sg +23 -0
- die/db/db/PE/Cygwin32.4.sg +11 -0
- die/db/db/PE/DBPE.2.sg +25 -0
- die/db/db/PE/DECFortran.4.sg +23 -0
- die/db/db/PE/DMD.4.sg +44 -0
- die/db/db/PE/DNGuard.2.sg +33 -0
- die/db/db/PE/DS.EZ-Logic.sg +12 -0
- die/db/db/PE/DS.Eutron_SmartKey_dongle.5.sg +29 -0
- die/db/db/PE/DS.HASP_dongle.5.sg +22 -0
- die/db/db/PE/DS.Hardlock_dongle.5.sg +24 -0
- die/db/db/PE/DS.MARX_Crypto-Box_dongle.5.sg +30 -0
- die/db/db/PE/DS.Matrix_Hardware_Lock_dongle.5.sg +19 -0
- die/db/db/PE/DS.NetHASP_dongle.5.sg +19 -0
- die/db/db/PE/DS.Novex_dongle.4.sg +13 -0
- die/db/db/PE/DS.RLM.4.sg +25 -0
- die/db/db/PE/DS.SenseLock_dongle.5.sg +20 -0
- die/db/db/PE/DS.Sentinel_SuperPro.2.sg +21 -0
- die/db/db/PE/DS.Sentinel_SuperPro_dongle.5.sg +20 -0
- die/db/db/PE/DS.Sentinel_dongle.5.sg +28 -0
- die/db/db/PE/DS.SoftLok_dongle.5.sg +17 -0
- die/db/db/PE/DS.Unikey_dongle.5.sg +30 -0
- die/db/db/PE/DS.WIBU_Key_dongle.5.sg +20 -0
- die/db/db/PE/DS.Wizzkey_dongle.5.sg +13 -0
- die/db/db/PE/DYAMAR.2.sg +12 -0
- die/db/db/PE/DZA_Patcher.2.sg +15 -0
- die/db/db/PE/Daemon_Protect.2.sg +13 -0
- die/db/db/PE/DalKrypt.2.sg +12 -0
- die/db/db/PE/DataAnubis.1.sg +11 -0
- die/db/db/PE/DeepSea.2.sg +18 -0
- die/db/db/PE/DelZip_SFX.2.sg +14 -0
- die/db/db/PE/Delphi.4.sg +270 -0
- die/db/db/PE/Denuvo.2.sg +97 -0
- die/db/db/PE/DeployMaster.1.sg +15 -0
- die/db/db/PE/Dimd_SFX.1.sg +15 -0
- die/db/db/PE/Ding_Boys_PE-lock_Phantasm.2.sg +18 -0
- die/db/db/PE/Direct2D.4.sg +14 -0
- die/db/db/PE/Direct3D.4.sg +38 -0
- die/db/db/PE/DirectX.4.sg +14 -0
- die/db/db/PE/Dolphin_VM.1.sg +18 -0
- die/db/db/PE/DotFix_Nice_Protect.2.sg +23 -0
- die/db/db/PE/Dotfuscator.2.sg +11 -0
- die/db/db/PE/Duals_eXe_Encryptor.2.sg +19 -0
- die/db/db/PE/DxPack.2.sg +22 -0
- die/db/db/PE/ENIGMA.2.sg +115 -0
- die/db/db/PE/EXE32Pack.2.sg +12 -0
- die/db/db/PE/EXECryptor.2.sg +99 -0
- die/db/db/PE/EXEFog.2.sg +22 -0
- die/db/db/PE/EXE_Password_Protector.2.sg +12 -0
- die/db/db/PE/Eazfuscator.2.sg +16 -0
- die/db/db/PE/ElecKey.2.sg +33 -0
- die/db/db/PE/ElectronApp.3.sg +22 -0
- die/db/db/PE/Enigma_Virtual_Box.2.sg +13 -0
- die/db/db/PE/Envoy_Packager.1.sg +15 -0
- die/db/db/PE/Escargot.2.sg +15 -0
- die/db/db/PE/Eschalon_installer.1.sg +15 -0
- die/db/db/PE/ExE_Pack.2.sg +23 -0
- die/db/db/PE/Excelsior_Installer.1.sg +14 -0
- die/db/db/PE/Excelsior_JET.4.sg +36 -0
- die/db/db/PE/ExeSplitter.1.sg +24 -0
- die/db/db/PE/ExeStealth.2.sg +40 -0
- die/db/db/PE/Exe_Guarder.2.sg +12 -0
- die/db/db/PE/Exe_Locker.2.sg +12 -0
- die/db/db/PE/Exe_Shield.2.sg +28 -0
- die/db/db/PE/FASM.4.sg +22 -0
- die/db/db/PE/FDM_Installer.1.sg +18 -0
- die/db/db/PE/FISH_.NET.2.sg +17 -0
- die/db/db/PE/FSG.2.sg +136 -0
- die/db/db/PE/FileSplit_Self-Merger.2.sg +13 -0
- die/db/db/PE/FishPE_Shield.2.sg +21 -0
- die/db/db/PE/Fish_PE.2.sg +22 -0
- die/db/db/PE/FixupPak.2.sg +12 -0
- die/db/db/PE/Fox_Pro.3.sg +25 -0
- die/db/db/PE/FreeBasic.6.sg +28 -0
- die/db/db/PE/FreeJoiner.1.sg +45 -0
- die/db/db/PE/Free_Pascal.4.sg +54 -0
- die/db/db/PE/Fusion.2.sg +12 -0
- die/db/db/PE/G!X_Protector.2.sg +12 -0
- die/db/db/PE/GPInstall.1.sg +19 -0
- die/db/db/PE/GSplit.1.sg +20 -0
- die/db/db/PE/GZip.1.sg +20 -0
- die/db/db/PE/GameGuard.2.sg +12 -0
- die/db/db/PE/Gentee_Installer.1.sg +35 -0
- die/db/db/PE/Ghost_Installer.1.sg +16 -0
- die/db/db/PE/GkSetup.1.sg +18 -0
- die/db/db/PE/Go.4.sg +61 -0
- die/db/db/PE/Goats_PE_Mutilator.2.sg +12 -0
- die/db/db/PE/GoldSrc.3.sg +20 -0
- die/db/db/PE/Goliath.2.sg +15 -0
- die/db/db/PE/Gremlin_patcher.1.sg +21 -0
- die/db/db/PE/HASP.2.sg +22 -0
- die/db/db/PE/HASP_HL_Protection.2.sg +34 -0
- die/db/db/PE/HTML_executable.1.sg +20 -0
- die/db/db/PE/HackShield.2.sg +17 -0
- die/db/db/PE/Hide&Protect.2.sg +12 -0
- die/db/db/PE/HidePE.2.sg +255 -0
- die/db/db/PE/Huan.1.sg +12 -0
- die/db/db/PE/HyperTech_Crackproof.2.sg +13 -0
- die/db/db/PE/I-D_Media_installer.1.sg +15 -0
- die/db/db/PE/IDM_Installer.1.sg +15 -0
- die/db/db/PE/ID_Application_Protector(NoNamePacker).2.sg +12 -0
- die/db/db/PE/ILProtector.2.sg +13 -0
- die/db/db/PE/ILUCRYPT.2.sg +15 -0
- die/db/db/PE/IMPostor_Pack.2.sg +12 -0
- die/db/db/PE/INCrypter.2.sg +12 -0
- die/db/db/PE/INFTool.1.sg +15 -0
- die/db/db/PE/INTENIUM.1.sg +13 -0
- die/db/db/PE/IProtect.2.sg +17 -0
- die/db/db/PE/Inno_Setup_Module.1.sg +97 -0
- die/db/db/PE/Inquartos_Obfuscator.2.sg +12 -0
- die/db/db/PE/Instalit.1.sg +25 -0
- die/db/db/PE/Install4j_installer.1.sg +16 -0
- die/db/db/PE/InstallAnywhere.1.sg +36 -0
- die/db/db/PE/InstallShield.1.sg +90 -0
- die/db/db/PE/InstallUs.1.sg +16 -0
- die/db/db/PE/Install_Factory.1.sg +14 -0
- die/db/db/PE/Intel_C.4.sg +14 -0
- die/db/db/PE/Intel_IPP.sg +15 -0
- die/db/db/PE/IntelliProtector.2.sg +17 -0
- die/db/db/PE/InxObfuscator.2.sg +14 -0
- die/db/db/PE/JDPack.2.sg +15 -0
- die/db/db/PE/JScript.4.sg +15 -0
- die/db/db/PE/Jar2exe.1.sg +26 -0
- die/db/db/PE/KBys_Packer.2.sg +21 -0
- die/db/db/PE/KGCrypt.2.sg +11 -0
- die/db/db/PE/KRZIP_SFX.2.sg +15 -0
- die/db/db/PE/KoiVM.2.sg +20 -0
- die/db/db/PE/Kryptonit.2.sg +17 -0
- die/db/db/PE/LARP.2.sg +13 -0
- die/db/db/PE/LCC-Win32.4.sg +15 -0
- die/db/db/PE/LCL.5.sg +17 -0
- die/db/db/PE/LDK.2.sg +21 -0
- die/db/db/PE/LDK_.NET.2.sg +13 -0
- die/db/db/PE/Lahey_Fortran_90.4.sg +20 -0
- die/db/db/PE/LameCrypt.2.sg +12 -0
- die/db/db/PE/Laserlok.2.sg +12 -0
- die/db/db/PE/LimeCrypter.2.sg +56 -0
- die/db/db/PE/Lua_Runtime.4.sg +17 -0
- die/db/db/PE/LucasArts_Update_Installer.1.sg +14 -0
- die/db/db/PE/Lyme_SFX.1.sg +15 -0
- die/db/db/PE/MEW.2.sg +26 -0
- die/db/db/PE/MP-ZipTool.1.sg +14 -0
- die/db/db/PE/MPQ.1.sg +15 -0
- die/db/db/PE/MPRESS.2.sg +52 -0
- die/db/db/PE/MSLRH.2.sg +117 -0
- die/db/db/PE/MZ-Crypt.2.sg +12 -0
- die/db/db/PE/MZ0oPE.2.sg +12 -0
- die/db/db/PE/MaskPE.2.sg +15 -0
- die/db/db/PE/Maxtocode.2.sg +21 -0
- die/db/db/PE/Metrowerks_CodeWarrior.2.sg +26 -0
- die/db/db/PE/MicroJoiner.1.sg +21 -0
- die/db/db/PE/Microsoft.6.sg +1735 -0
- die/db/db/PE/Microsoft_C_Runtime.4.sg +16 -0
- die/db/db/PE/Microsoft_Class_Installer.1.sg +22 -0
- die/db/db/PE/Microsoft_Compound-based_installer.1.sg +14 -0
- die/db/db/PE/Microsoft_Edge_WebView.4.sg +14 -0
- die/db/db/PE/Microsoft_NET_Runtime.4.sg +15 -0
- die/db/db/PE/Microsoft_Warbird.2.sg +15 -0
- die/db/db/PE/Microsoft_dotNET_installer.1.sg +16 -0
- die/db/db/PE/Miktex_Installer.1.sg +15 -0
- die/db/db/PE/MinGW.4.sg +78 -0
- die/db/db/PE/Minke.2.sg +12 -0
- die/db/db/PE/Mioplanet_installer.1.sg +14 -0
- die/db/db/PE/MoleBox.2.sg +41 -0
- die/db/db/PE/Morphnah.2.sg +23 -0
- die/db/db/PE/Multimedia_Fusion_Installer.1.sg +14 -0
- die/db/db/PE/Mystic_Compressor.2.sg +15 -0
- die/db/db/PE/N-Joiner.1.sg +12 -0
- die/db/db/PE/N-Joy.2.sg +25 -0
- die/db/db/PE/NETZ.2.sg +11 -0
- die/db/db/PE/NET_Spider.2.sg +14 -0
- die/db/db/PE/NOS_Installer.1.sg +22 -0
- die/db/db/PE/NOS_Packer.2.sg +13 -0
- die/db/db/PE/NTShell.2.sg +13 -0
- die/db/db/PE/NTkrnl_Protector.2.sg +37 -0
- die/db/db/PE/NakedPacker.2.sg +13 -0
- die/db/db/PE/NanoZip.1.sg +16 -0
- die/db/db/PE/NativeCryptor_by_DosX.2.sg +13 -0
- die/db/db/PE/Native_UD_Packer.2.sg +12 -0
- die/db/db/PE/NecroVM.Virt.2.sg +46 -0
- die/db/db/PE/NeoLite.2.sg +39 -0
- die/db/db/PE/NetReactor.2.sg +103 -0
- die/db/db/PE/NetShieldProtector.2.sg +55 -0
- die/db/db/PE/Newtonsoft.Json.4.sg +14 -0
- die/db/db/PE/Nim.4.sg +18 -0
- die/db/db/PE/Ningishzida.2.sg +12 -0
- die/db/db/PE/NodeJS_Nexe.sg +16 -0
- die/db/db/PE/NodeJS_Pkg.sg +16 -0
- die/db/db/PE/NoobyProtect.2.sg +12 -0
- die/db/db/PE/North_Star_PE_Shrinker.2.sg +12 -0
- die/db/db/PE/NsPacK.2.sg +61 -0
- die/db/db/PE/Nuitka.1.sg +26 -0
- die/db/db/PE/Nullsoft_Scriptable_Install_System.1.sg +96 -0
- die/db/db/PE/Nvidia_DLSS.4.sg +22 -0
- die/db/db/PE/Nvidia_PhysX.4.sg +15 -0
- die/db/db/PE/O'Setup95.1.sg +15 -0
- die/db/db/PE/ORiEN.2.sg +19 -0
- die/db/db/PE/Obfuscar.2.sg +14 -0
- die/db/db/PE/Obfuscator_.NET_2009.2.sg +16 -0
- die/db/db/PE/Obsidium.2.sg +272 -0
- die/db/db/PE/OneVM.2.sg +23 -0
- die/db/db/PE/OpenAL.4.sg +14 -0
- die/db/db/PE/OpenCL.4.sg +14 -0
- die/db/db/PE/OpenCV.4.sg +18 -0
- die/db/db/PE/OpenGL.4.sg +14 -0
- die/db/db/PE/OpenSSL.4.sg +14 -0
- die/db/db/PE/OpusAudio.4.sg +15 -0
- die/db/db/PE/Oreans_CodeVirtualizer.2.sg +14 -0
- die/db/db/PE/OxiJoiner.sg +15 -0
- die/db/db/PE/PACE.2.sg +17 -0
- die/db/db/PE/PACKWIN.2.sg +12 -0
- die/db/db/PE/PCInstall.1.sg +14 -0
- die/db/db/PE/PCShrink.2.sg +15 -0
- die/db/db/PE/PC_Guard.2.sg +20 -0
- die/db/db/PE/PE-Admin.2.sg +12 -0
- die/db/db/PE/PE-Armor.2.sg +21 -0
- die/db/db/PE/PE-Shield.2.sg +16 -0
- die/db/db/PE/PEBundle.2.sg +25 -0
- die/db/db/PE/PECRYPT32.2.sg +22 -0
- die/db/db/PE/PECompact.2.sg +167 -0
- die/db/db/PE/PELock.2.sg +47 -0
- die/db/db/PE/PESpin.2.sg +56 -0
- die/db/db/PE/PETetris.sg +11 -0
- die/db/db/PE/PEUnion.2.sg +122 -0
- die/db/db/PE/PE_Diminisher.2.sg +16 -0
- die/db/db/PE/PE_Encrypt.2.sg +12 -0
- die/db/db/PE/PE_Intro.2.sg +12 -0
- die/db/db/PE/PE_Lock_NT.2.sg +21 -0
- die/db/db/PE/PE_Password.2.sg +12 -0
- die/db/db/PE/PE_Protect.2.sg +15 -0
- die/db/db/PE/PEncrypt.2.sg +21 -0
- die/db/db/PE/PEnguinCrypt.2.sg +12 -0
- die/db/db/PE/PIMP.1.sg +14 -0
- die/db/db/PE/PKLITE.2.sg +15 -0
- die/db/db/PE/PKSFX.1.sg +14 -0
- die/db/db/PE/PMaker.1.sg +13 -0
- die/db/db/PE/PUNiSHER.2.sg +12 -0
- die/db/db/PE/Pack_Master.2.sg +12 -0
- die/db/db/PE/PackageForTheWeb.1.sg +15 -0
- die/db/db/PE/Packanoid.2.sg +12 -0
- die/db/db/PE/Packman.2.sg +18 -0
- die/db/db/PE/Pantaray_QSetup.1.sg +29 -0
- die/db/db/PE/Paquet.1.sg +16 -0
- die/db/db/PE/Paquet_Builder.1.sg +15 -0
- die/db/db/PE/Patch.1.sg +20 -0
- die/db/db/PE/PePack.2.sg +16 -0
- die/db/db/PE/PeX.2.sg +12 -0
- die/db/db/PE/Pe_Ninja.2.sg +12 -0
- die/db/db/PE/Pelles_C.4.sg +14 -0
- die/db/db/PE/Perl.3.sg +93 -0
- die/db/db/PE/PerlApp.1.sg +21 -0
- die/db/db/PE/Petite.2.sg +56 -0
- die/db/db/PE/Phoenix.2.sg +19 -0
- die/db/db/PE/Photo_Compiler.2.sg +15 -0
- die/db/db/PE/PowerBASIC.4.sg +14 -0
- die/db/db/PE/Power_Screen_Recorder.1.sg +16 -0
- die/db/db/PE/Private_EXE_Protector.2.sg +86 -0
- die/db/db/PE/PureBasic.4.sg +55 -0
- die/db/db/PE/PwdProtect.2.sg +11 -0
- die/db/db/PE/Py2exe.1.sg +15 -0
- die/db/db/PE/PyInstaller.2.sg +72 -0
- die/db/db/PE/PyInstallerHider.1.sg +27 -0
- die/db/db/PE/Python.3.sg +22 -0
- die/db/db/PE/Qt.4.sg +33 -0
- die/db/db/PE/Quantum.1.sg +17 -0
- die/db/db/PE/QuestPowerGUI.2.sg +16 -0
- die/db/db/PE/QuickBFC.2.sg +19 -0
- die/db/db/PE/QuickPack_NT.2.sg +13 -0
- die/db/db/PE/RADBasic.4.sg +17 -0
- die/db/db/PE/RCryptor.2.sg +39 -0
- die/db/db/PE/RDG_Tejon_Crypter.2.sg +12 -0
- die/db/db/PE/RJoiner.1.sg +17 -0
- die/db/db/PE/RLP.2.sg +12 -0
- die/db/db/PE/RLPack.2.sg +47 -0
- die/db/db/PE/RNsetup.1.sg +17 -0
- die/db/db/PE/RPP.1.sg +14 -0
- die/db/db/PE/RTPatch.1.sg +15 -0
- die/db/db/PE/ReNET-pack.2.sg +11 -0
- die/db/db/PE/RealBasic.4.sg +24 -0
- die/db/db/PE/RobustObfuscator.2.sg +15 -0
- die/db/db/PE/RosASM.4.sg +20 -0
- die/db/db/PE/Rust.4.sg +34 -0
- die/db/db/PE/SCE_installer.1.sg +18 -0
- die/db/db/PE/SC_Obfuscator.2.sg +12 -0
- die/db/db/PE/SC_Pack.2.sg +13 -0
- die/db/db/PE/SDL.4.sg +21 -0
- die/db/db/PE/SDProtector.2.sg +18 -0
- die/db/db/PE/SFXRun.1.sg +14 -0
- die/db/db/PE/SLVc0deProtector.2.sg +21 -0
- die/db/db/PE/STATICSUP.1.sg +14 -0
- die/db/db/PE/STUD.2.sg +12 -0
- die/db/db/PE/SVK_Protector.2.sg +22 -0
- die/db/db/PE/SZDD.1.sg +40 -0
- die/db/db/PE/Safedisc.2.sg +13 -0
- die/db/db/PE/Safenet_RMS.2.sg +12 -0
- die/db/db/PE/Safengine_Shielden.2.sg +43 -0
- die/db/db/PE/ScriptHookV.4.sg +14 -0
- die/db/db/PE/SecuPack.2.sg +13 -0
- die/db/db/PE/SecuROM.2.sg +22 -0
- die/db/db/PE/Secure_Shade.2.sg +13 -0
- die/db/db/PE/SerGreen_Appacker.2.sg +16 -0
- die/db/db/PE/Setup-Specialist.1.sg +15 -0
- die/db/db/PE/Setup_Factory.1.sg +42 -0
- die/db/db/PE/SfxCA.1.sg +20 -0
- die/db/db/PE/Shrink_Wrap.2.sg +12 -0
- die/db/db/PE/Shrinker.2.sg +27 -0
- die/db/db/PE/SimbiOZ.2.sg +19 -0
- die/db/db/PE/SimplePackerByEronana.2.sg +14 -0
- die/db/db/PE/Simple_Pack.2.sg +15 -0
- die/db/db/PE/Sixxpack.2.sg +20 -0
- die/db/db/PE/Skater.2.sg +16 -0
- die/db/db/PE/Smart_Assembly.2.sg +36 -0
- die/db/db/PE/Smart_Install_Maker.1.sg +17 -0
- die/db/db/PE/SmokesCrypt.2.sg +12 -0
- die/db/db/PE/SoftProtect.2.sg +13 -0
- die/db/db/PE/SoftSentry.2.sg +16 -0
- die/db/db/PE/Soft_Defender.2.sg +20 -0
- die/db/db/PE/Softlocx.1.sg +13 -0
- die/db/db/PE/Software_Compress.2.sg +15 -0
- die/db/db/PE/Sony_Windows_Installer.1.sg +16 -0
- die/db/db/PE/SpASM.4.sg +20 -0
- die/db/db/PE/Special_EXE_Password_Protector.2.sg +12 -0
- die/db/db/PE/SpicesNet.2.sg +34 -0
- die/db/db/PE/Spoon_Installer.1.sg +23 -0
- die/db/db/PE/Spoon_Studio.2.sg +16 -0
- die/db/db/PE/Squeez_SFX.1.sg +15 -0
- die/db/db/PE/Squirrel_installer.1.sg +16 -0
- die/db/db/PE/Squishy.2.sg +11 -0
- die/db/db/PE/StarForce.2.sg +58 -0
- die/db/db/PE/Ste@lth_PE.2.sg +16 -0
- die/db/db/PE/Steam.4.sg +14 -0
- die/db/db/PE/Stones_PE_Encryptor.2.sg +22 -0
- die/db/db/PE/Store_Installer.1.sg +13 -0
- die/db/db/PE/SwiftView_installer.1.sg +15 -0
- die/db/db/PE/Synactis_In-The-Box_Installer.1.sg +21 -0
- die/db/db/PE/TPP_Pack.2.sg +12 -0
- die/db/db/PE/Tages.2.sg +12 -0
- die/db/db/PE/Tarma_Installer.1.sg +29 -0
- die/db/db/PE/TheArk.2.sg +11 -0
- die/db/db/PE/Themida.2.sg +89 -0
- die/db/db/PE/Thinstall.2.sg +89 -0
- die/db/db/PE/TrueCrypt-VeraCrypt_installer.1.sg +18 -0
- die/db/db/PE/UFI_installer.1.sg +14 -0
- die/db/db/PE/UG2002_Cruncher.2.sg +12 -0
- die/db/db/PE/UPX-Patcher.6.sg +29 -0
- die/db/db/PE/UPX.2.sg +174 -0
- die/db/db/PE/UPXFreak.2.sg +12 -0
- die/db/db/PE/UPX_Inliner.2.sg +12 -0
- die/db/db/PE/UPX_Modifier.2.sg +12 -0
- die/db/db/PE/UPX_Mutanter.2.sg +21 -0
- die/db/db/PE/UPX_Protector.2.sg +12 -0
- die/db/db/PE/UPX_lock.2.sg +12 -0
- die/db/db/PE/UPX_scrambler.2.sg +20 -0
- die/db/db/PE/UPX_shit.2.sg +21 -0
- die/db/db/PE/UPXcrypter.2.sg +11 -0
- die/db/db/PE/UPolyX.2.sg +30 -0
- die/db/db/PE/UltraPro.2.sg +18 -0
- die/db/db/PE/UnoPiX.2.sg +27 -0
- die/db/db/PE/VBox.2.sg +15 -0
- die/db/db/PE/VCasm-Protector.2.sg +21 -0
- die/db/db/PE/VMProtect.2.sg +296 -0
- die/db/db/PE/VMProtect_NET.2.sg +57 -0
- die/db/db/PE/VPacker.2.sg +13 -0
- die/db/db/PE/VaySoft_PDF2EXE.2.sg +16 -0
- die/db/db/PE/VbsToExe.1.sg +31 -0
- die/db/db/PE/VbsToExeConverter.2.sg +18 -0
- die/db/db/PE/Virbox.2.sg +13 -0
- die/db/db/PE/Virtual_Pascal.4.sg +15 -0
- die/db/db/PE/Vise.1.sg +16 -0
- die/db/db/PE/VisualStudio_NET.6.sg +14 -0
- die/db/db/PE/Visual_Objects.4.sg +13 -0
- die/db/db/PE/Visual_Prolog.4.sg +15 -0
- die/db/db/PE/Vulkan.4.sg +14 -0
- die/db/db/PE/WF.Guna.UI2.4.sg +15 -0
- die/db/db/PE/WF.Krypton.4.sg +14 -0
- die/db/db/PE/WF.MetroFramework.4.sg +14 -0
- die/db/db/PE/WF_WPF.MaterialSkin.4.sg +14 -0
- die/db/db/PE/WWPACK.2.sg +11 -0
- die/db/db/PE/Watcom.4.sg +36 -0
- die/db/db/PE/WiX_Toolset_installer.1.sg +21 -0
- die/db/db/PE/Wibu_Codemeter.1.sg +30 -0
- die/db/db/PE/WinACE.1.sg +12 -0
- die/db/db/PE/WinIMP.1.sg +15 -0
- die/db/db/PE/WinImage.1.sg +15 -0
- die/db/db/PE/WinPatch.1.sg +18 -0
- die/db/db/PE/WinRAR.1.sg +18 -0
- die/db/db/PE/WinRAR_Installer.1.sg +28 -0
- die/db/db/PE/WinUpack.2.sg +64 -0
- die/db/db/PE/WinZip.1.sg +44 -0
- die/db/db/PE/Winamp_Installer.1.sg +14 -0
- die/db/db/PE/Wind_of_Crypt.2.sg +12 -0
- die/db/db/PE/Windows_Authenticode.7.sg +13 -0
- die/db/db/PE/Windows_Installer.1.sg +22 -0
- die/db/db/PE/Wine.3.sg +12 -0
- die/db/db/PE/Wise_Installer.1.sg +52 -0
- die/db/db/PE/XCR.2.sg +13 -0
- die/db/db/PE/XComp.2.sg +19 -0
- die/db/db/PE/XPACK.2.sg +17 -0
- die/db/db/PE/Xash.3.sg +20 -0
- die/db/db/PE/Xbase.4.sg +30 -0
- die/db/db/PE/Xenocode_Postbuild.2.sg +12 -0
- die/db/db/PE/Xerces-CPP.4.sg +15 -0
- die/db/db/PE/XerinFuscator.2.sg +31 -0
- die/db/db/PE/Xojo.3.sg +29 -0
- die/db/db/PE/Xoreax_installer.1.sg +19 -0
- die/db/db/PE/Xtreamlok.2.sg +22 -0
- die/db/db/PE/Yano.2.sg +12 -0
- die/db/db/PE/Yodas_Crypter.2.sg +35 -0
- die/db/db/PE/Yodas_Protector.2.sg +15 -0
- die/db/db/PE/Yummy_Game_SoftwareShield.2.sg +17 -0
- die/db/db/PE/Zig.4.sg +22 -0
- die/db/db/PE/ZipCentral_SFX.1.sg +16 -0
- die/db/db/PE/Zip_SFX.2.sg +62 -0
- die/db/db/PE/Zprotect.2.sg +26 -0
- die/db/db/PE/Zydis.4.sg +14 -0
- die/db/db/PE/_FixDetects.9.sg +79 -0
- die/db/db/PE/_NetCompilersLibs.4.sg +39 -0
- die/db/db/PE/_PE.0.sg +22 -0
- die/db/db/PE/__GenericHeuristicAnalysis_By_DosX.7.sg +3357 -0
- die/db/db/PE/_init +138 -0
- die/db/db/PE/_simpleNetAntivirus.1.sg +246 -0
- die/db/db/PE/aPack.2.sg +26 -0
- die/db/db/PE/arj.6.sg +10 -0
- die/db/db/PE/beria.2.sg +12 -0
- die/db/db/PE/curl.4.sg +14 -0
- die/db/db/PE/dUP.1.sg +20 -0
- die/db/db/PE/de4dot.6.sg +20 -0
- die/db/db/PE/dePACK.2.sg +13 -0
- die/db/db/PE/distutils.1.sg +18 -0
- die/db/db/PE/eXPressor.2.sg +59 -0
- die/db/db/PE/ezip.2.sg +14 -0
- die/db/db/PE/gcc.4.sg +15 -0
- die/db/db/PE/hXOR_packer.sg +13 -0
- die/db/db/PE/hmimys_PE-Pack.2.sg +23 -0
- die/db/db/PE/hmimys_Protect.2.sg +18 -0
- die/db/db/PE/iPB_Protect.2.sg +12 -0
- die/db/db/PE/inPEct.1.sg +10 -0
- die/db/db/PE/java.3.sg +21 -0
- die/db/db/PE/keygens.1.sg +25 -0
- die/db/db/PE/kkrunchy.2.sg +19 -0
- die/db/db/PE/ldc.4.sg +13 -0
- die/db/db/PE/linker.6.sg +100 -0
- die/db/db/PE/mPack.2.sg +15 -0
- die/db/db/PE/mkfPack.2.sg +12 -0
- die/db/db/PE/nPack.2.sg +36 -0
- die/db/db/PE/netshrink.2.sg +25 -0
- die/db/db/PE/obfus_h.5.sg +15 -0
- die/db/db/PE/obfusheader_h.5.sg +32 -0
- die/db/db/PE/ps2exe.2.sg +15 -0
- die/db/db/PE/rar.1.sg +16 -0
- die/db/db/PE/rar.6.sg +10 -0
- die/db/db/PE/scr2exe.2.sg +18 -0
- die/db/db/PE/sql-server.sg +14 -0
- die/db/db/PE/sqlite.4.sg +14 -0
- die/db/db/PE/sqx.1.sg +14 -0
- die/db/db/PE/tElock.2.sg +81 -0
- die/db/db/PE/tcc.4.sg +45 -0
- die/db/db/PE/wxWidgets.5.sg +27 -0
- die/db/db/PE/yzPack.2.sg +26 -0
- die/db/db/PE/zip.6.sg +10 -0
- die/db/db/PE/zlib.4.sg +14 -0
- die/db/db/QtFramework +16 -0
- die/db/db/RosASM +13 -0
- die/db/db/SpASM +8 -0
- die/db/db/ZIP/_ZIP.0.sg +17 -0
- die/db/db/ZIP/_init +2 -0
- die/db/db/_debug +23 -0
- die/db/db/_init +149 -0
- die/db/db/archive-file +36 -0
- die/db/db/arj +80 -0
- die/db/db/cab +45 -0
- die/db/db/duration +14 -0
- die/db/db/language +46 -0
- die/db/db/python +30 -0
- die/db/db/rar +75 -0
- die/db/db/read +692 -0
- die/db/db/shell-script +24 -0
- die/db/db/wxWidgets +12 -0
- die/db/db/zip-file +87 -0
- die/db/db/zlib +23 -0
- die/db/db_custom/PE/example.sg +18 -0
- die/db/db_custom/where-is-structure-example.txt +1 -0
- die/die.lib +0 -0
- die.lib +0 -0
- die_python-0.4.0.dist-info/METADATA +335 -0
- die_python-0.4.0.dist-info/RECORD +2917 -0
- die_python-0.4.0.dist-info/WHEEL +5 -0
- die_python-0.4.0.dist-info/licenses/LICENSE +201 -0
- include/die.h +60 -0
|
@@ -0,0 +1,3357 @@
|
|
|
1
|
+
/*
|
|
2
|
+
██████╗ ███████╗███╗ ██╗███████╗██████╗ ██╗ ██████╗
|
|
3
|
+
██╔════╝ ██╔════╝████╗ ██║██╔════╝██╔══██╗██║██╔════╝
|
|
4
|
+
██║ ███╗█████╗ ██╔██╗ ██║█████╗ ██████╔╝██║██║
|
|
5
|
+
██║ ██║██╔══╝ ██║╚██╗██║██╔══╝ ██╔══██╗██║██║
|
|
6
|
+
╚██████╔╝███████╗██║ ╚████║███████╗██║ ██║██║╚██████╗
|
|
7
|
+
╚═════╝ ╚══════╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═════╝
|
|
8
|
+
██╗ ██╗ ██╗███████╗██╗ ██╗██████╗ ██╗███████╗████████╗██╗ ██████╗ ██╗
|
|
9
|
+
██╔╝ ██║ ██║██╔════╝██║ ██║██╔══██╗██║██╔════╝╚══██╔══╝██║██╔════╝ ╚██╗
|
|
10
|
+
██╔╝ ███████║█████╗ ██║ ██║██████╔╝██║███████╗ ██║ ██║██║ ╚██╗
|
|
11
|
+
╚██╗ ██╔══██║██╔══╝ ██║ ██║██╔══██╗██║╚════██║ ██║ ██║██║ ██╔╝
|
|
12
|
+
╚██╗ ██║ ██║███████╗╚██████╔╝██║ ██║██║███████║ ██║ ██║╚██████╗ ██╔╝
|
|
13
|
+
╚═╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝
|
|
14
|
+
█████╗ ███╗ ██╗ █████╗ ██╗ ██╗ ██╗███████╗██╗███████╗
|
|
15
|
+
██╔══██╗████╗ ██║██╔══██╗██║ ╚██╗ ██╔╝██╔════╝██║██╔════╝
|
|
16
|
+
███████║██╔██╗ ██║███████║██║ ╚████╔╝ ███████╗██║███████╗
|
|
17
|
+
██╔══██║██║╚██╗██║██╔══██║██║ ╚██╔╝ ╚════██║██║╚════██║
|
|
18
|
+
██║ ██║██║ ╚████║██║ ██║███████╗██║ ███████║██║███████║
|
|
19
|
+
╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝╚═╝ ╚══════╝╚═╝╚══════╝
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
// Detect It Easy: detection rule file
|
|
23
|
+
|
|
24
|
+
// =================== [ ABOUT ] ===================
|
|
25
|
+
// This heuristic analysis will help identify
|
|
26
|
+
// presence of obfuscation the or wrapper
|
|
27
|
+
// tricks through advanced complex checks.
|
|
28
|
+
// Static emulation, signature analysis,
|
|
29
|
+
// smart checks and much more!
|
|
30
|
+
// ================================================
|
|
31
|
+
|
|
32
|
+
// ================== [ DONATE ] ==================
|
|
33
|
+
// Did you like my work? :D Thank you! But what
|
|
34
|
+
// about donation? I'll be very grateful <3
|
|
35
|
+
//
|
|
36
|
+
// >> Payeer: P1066822521 [Recommended]
|
|
37
|
+
//
|
|
38
|
+
// >> BTC: 37uRiHBqK3QiJ2jamqmmk1Q3sCmAmWngcC
|
|
39
|
+
// 0,0005 BTC minimum
|
|
40
|
+
//
|
|
41
|
+
// >> LTC: MCwRK1Z7K4GYHt9ZrbTR2SMCEqzqQaTbRF
|
|
42
|
+
// 0,001 LTC minimum
|
|
43
|
+
//
|
|
44
|
+
// >> USDT: TUVH7QkcZws78QMC3XyAwfuzxUbaeLnfAC
|
|
45
|
+
// TRC-20 5 USDT minimum
|
|
46
|
+
// ================================================
|
|
47
|
+
|
|
48
|
+
// ================= [ CONTACTS ] =================
|
|
49
|
+
// Author: DosX
|
|
50
|
+
// E-Mail: collab@kay-software.ru
|
|
51
|
+
// GitHub: https://github.com/DosX-dev
|
|
52
|
+
// Telegram: @DosX_dev
|
|
53
|
+
// ================================================
|
|
54
|
+
// If I don't respond to email, message to Telegram
|
|
55
|
+
// ================================================
|
|
56
|
+
|
|
57
|
+
// For the script to work correctly, the following
|
|
58
|
+
// official Detect It Easy components are required:
|
|
59
|
+
// "language", "FASM", "RosASM", "SpASM", "FPC"
|
|
60
|
+
// "PE\linker.6.sg", "Microsoft.6.sg"
|
|
61
|
+
|
|
62
|
+
// Please do not read the code out loud unless you have exorcism skills
|
|
63
|
+
|
|
64
|
+
const logType = {
|
|
65
|
+
warning: -2,
|
|
66
|
+
about: -1,
|
|
67
|
+
nothing: 0,
|
|
68
|
+
any: 1,
|
|
69
|
+
net: 2
|
|
70
|
+
},
|
|
71
|
+
heurLabel = "HEUR";
|
|
72
|
+
|
|
73
|
+
var lastOffsetDetected = "0x00";
|
|
74
|
+
|
|
75
|
+
const detect = main;
|
|
76
|
+
|
|
77
|
+
function main() {
|
|
78
|
+
if (stubForWrongEnvironment()) return null; // 'PE' is undefined
|
|
79
|
+
if (stubForLegacyEngines()) return null; // old DIE version
|
|
80
|
+
|
|
81
|
+
if (PE.isHeuristicScan()) {
|
|
82
|
+
if (!PE.isVerbose()) {
|
|
83
|
+
log(logType.warning, "To get the full heuristic scan result use '--verbose'");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
log(logType.about, "Generic Heuristic Analysis by DosX (@DosX_dev)");
|
|
87
|
+
|
|
88
|
+
log(logType.nothing, "Scanning has begun!");
|
|
89
|
+
|
|
90
|
+
if (PE.isNET()) {
|
|
91
|
+
scanForObfuscations_NET();
|
|
92
|
+
scanForAntiAnalysis_NET();
|
|
93
|
+
} else {
|
|
94
|
+
scanForObfuscations_Native();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
scanForPackersAndCryptors_NET_and_Native();
|
|
98
|
+
scanForLicensingSystems_NET_and_Native();
|
|
99
|
+
scanForBadFileFormat_NET_and_Native();
|
|
100
|
+
scanForDebugData_NET_and_Native();
|
|
101
|
+
|
|
102
|
+
if (PE.isVerbose()) {
|
|
103
|
+
scanForLanguages_NET_and_Native();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// >> Happy end <<
|
|
107
|
+
log(logType.nothing, "Scan completed.");
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
// scanForMaciliousCode_NET_and_Native();
|
|
111
|
+
} else {
|
|
112
|
+
log(logType.warning, "Heuristic scan is disabled. Use '--heuristicscan' to enable");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
function stubForLegacyEngines() {
|
|
119
|
+
if (typeof _error === "undefined") {
|
|
120
|
+
stdout(">>> Update DIE Engine to 3.11 and higher for using Heuristic-analyser by DosX <<<");
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
function stubForWrongEnvironment() {
|
|
130
|
+
if (typeof PE === "undefined") {
|
|
131
|
+
stdout(">>> Wrong environment! 'PE' is undefined. Check DIE-engine for correct installation <<<");
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Outputs a warning message to the appropriate output stream.
|
|
142
|
+
*
|
|
143
|
+
* Depending on the environment, this function will:
|
|
144
|
+
* - Use `console.warn` if `console` is available.
|
|
145
|
+
* - Use `_setResult` if `File` is available.
|
|
146
|
+
* - Use `_error` if it is defined as a function.
|
|
147
|
+
* - Throw an error if none of the above conditions are met.
|
|
148
|
+
*
|
|
149
|
+
* @param {string} stringToOut - The warning message to output.
|
|
150
|
+
*/
|
|
151
|
+
function stdout(stringToOut) {
|
|
152
|
+
if (typeof console === "object") {
|
|
153
|
+
console.warn(stringToOut);
|
|
154
|
+
} else if (typeof File === "object") {
|
|
155
|
+
_setResult("~warning", stringToOut, String(), String());
|
|
156
|
+
} else {
|
|
157
|
+
if (typeof _error === "function") {
|
|
158
|
+
_error(stringToOut);
|
|
159
|
+
} else {
|
|
160
|
+
throw stringToOut;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
function scanForObfuscations_NET() {
|
|
168
|
+
var options = String();
|
|
169
|
+
|
|
170
|
+
var isDetected = Boolean();
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
const isVbNet = isVbNetStandartLibraryPresent();
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
var isEntryPointModified = false;
|
|
179
|
+
|
|
180
|
+
const vbNetEntries = [
|
|
181
|
+
"Main",
|
|
182
|
+
"main",
|
|
183
|
+
"MAIN",
|
|
184
|
+
"MyApplication"
|
|
185
|
+
],
|
|
186
|
+
defaultEntries = [ // like MSIL, C#, C++ NET etc
|
|
187
|
+
"Main",
|
|
188
|
+
"main", // F# entry
|
|
189
|
+
"main@", // F# entry
|
|
190
|
+
"<Main>$", // For programs with top-level operators (C#)
|
|
191
|
+
"mainCRTStartup", // C++ CLR .NET (CLI)
|
|
192
|
+
"wWinMainCRTStartup" // C++ CLR .NET (GUI)
|
|
193
|
+
]
|
|
194
|
+
|
|
195
|
+
if (!PE.isDll()) {
|
|
196
|
+
if (isVbNet) {
|
|
197
|
+
if (isAllNetReferencesMissing(vbNetEntries)) {
|
|
198
|
+
isEntryPointModified = true;
|
|
199
|
+
}
|
|
200
|
+
} else if (isAllNetReferencesMissing(defaultEntries)) {
|
|
201
|
+
isEntryPointModified = true;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (isEntryPointModified) {
|
|
205
|
+
log(logType.net, "No \"Main\" method found")
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (isEntryPointModified) options = "Modified EP";
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
// <Module>.cctor can execute code before the Main method is called
|
|
215
|
+
|
|
216
|
+
var isNetCctorPresent = false;
|
|
217
|
+
|
|
218
|
+
if (PE.isNetGlobalCctorPresent() && !isClrNET()) {
|
|
219
|
+
log(logType.net, "Global constructor detected!");
|
|
220
|
+
isNetCctorPresent = true;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (isNetCctorPresent) options += (options.length != 0 ? " + " : String()) + "CLR constructor";
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
// If .NET meta headers are not present in the default .NET section, then the file is mutant
|
|
229
|
+
|
|
230
|
+
var isStrangeEpPosition = false;
|
|
231
|
+
|
|
232
|
+
const netMetaHeaders = [
|
|
233
|
+
"~",
|
|
234
|
+
"Strings",
|
|
235
|
+
"US",
|
|
236
|
+
"GUID",
|
|
237
|
+
"Blob"
|
|
238
|
+
];
|
|
239
|
+
|
|
240
|
+
// Specify the default .NET section index
|
|
241
|
+
const defaultNetSection = 0;
|
|
242
|
+
|
|
243
|
+
// Check conditions for a strange entry point position (not for CLR apps)
|
|
244
|
+
if (!PE.isDll() && PE.getNumberOfSections() > 1 && !isClrNET()) {
|
|
245
|
+
// Iterate through .NET metadata headers
|
|
246
|
+
for (var s = 0; s < netMetaHeaders.length; s++) {
|
|
247
|
+
const headerName = netMetaHeaders[s];
|
|
248
|
+
|
|
249
|
+
// Check if the signature is not present in the default .NET section
|
|
250
|
+
if (!PE.isSignatureInSectionPresent(defaultNetSection, "00'#" + headerName + "'00")) {
|
|
251
|
+
isStrangeEpPosition = true;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (isStrangeEpPosition) options += (options.length != 0 ? " + " : String()) + "Strange EP position";
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
// .NET files has a specific pattern of the entry point
|
|
263
|
+
|
|
264
|
+
var isNativeEntryPointModified = false;
|
|
265
|
+
|
|
266
|
+
if (!PE.isDll() && !isClrNET()) { // not for CLR apps
|
|
267
|
+
if (!PE.is64()) {
|
|
268
|
+
// FF2500????00: jmp dword ptr [ ... ]
|
|
269
|
+
const firstOpCode = getFirstEpAsmOpCode();
|
|
270
|
+
|
|
271
|
+
if (firstOpCode !== "JMP") {
|
|
272
|
+
if (PE.VAToOffset(PE.getAddressOfEntryPoint()) !== -1) {
|
|
273
|
+
log(logType.net, "Very strange EP pattern: " + getEpAsmPattern(onlyOpCodes = true, numberOf = 4).split("|").join(" .. "));
|
|
274
|
+
} else {
|
|
275
|
+
log(logType.net, "No native entry point");
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
isNativeEntryPointModified = true;
|
|
279
|
+
}
|
|
280
|
+
} else { // AMD64
|
|
281
|
+
if (PE.VAToOffset(PE.getAddressOfEntryPoint()) !== 0x00) {
|
|
282
|
+
isNativeEntryPointModified = true;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (isNativeEntryPointModified) options += (options.length != 0 ? " + " : String()) + "Modified native EP";
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
// Check if the specified DOS message is not found in the DOS stub
|
|
293
|
+
|
|
294
|
+
var isDosMessageModified = false;
|
|
295
|
+
|
|
296
|
+
if (PE.findSignature(PE.getDosStubOffset(), PE.getDosStubSize(), "'This program cannot be run in DOS mode.'") === -1) {
|
|
297
|
+
log(logType.net, "DOS-stub modified!");
|
|
298
|
+
isDosMessageModified = true;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
if (isDosMessageModified) options += (options.length != 0 ? " + " : String()) + "Modified DOS";
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
// Check PE image for strange sections
|
|
307
|
+
|
|
308
|
+
var strangeSections = false;
|
|
309
|
+
|
|
310
|
+
const badChars = '_-=+~!@#$%^&*()"№;%:?*():;,/\\|\'`<>.0123456789'; // Very very bad!
|
|
311
|
+
|
|
312
|
+
if (PE.getNumberOfSections() > (!isClrNET() ? 6 : 10) || !PE.isSectionNamePresent(".text")) { strangeSections = true; } else {
|
|
313
|
+
// Iterate through each section
|
|
314
|
+
for (var i = 0; i < PE.getNumberOfSections() && !strangeSections; i++) {
|
|
315
|
+
const sectionName = PE.getSectionName(i);
|
|
316
|
+
|
|
317
|
+
// Check if the first character is not "." and the length of name is less than 3
|
|
318
|
+
if (sectionName[0] !== "." && sectionName.length < 3) {
|
|
319
|
+
strangeSections = true;
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// Iterate through characters after "."
|
|
324
|
+
// Check if the character is in the badChars list
|
|
325
|
+
for (var d = 0; d < badChars.length && !strangeSections; d++) {
|
|
326
|
+
if (sectionName.substr(1, sectionName.length).indexOf(badChars[d]) !== -1) {
|
|
327
|
+
strangeSections = true;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
if (strangeSections) options += (options.length != 0 ? " + " : String()) + "Strange sections";
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
const opCodes = new NetOpCodes();
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
// A popular way to obfuscate numbers/booleans
|
|
344
|
+
|
|
345
|
+
var isIntConfusionPresent = false;
|
|
346
|
+
|
|
347
|
+
const intConfusionXorPattern = opCodes.ldc_i4 + opCodes.ldc_i4 + opCodes.xor + opCodes.ldc_i4;
|
|
348
|
+
|
|
349
|
+
if (validateNetByteCode(intConfusionXorPattern)) {
|
|
350
|
+
if (validateNetByteCode( // samples by: Inx Obfuscator
|
|
351
|
+
intConfusionXorPattern +
|
|
352
|
+
(opCodes.bne_un_s + opCodes.ldc_i4_2 + opCodes.stloc_0 + opCodes.sizeof + opCodes.add)
|
|
353
|
+
) ||
|
|
354
|
+
validateNetByteCode( // samples by: MindLated, NetShield
|
|
355
|
+
intConfusionXorPattern +
|
|
356
|
+
(opCodes.bne_un + opCodes.ldc_i4 + opCodes.stloc + opCodes.sizeof + opCodes.add)
|
|
357
|
+
) ||
|
|
358
|
+
validateNetByteCode( // samples by: VavilonProtect
|
|
359
|
+
intConfusionXorPattern +
|
|
360
|
+
(opCodes.bne_un + opCodes.ldc_i4_2 + opCodes.stloc_s + opCodes.sizeof + opCodes.add)
|
|
361
|
+
)
|
|
362
|
+
) {
|
|
363
|
+
log(logType.net, "Int confusion detected! Offset: " + lastOffsetDetected);
|
|
364
|
+
isIntConfusionPresent = true;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (isIntConfusionPresent) options += (options.length != 0 ? " + " : String()) + "Int confusion";
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
// Virtualization is a method of protection in which some code segments are rewritten into instructions inherent in the built-in virtual machine and executed by it
|
|
374
|
+
|
|
375
|
+
var isVirtualizationPresent = false;
|
|
376
|
+
|
|
377
|
+
if (
|
|
378
|
+
isAllNetReferencesPresent(
|
|
379
|
+
references = [
|
|
380
|
+
"System.Reflection", // System.Reflection.dll
|
|
381
|
+
"GetILGenerator", // MSIL: 'System.Reflection.Emit.DynamicMethod::GetILGenerator()'
|
|
382
|
+
"BeginInvoke",
|
|
383
|
+
"EndInvoke",
|
|
384
|
+
"OpCode" // MSIL: 'System.Reflection.Emit.OpCode'
|
|
385
|
+
]
|
|
386
|
+
) &&
|
|
387
|
+
(
|
|
388
|
+
PE.isNetObjectPresent("Ldarg_0") || // MSIL: 'System.Reflection.Emit.OpCodes.Ldarg_0'
|
|
389
|
+
PE.isNetObjectPresent("CreateDelegate") // MSIL: 'System.Delegate.CreateDelegate'
|
|
390
|
+
) && !isFrameworkComponent()
|
|
391
|
+
) {
|
|
392
|
+
isVirtualizationPresent = true;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
if (isVirtualizationPresent) options += (options.length != 0 ? " + " : String()) + "Virtualization";
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
// Hiding calls using delegate tricks
|
|
401
|
+
|
|
402
|
+
var callsEncrypt = false;
|
|
403
|
+
|
|
404
|
+
if (
|
|
405
|
+
isAllNetReferencesPresent(
|
|
406
|
+
references = [
|
|
407
|
+
"GetTypeFromHandle", // MSIL: 'System.Type::GetTypeFromHandle( ... )'
|
|
408
|
+
"BinaryReader", // MSIL: 'System.IO.BinaryReader'
|
|
409
|
+
"CreateDelegate", // MSIL: '[Delegate].CreateDelegate'
|
|
410
|
+
"MakeByRefType", // MSIL: 'System.Type::MakeByRefType()'
|
|
411
|
+
"DynamicMethod" // MSIL: 'System.Reflection.Emit.DynamicMethod'
|
|
412
|
+
]
|
|
413
|
+
) && !isFrameworkComponent()
|
|
414
|
+
) {
|
|
415
|
+
callsEncrypt = true;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
if (callsEncrypt) options += (options.length != 0 ? " + " : String()) + "Calls encrypt";
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
// https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.suppressildasmattribute
|
|
424
|
+
|
|
425
|
+
var isAntiIldasmPresent = false;
|
|
426
|
+
|
|
427
|
+
if (validateNetObject("SuppressIldasmAttribute")) {
|
|
428
|
+
isAntiIldasmPresent = true;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
if (isAntiIldasmPresent) options += (options.length != 0 ? " + " : String()) + "Anti-ILDASM";
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
// Anti de4dot via inheritance
|
|
437
|
+
|
|
438
|
+
var isAntiDe4dotPresent = false;
|
|
439
|
+
|
|
440
|
+
if (
|
|
441
|
+
validateSignature("'Form'******00'Form'******00'Form'******00") || // samples by: NetShield
|
|
442
|
+
validateNetObject("Form0") // samples by: MindLated
|
|
443
|
+
) {
|
|
444
|
+
log(logType.net, "File may be protected by de4dot!");
|
|
445
|
+
isAntiDe4dotPresent = true;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
if (isAntiDe4dotPresent) options += (options.length != 0 ? " + " : String()) + "Anti-de4dot";
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
// An obfuscation method in which calli is used instead of regular calls
|
|
454
|
+
|
|
455
|
+
var isCalliInvokesPresent = false;
|
|
456
|
+
|
|
457
|
+
if (validateNetByteCode( // samples by: MindLated
|
|
458
|
+
opCodes.setStrict(opCodes.ldftn, "** ?? 00 0A") +
|
|
459
|
+
opCodes.setStrict(opCodes.calli, "** 00 00 11")
|
|
460
|
+
) ||
|
|
461
|
+
validateNetByteCode( // samples by: ArmDot, DarksProtector
|
|
462
|
+
opCodes.idelem_i +
|
|
463
|
+
opCodes.setStrict(opCodes.calli, "** 00 00 11")
|
|
464
|
+
)) {
|
|
465
|
+
log(logType.net, "Calli invokes detected! Offset: " + lastOffsetDetected);
|
|
466
|
+
isCalliInvokesPresent = true;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
if (isCalliInvokesPresent) options += (options.length != 0 ? " + " : String()) + "Calli invokes";
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
var isLdftnPointersPresent = false;
|
|
475
|
+
|
|
476
|
+
if (validateNetByteCode(
|
|
477
|
+
opCodes.nop + opCodes.setStrict(opCodes.ldftn, "** 00 00 06") + opCodes.stelem_i
|
|
478
|
+
) ||
|
|
479
|
+
validateNetByteCode(
|
|
480
|
+
opCodes.nop + opCodes.setStrict(opCodes.ldftn, "** 00 00 0A") + opCodes.stelem_i
|
|
481
|
+
) ||
|
|
482
|
+
validateNetByteCode( // samples by: Quantum (private)
|
|
483
|
+
opCodes.setStrict(opCodes.ldftn, "** 00 00 0A") +
|
|
484
|
+
opCodes.setStrict(opCodes.calli, "** 00 00 11")
|
|
485
|
+
)) {
|
|
486
|
+
log(logType.net, "Ldftn pointers method-obfuscation detected! Offset: " + lastOffsetDetected);
|
|
487
|
+
isLdftnPointersPresent = true;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
if (isLdftnPointersPresent) options += (options.length != 0 ? " + " : String()) + "Ldftn pointers";
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
// Turns the code into spaghetti by splitting it into blocks that it executes depending on the situation
|
|
496
|
+
|
|
497
|
+
var isCtrlFlowPresent = false;
|
|
498
|
+
|
|
499
|
+
if (validateNetByteCode( // samples by: ConfuserEx
|
|
500
|
+
opCodes.nop + opCodes.ldloc_0 + opCodes.ldc_i4 + opCodes.mul + opCodes.ldc_i4 + opCodes.xor + opCodes.br_s +
|
|
501
|
+
opCodes.nop + opCodes.ldloc_0 + opCodes.ldc_i4 + opCodes.mul + opCodes.ldc_i4 + opCodes.xor + opCodes.br_s
|
|
502
|
+
) ||
|
|
503
|
+
validateNetByteCode( // samples by: ConfuserEx (neo mod)
|
|
504
|
+
opCodes.ldc_i4 + opCodes.ldc_i4 + opCodes.xor + opCodes.dup + opCodes.stloc_0 + opCodes.ldc_i4_3 + opCodes.rem_un + opCodes.switch__nobody
|
|
505
|
+
) ||
|
|
506
|
+
validateNetByteCode( // samples by: .NET Reactor (v6.9.8)
|
|
507
|
+
opCodes.setStrict(opCodes.ldc_i4, "00 00 00 00") + opCodes.br + opCodes.br + opCodes.ldloc
|
|
508
|
+
) ||
|
|
509
|
+
validateNetByteCode( // samples by: .NET Reactor
|
|
510
|
+
opCodes.ldsfld + opCodes.brfalse + opCodes.pop +
|
|
511
|
+
opCodes.setStrict(opCodes.ldc_i4, "01 00 00 00") + // MSIL: 'ldc.4 1'
|
|
512
|
+
opCodes.br + opCodes.nop
|
|
513
|
+
) ||
|
|
514
|
+
validateNetByteCode( // samples by: .NET Reactor
|
|
515
|
+
opCodes.setNullValue(opCodes.ldc_i4) +
|
|
516
|
+
opCodes.ldsfld + opCodes.brtrue + opCodes.pop + opCodes.ldc_i4 +
|
|
517
|
+
opCodes.br
|
|
518
|
+
) ||
|
|
519
|
+
validateNetByteCode( // samples by: .NET Reactor (legacy~~)
|
|
520
|
+
opCodes.stloc + opCodes.ldloc +
|
|
521
|
+
opCodes.setStrict(opCodes.switch__nobody, "** ** ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00") +
|
|
522
|
+
opCodes.ldc_i4 + opCodes.br
|
|
523
|
+
) ||
|
|
524
|
+
validateNetByteCode( // samples by: MindLated, NetShield
|
|
525
|
+
opCodes.setNullValue(opCodes.ldc_i4) + // MSIL: 'ldc.i4 0'
|
|
526
|
+
opCodes.stloc + opCodes.br + opCodes.nop + opCodes.ldloc +
|
|
527
|
+
opCodes.setStrict(opCodes.ldc_i4, "01 00 00 00") + // MSIL: 'ldc.i4 1'
|
|
528
|
+
opCodes.ceq + opCodes.brfalse
|
|
529
|
+
) ||
|
|
530
|
+
validateNetByteCode( // samples by: Rose Obfuscator
|
|
531
|
+
opCodes.setNullValue(opCodes.ldc_i4) + // MSIL: 'ldc.i4'
|
|
532
|
+
opCodes.stloc + opCodes.br + opCodes.nop + opCodes.ldloc + opCodes.ldc_i4 + opCodes.ceq + opCodes.brfalse
|
|
533
|
+
) ||
|
|
534
|
+
validateNetByteCode( // samples by: Smart Assembly
|
|
535
|
+
opCodes.ldc_i4 + opCodes.br + opCodes.ldloc_s + opCodes.ldc_i4_s + opCodes.ldc_i4_0 + opCodes.stelem_i1 +
|
|
536
|
+
opCodes.ldc_i4 + opCodes.br
|
|
537
|
+
) ||
|
|
538
|
+
validateNetByteCode( // samples by: ConfuserEx (Beds mod)
|
|
539
|
+
opCodes.ldc_i4 + opCodes.ldc_i4 + opCodes._unknown + opCodes.ldc_i4 + opCodes._unknown + opCodes.stloc_0 + opCodes.nop + opCodes.ldloc_0 +
|
|
540
|
+
opCodes.ldc_i4 + opCodes.ldc_i4 + opCodes._unknown + opCodes.ldc_i4 + opCodes._unknown + opCodes.ceq + opCodes.brfalse_s
|
|
541
|
+
) ||
|
|
542
|
+
validateNetByteCode( // samples by: DotNetPatcher
|
|
543
|
+
opCodes.setStrict(opCodes.stloc_s, "05") + opCodes.nop + opCodes.ldloc_s + opCodes._unknown + opCodes.ceq + opCodes.brfalse_s + opCodes._unknown +
|
|
544
|
+
opCodes.setStrict(opCodes.stloc_s, "05") + opCodes.nop + opCodes.ldloc_s + opCodes._unknown + opCodes.ceq + opCodes.brfalse_s
|
|
545
|
+
) ||
|
|
546
|
+
validateNetByteCode( // samples by: VMProtect
|
|
547
|
+
opCodes.ldloc_0 + opCodes.setStrict(opCodes.ldc_i4, "?? ** ** **") + opCodes._unknown + opCodes.stloc_0 +
|
|
548
|
+
opCodes.ldloc_0 + opCodes.setStrict(opCodes.ldc_i4, "?? ** ** **") + opCodes.xor + opCodes.stloc_0
|
|
549
|
+
) ||
|
|
550
|
+
validateNetByteCode( // samples by: VMProtect
|
|
551
|
+
opCodes.setStrict(opCodes.ldc_i4, "?? ** ** **") + opCodes._unknown + opCodes.stloc_0 + opCodes.setStrict(opCodes.ldftn, "** ?? ?? ??")
|
|
552
|
+
)
|
|
553
|
+
) {
|
|
554
|
+
log(logType.net, "Control flow obfuscation detected! Offset: " + lastOffsetDetected);
|
|
555
|
+
isCtrlFlowPresent = true;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
if (isCtrlFlowPresent) options += (options.length != 0 ? " + " : String()) + "Ctrl flow";
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
const afterCtorOffset = PE.findSignature(PE.getDosStubOffset() + PE.getDosStubSize(), PE.getSize() - PE.getOverlaySize(), "'<Module>'00**") + 8;
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
// Indicates that the file uses short object names. Typically this indicates the presence of an obfuscation
|
|
567
|
+
// There are two ways to detect short names - find one-letter objects or just use signature mask at Ctor offset :D
|
|
568
|
+
|
|
569
|
+
var isShortNamesPresent = false;
|
|
570
|
+
|
|
571
|
+
if (PE.compare("00**00**00", afterCtorOffset) ||
|
|
572
|
+
PE.compare("00****00****00****00", afterCtorOffset) ||
|
|
573
|
+
PE.compare("00******00******00******00", afterCtorOffset) ||
|
|
574
|
+
PE.compare("00********00********00********00", afterCtorOffset) ||
|
|
575
|
+
PE.compare("00****00****00", afterCtorOffset) ||
|
|
576
|
+
PE.compare("00****00**00", afterCtorOffset) ||
|
|
577
|
+
PE.compare("00**00****00", afterCtorOffset)) {
|
|
578
|
+
log(logType.net, "Short names detected! (mask)");
|
|
579
|
+
isShortNamesPresent = true;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
if (!isShortNamesPresent && PE.compare("00**00", afterCtorOffset)) { // second way :D
|
|
583
|
+
var shortNamesFound = 0;
|
|
584
|
+
|
|
585
|
+
const chars = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
|
|
586
|
+
for (var i = 1; i < chars.length && !isShortNamesPresent; i++) {
|
|
587
|
+
if (PE.isNetObjectPresent(chars[i])) {
|
|
588
|
+
shortNamesFound++;
|
|
589
|
+
log(logType.net, "Short name found: '" + chars[i] + "' (" + shortNamesFound + "/20)");
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
if (shortNamesFound === 20) {
|
|
593
|
+
isShortNamesPresent = true;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
if (isShortNamesPresent) options += (options.length != 0 ? " + " : String()) + "Short names";
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
var badNamings = false;
|
|
604
|
+
|
|
605
|
+
var buffer = "";
|
|
606
|
+
|
|
607
|
+
// get next 0x12c bytes after <Module> .ctor
|
|
608
|
+
for (var i = 0; i < 0x12c; i++) {
|
|
609
|
+
var currentByte = PE.readByte(afterCtorOffset + i).toString(16);
|
|
610
|
+
|
|
611
|
+
if (currentByte === '0') currentByte += '0';
|
|
612
|
+
|
|
613
|
+
buffer += currentByte;
|
|
614
|
+
buffer += ' ';
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
var bufferString = String();
|
|
618
|
+
|
|
619
|
+
// 0x00 to [0x20, 0x20, 0x20]
|
|
620
|
+
const bufferArray = replaceAllInString(buffer, '00 ', '20 20 20 ').split(' ');
|
|
621
|
+
|
|
622
|
+
// buffer to a string
|
|
623
|
+
for (var i = 0; i < bufferArray.length; i++)
|
|
624
|
+
bufferString += String.fromCharCode(parseInt(bufferArray[i], 16));
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
const patternsToExplore = bufferString.split(" ");
|
|
628
|
+
|
|
629
|
+
var strangePatternsCounter = 0;
|
|
630
|
+
|
|
631
|
+
for (var i = 0; i < patternsToExplore.length && !badNamings; i++) {
|
|
632
|
+
|
|
633
|
+
const currentStringPattern = patternsToExplore[i];
|
|
634
|
+
|
|
635
|
+
if (currentStringPattern.indexOf("<") === -1 && currentStringPattern.match(/^(?=\d|[a-z])(?=.*[a-z]\d[a-z])(?=(?:.*\d){4,})/i))
|
|
636
|
+
strangePatternsCounter++;
|
|
637
|
+
|
|
638
|
+
if (strangePatternsCounter > 4)
|
|
639
|
+
badNamings = true;
|
|
640
|
+
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
if (badNamings) options += (options.length != 0 ? " + " : String()) + "Bad namings";
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
// AntiTamper protects the file from modification
|
|
649
|
+
|
|
650
|
+
var isAntiTamperPresent = false;
|
|
651
|
+
|
|
652
|
+
if (
|
|
653
|
+
validateNetUnicodeString(" is tampered.") || // samples by: .NET Reactor
|
|
654
|
+
validateNetUnicodeString("ping 127.0.0.1 > nul") || // samples by: ConfuserEx (Trinity, SkiDzEx like)
|
|
655
|
+
validateNetUnicodeString("/C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del \"") || // samples by: MindLated
|
|
656
|
+
validateNetUnicodeString( // samples by: ConfuserEx
|
|
657
|
+
opCodes.ldloc_s + opCodes.ldc_i4_0 + opCodes.ldloc_s + opCodes.ldc_i4_0 + opCodes.ldelem_u4 + opCodes.ldloc_s + opCodes.ldc_i4_0 + opCodes.ldelem_u4 + opCodes._unknown + opCodes.stelem_i4 +
|
|
658
|
+
opCodes.ldloc_s + opCodes.ldc_i4_1 + opCodes.ldloc_s + opCodes.ldc_i4_1 + opCodes.ldelem_u4 + opCodes.ldloc_s + opCodes.ldc_i4_1 + opCodes.ldelem_u4 + opCodes._unknown + opCodes.stelem_i4 +
|
|
659
|
+
opCodes.ldloc_s + opCodes.ldc_i4_2 + opCodes.ldloc_s + opCodes.ldc_i4_2 + opCodes.ldelem_u4 + opCodes.ldloc_s + opCodes.ldc_i4_2 + opCodes.ldelem_u4 + opCodes._unknown + opCodes.stelem_i4 +
|
|
660
|
+
opCodes.ldloc_s + opCodes.ldc_i4_3 + opCodes.ldloc_s + opCodes.ldc_i4_3 + opCodes.ldelem_u4 + opCodes.ldloc_s + opCodes.ldc_i4_3 + opCodes.ldelem_u4 + opCodes._unknown + opCodes.stelem_i4 +
|
|
661
|
+
opCodes.ldloc_s + opCodes.ldc_i4_4 + opCodes.ldloc_s + opCodes.ldc_i4_4 + opCodes.ldelem_u4 + opCodes.ldloc_s + opCodes.ldc_i4_4 + opCodes.ldelem_u4 + opCodes._unknown + opCodes.stelem_i4
|
|
662
|
+
) ||
|
|
663
|
+
validateNetByteCode( // samples: ConfuserEx (Beds mod, private)
|
|
664
|
+
opCodes.ldloc_s + opCodes._unknown + opCodes.shr_un + opCodes.ldloc_s + opCodes.ldc_i4_s + opCodes.shl + opCodes.or + opCodes.stloc_s +
|
|
665
|
+
opCodes.ldloc_s + opCodes._unknown + opCodes.shr_un + opCodes.ldloc_s + opCodes.ldc_i4_s + opCodes.shl + opCodes.or + opCodes.stloc_s +
|
|
666
|
+
opCodes.ldloc_s + opCodes._unknown + opCodes.shr_un + opCodes.ldloc_s + opCodes.ldc_i4_s + opCodes.shl + opCodes.or + opCodes.stloc_s
|
|
667
|
+
)
|
|
668
|
+
) {
|
|
669
|
+
log(logType.net, "Anti-tamper detected!");
|
|
670
|
+
isAntiTamperPresent = true;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
if (isAntiTamperPresent) options += (options.length != 0 ? " + " : String()) + "Anti-tamper";
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
// If in the assembly you can find a second object starting with “<Module>”, then this is a fakeee!
|
|
679
|
+
|
|
680
|
+
var isModuleCtorMultiple = false;
|
|
681
|
+
|
|
682
|
+
var currentCtorOffset = PE.findSignature(PE.getDosStubOffset() + PE.getDosStubSize(), PE.getSize() - PE.getOverlaySize(), "00'<Module>'00");
|
|
683
|
+
|
|
684
|
+
if (currentCtorOffset !== -1) {
|
|
685
|
+
var secondCtorNameOffset = PE.findSignature(currentCtorOffset + 10, PE.getSize() - PE.getOverlaySize(), "'<Module>'");
|
|
686
|
+
|
|
687
|
+
if (secondCtorNameOffset !== -1 && PE.readByte(secondCtorNameOffset + 8) !== 0x00) {
|
|
688
|
+
log(logType.net, "Fake <Module> detected! Offset: 0x" + Number(secondCtorNameOffset).toString(16));
|
|
689
|
+
isModuleCtorMultiple = true;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
if (isModuleCtorMultiple) options += (options.length != 0 ? " + " : String()) + "Fake .cctor name";
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
var isBadCctor = false;
|
|
699
|
+
|
|
700
|
+
if (currentCtorOffset === -1) {
|
|
701
|
+
log("It seems that the .cctor is missing. Bad PE format!");
|
|
702
|
+
isBadCctor = true;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
if (isBadCctor) options += (options.length != 0 ? " + " : String()) + "Bad .cctor format";
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
// Detects the use of unusual mathematical expressions that would be simplified by the compiler. For example, an expression like "912874 + 39188124^834"
|
|
711
|
+
|
|
712
|
+
var isMutationsPresent = false;
|
|
713
|
+
|
|
714
|
+
const mathOpCodes = [
|
|
715
|
+
opCodes.add, opCodes.sub,
|
|
716
|
+
opCodes.mul, opCodes.div,
|
|
717
|
+
opCodes.xor, opCodes.shr,
|
|
718
|
+
opCodes.shl, opCodes.or,
|
|
719
|
+
opCodes.not, opCodes.and
|
|
720
|
+
];
|
|
721
|
+
|
|
722
|
+
const mathTemplates = [ // %s = math opcode
|
|
723
|
+
opCodes.ldc_i4 + opCodes.ldc_i4 + "%s" + opCodes.stloc, // samples by: .NET Reactor
|
|
724
|
+
opCodes.ldc_i4 + opCodes.ldc_i4 + "%s" + opCodes.ldc_i4 + opCodes.add, // samples by: ConfuserEx (Beds mod)
|
|
725
|
+
opCodes.ldloc_1 + opCodes.ldc_i4 + opCodes.ldc_i4 + "%s" + opCodes.ldc_i4 + opCodes.ldc_i4, // samples by: SkiDzEX
|
|
726
|
+
opCodes.ldloc + opCodes.ldc_i4 + opCodes.ldc_i4 + opCodes.ldc_i4 + "%s" + opCodes.stelem_i1, // samples by: .NET Reactor
|
|
727
|
+
opCodes.ldc_i4 + opCodes.ldc_i4 + "%s" + opCodes.br_s // samples by: [Unknown protector, only samples]
|
|
728
|
+
];
|
|
729
|
+
|
|
730
|
+
for (var y = 0; y < mathTemplates.length && !isMutationsPresent; y++) {
|
|
731
|
+
const template = mathTemplates[y];
|
|
732
|
+
|
|
733
|
+
for (var e = 0; e < mathOpCodes.length && !isMutationsPresent; e++) {
|
|
734
|
+
|
|
735
|
+
if (e == 0 && !validateNetByteCode(template.replace("%s", opCodes._unknown))) break; // No math mutations
|
|
736
|
+
|
|
737
|
+
const pattern = template.replace("%s", mathOpCodes[e]);
|
|
738
|
+
|
|
739
|
+
if (validateNetByteCode(pattern)) {
|
|
740
|
+
log(logType.net, "Math mutations detected! Offset: " + lastOffsetDetected);
|
|
741
|
+
isMutationsPresent = true;
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
if (isMutationsPresent) options += (options.length != 0 ? " + " : String()) + "Math mutations";
|
|
747
|
+
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
|
|
751
|
+
// VB NET apps with resources only
|
|
752
|
+
|
|
753
|
+
var isStringsEncryptionPresent = false;
|
|
754
|
+
|
|
755
|
+
if (isVbNet) {
|
|
756
|
+
if (PE.isNetObjectPresent("Resources") && !validateGlobalUnicodeString(".Resources")) {
|
|
757
|
+
isStringsEncryptionPresent = true;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
if (isStringsEncryptionPresent) options += (options.length != 0 ? " + " : String()) + "Strings encryption";
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+
// A type of obfuscation of numbers in which they are inverted several times from positive to negative and vice versa...
|
|
767
|
+
var isMathInversionsPresent = false;
|
|
768
|
+
|
|
769
|
+
if (validateNetByteCode(opCodes.ldc_i4 + opCodes.not) && (
|
|
770
|
+
validateNetByteCode( // ~(-(~(-(~(-(~(-( num ))))))))
|
|
771
|
+
opCodes.ldc_i4 +
|
|
772
|
+
opCodes.not + opCodes.neg + opCodes.not + opCodes.neg +
|
|
773
|
+
opCodes.not + opCodes.neg + opCodes.not + opCodes.neg
|
|
774
|
+
) ||
|
|
775
|
+
validateNetByteCode( // ~(~(-(-(~(~( num ))))))
|
|
776
|
+
opCodes.ldc_i4 +
|
|
777
|
+
opCodes.not + opCodes.not + opCodes.neg + opCodes.neg +
|
|
778
|
+
opCodes.not + opCodes.not
|
|
779
|
+
) ||
|
|
780
|
+
validateNetByteCode( // ~(-(~(~(-(-( num ))))))
|
|
781
|
+
opCodes.ldc_i4 +
|
|
782
|
+
opCodes.not + opCodes.neg + opCodes.not + opCodes.not +
|
|
783
|
+
opCodes.neg + opCodes.neg
|
|
784
|
+
) ||
|
|
785
|
+
validateNetByteCode( // ~(-(~(-(~(~( num ))))))
|
|
786
|
+
opCodes.ldc_i4 +
|
|
787
|
+
opCodes.not + opCodes.neg + opCodes.not + opCodes.neg +
|
|
788
|
+
opCodes.not + opCodes.not
|
|
789
|
+
) ||
|
|
790
|
+
validateNetByteCode( // ~(-(~(-(~(-( num ))))))
|
|
791
|
+
opCodes.ldc_i4 +
|
|
792
|
+
opCodes.not + opCodes.neg + opCodes.not + opCodes.neg +
|
|
793
|
+
opCodes.not + opCodes.neg
|
|
794
|
+
)
|
|
795
|
+
)) {
|
|
796
|
+
log(logType.net, "Math inversions detected, offset " + lastOffsetDetected);
|
|
797
|
+
isMathInversionsPresent = true;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
if (isMathInversionsPresent) options += (options.length != 0 ? " + " : String()) + "Math inversions";
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
|
|
805
|
+
// A technique that allows you to avoid code decompilation. dnSpy gives a parsing error when trying to open such a file
|
|
806
|
+
|
|
807
|
+
var invalidOpCodes = false;
|
|
808
|
+
|
|
809
|
+
if (
|
|
810
|
+
/* validateNetByteCode( // samples by: SugarGuard
|
|
811
|
+
opCodes.setStrict(opCodes.box, "?? 00 00 01") + opCodes.ret
|
|
812
|
+
) || */
|
|
813
|
+
validateNetByteCode( // samples by: ConfuserEx (Beds mod)
|
|
814
|
+
opCodes.setStrict(opCodes.calli, "FF FF FF FF") + opCodes.setStrict(opCodes.sizeof, "FF FF FF FF")
|
|
815
|
+
)
|
|
816
|
+
) {
|
|
817
|
+
log(logType, "Invalid OpCodes detected, offset " + lastOffsetDetected);
|
|
818
|
+
invalidOpCodes = true;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
if (invalidOpCodes) options += (options.length != 0 ? " + " : String()) + "Invalid OpCodes";
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
|
|
825
|
+
|
|
826
|
+
// Some protections include their own dependencies in the form of runtime libraries
|
|
827
|
+
|
|
828
|
+
var isProtectionRuntimePresent = false;
|
|
829
|
+
|
|
830
|
+
var runtimeFound = String();
|
|
831
|
+
|
|
832
|
+
const protectionsRuntime = [ // Need more
|
|
833
|
+
{ lib: "AgileDotNet.VMRuntime.dll", name: "Agile" },
|
|
834
|
+
{ lib: "Xerin.Runtime.dll", name: "XerinFuscator" },
|
|
835
|
+
{ lib: "OneVM.Runtime.dll", name: "OneVM" },
|
|
836
|
+
{ lib: "HVMRuntm.dll", name: "DNGuard" }
|
|
837
|
+
];
|
|
838
|
+
|
|
839
|
+
for (var i = 0; i < protectionsRuntime.length; i++) {
|
|
840
|
+
const
|
|
841
|
+
runtimeInfo = protectionsRuntime[i],
|
|
842
|
+
runtimeLibraryName = runtimeInfo.lib,
|
|
843
|
+
protectorName = runtimeInfo.name;
|
|
844
|
+
|
|
845
|
+
if (PE.isNetObjectPresent(runtimeLibraryName) || // "runtime.dll"
|
|
846
|
+
PE.isNetObjectPresent(runtimeLibraryName.substring(0, runtimeLibraryName.length - 4))) { // "runtime"
|
|
847
|
+
log(logType.net, protectorName + " runtime detected!");
|
|
848
|
+
isProtectionRuntimePresent = true;
|
|
849
|
+
runtimeFound = protectorName;
|
|
850
|
+
break;
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
if (isProtectionRuntimePresent) options += (options.length != 0 ? " + " : String()) + runtimeFound + " runtime";
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
const obfuscatorsAttributes = [
|
|
860
|
+
"Xenocode.Client.Attributes.AssemblyAttributes.ProcessedByXenocode", // Xenocode
|
|
861
|
+
"CryptoObfuscator.ProtectedWithCryptoObfuscatorAttribute", // Crypto Obfuscator
|
|
862
|
+
"SecureTeam.Attributes.ObfuscatedByAgileDotNetAttribute", // Agile.NET
|
|
863
|
+
"Xenocode.Client.Attributes.AssemblyAttributes", // Xenocode
|
|
864
|
+
"SmartAssembly.Attributes.PoweredByAttribute", // Smart Assembly
|
|
865
|
+
"ObfuscatedByAgileDotNetAttribute", // Agile.NET
|
|
866
|
+
"NineRays.Obfuscator.Evaluation", // Spices.Net
|
|
867
|
+
"ObfuscatedByCliSecureAttribute", // CliSecure
|
|
868
|
+
"BabelObfuscatorAttribute", // Babel
|
|
869
|
+
"AsStrongAsFuckAttribute", // AsStrongAsFuck
|
|
870
|
+
"ProtectedByDotnetsafer", // DotNetSafer
|
|
871
|
+
"Macrobject.Obfuscator", // Macrobject
|
|
872
|
+
"DotfuscatorAttribute", // Dotfuscator
|
|
873
|
+
"CodeWallTrialVersion", // CodeWall
|
|
874
|
+
"ConfusedByAttribute", // ConfuserEx
|
|
875
|
+
"ObfuscatedByGoliath", // Goliath
|
|
876
|
+
"NETSpider.Attribute", // NETSpider
|
|
877
|
+
"NineRays.Obfuscator", // Spices.Net
|
|
878
|
+
"PoweredByAttribute", // Smart Assembly
|
|
879
|
+
"RustemSoft.Skater", // Skater
|
|
880
|
+
"BabelAttribute", // Babel
|
|
881
|
+
"MRuntime3.dll", // Maxtocode
|
|
882
|
+
"YanoAttribute", // Yano
|
|
883
|
+
"EMyPID_8234_", // Eazfuscator.NET
|
|
884
|
+
"ZYXDNGuarder", // DNGuard
|
|
885
|
+
"SkiDzEX", // ConfuserEx based
|
|
886
|
+
"Sixxpack", // Sixxpack
|
|
887
|
+
"____KILL", // CodeVeil
|
|
888
|
+
"Reactor", // Fake .NET Reactor
|
|
889
|
+
];
|
|
890
|
+
|
|
891
|
+
var isFakeSignaturesPresent = false;
|
|
892
|
+
|
|
893
|
+
var isWatermarkPresent = false;
|
|
894
|
+
|
|
895
|
+
var signaturesCounter = 0;
|
|
896
|
+
|
|
897
|
+
var obfuscatorAttributeFound = String();
|
|
898
|
+
|
|
899
|
+
// Iterate through obfuscators attributes
|
|
900
|
+
for (var t = 0; t < obfuscatorsAttributes.length && !isFakeSignaturesPresent; t++) {
|
|
901
|
+
|
|
902
|
+
if (validateNetObject(obfuscatorsAttributes[t])) {
|
|
903
|
+
obfuscatorAttributeFound = obfuscatorsAttributes[t];
|
|
904
|
+
signaturesCounter++;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
// Check if the number of detected signatures exceeds 1
|
|
908
|
+
if (signaturesCounter > 1) {
|
|
909
|
+
|
|
910
|
+
// Set flag indicating the presence of fake signatures
|
|
911
|
+
isFakeSignaturesPresent = true;
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
if (isFakeSignaturesPresent) {
|
|
916
|
+
options += (options.length != 0 ? " + " : String()) + "Fake signatures";
|
|
917
|
+
} else {
|
|
918
|
+
// "Watermark" is only possible in the absence of fake signatures
|
|
919
|
+
|
|
920
|
+
if (signaturesCounter === 1) {
|
|
921
|
+
log(logType.nothing, "Watermark (Attribute) found: '" + obfuscatorAttributeFound + "'");
|
|
922
|
+
isWatermarkPresent = true;
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
if ((!isWatermarkPresent && (
|
|
926
|
+
validateSignature("'Obfuscated'") ||
|
|
927
|
+
validateSignature("'obfuscated'") ||
|
|
928
|
+
validateSignature("'ByAttribute'") ||
|
|
929
|
+
validateSignature("'ObfuscatorAttribute'") ||
|
|
930
|
+
validateNetObject("ObfuscationAttribute")
|
|
931
|
+
)) && !isFrameworkComponent()) // System.Reflection.ObfuscationAttribute
|
|
932
|
+
{
|
|
933
|
+
isWatermarkPresent = true;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
if (isWatermarkPresent) options += (options.length != 0 ? " + " : String()) + "Watermark";
|
|
938
|
+
|
|
939
|
+
|
|
940
|
+
|
|
941
|
+
|
|
942
|
+
const protectorsLabelsToRemove = [ // Protectors with these names will be removed from results
|
|
943
|
+
"SafeNet Sentinel LDK .NET",
|
|
944
|
+
"Xenocode Postbuild",
|
|
945
|
+
"Smart Assembly",
|
|
946
|
+
"Dotfuscator",
|
|
947
|
+
"Babel .NET",
|
|
948
|
+
"Spices.Net",
|
|
949
|
+
"Maxtocode",
|
|
950
|
+
"FISH .NET",
|
|
951
|
+
"CliSecure",
|
|
952
|
+
"CodeWall",
|
|
953
|
+
"CodeVeil",
|
|
954
|
+
"Sixxpack",
|
|
955
|
+
"DNGuard",
|
|
956
|
+
"Goliath",
|
|
957
|
+
"Agile",
|
|
958
|
+
"Yano"
|
|
959
|
+
],
|
|
960
|
+
packersLabelsToRemove = [
|
|
961
|
+
"ChainskiCrypter",
|
|
962
|
+
"Quest PowerGUI",
|
|
963
|
+
"DataAnubis",
|
|
964
|
+
"NsPack",
|
|
965
|
+
"ASPack"
|
|
966
|
+
],
|
|
967
|
+
protectionsLabelsToRemove = [
|
|
968
|
+
"Sentinel SuperPro dongle reference",
|
|
969
|
+
"Unikey/Activator dongle reference",
|
|
970
|
+
"Eutron SmartKey dongle reference",
|
|
971
|
+
"SenseLock dongle reference",
|
|
972
|
+
"Hardlock dongle reference",
|
|
973
|
+
"WIBU Key dongle reference",
|
|
974
|
+
"Wizzkey dongle reference",
|
|
975
|
+
"SoftLok dongle reference",
|
|
976
|
+
"NetHASP dongle reference"
|
|
977
|
+
];
|
|
978
|
+
|
|
979
|
+
// Волки делают АУФ 🐺☝️
|
|
980
|
+
|
|
981
|
+
if (isFakeSignaturesPresent) {
|
|
982
|
+
for (var d = 0; d < protectorsLabelsToRemove.length; d++) {
|
|
983
|
+
_removeResult("protector", protectorsLabelsToRemove[d]);
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
for (var d = 0; d < packersLabelsToRemove.length; d++) {
|
|
987
|
+
_removeResult("cryptor", packersLabelsToRemove[d]);
|
|
988
|
+
_removeResult("packer", packersLabelsToRemove[d]);
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
for (var d = 0; d < protectionsLabelsToRemove.length; d++) {
|
|
992
|
+
_removeResult("protection", protectionsLabelsToRemove[d]);
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
|
|
997
|
+
|
|
998
|
+
|
|
999
|
+
if (options.length != 0) isDetected = true;
|
|
1000
|
+
|
|
1001
|
+
|
|
1002
|
+
if (isDetected) {
|
|
1003
|
+
_setResult("~protection", "Obfuscation", String(), PE.isVerbose() ? options : String());
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
|
|
1008
|
+
|
|
1009
|
+
function scanForAntiAnalysis_NET() {
|
|
1010
|
+
var options = String();
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
// Assumes the file can detect debugging protection
|
|
1014
|
+
|
|
1015
|
+
var isAntiDebugPresent = false;
|
|
1016
|
+
|
|
1017
|
+
const debuggerObject = "Debugger", // MSIL: 'System.Diagnostics.Debugger' from System.Diagnostics.dll
|
|
1018
|
+
isAttached = "get_IsAttached", // MSIL: '*.Debugger::get_IsAttached()'
|
|
1019
|
+
isLogging = "IsLogging" // MSIL: '*.Debugger::IsLogging()'
|
|
1020
|
+
|
|
1021
|
+
if (
|
|
1022
|
+
(
|
|
1023
|
+
( // .NET Functions
|
|
1024
|
+
validateNetObject(debuggerObject) || validateNetUnicodeString(debuggerObject) // Check for 'Debugger'
|
|
1025
|
+
) && (
|
|
1026
|
+
(validateNetObject(isAttached) || validateNetUnicodeString(isAttached)) || // Check for 'get_IsAttached' property
|
|
1027
|
+
(validateNetObject(isLogging) || validateNetUnicodeString(isLogging)) // Check for 'IsLogging' function
|
|
1028
|
+
) ||
|
|
1029
|
+
( // Native (WinAPI) functions
|
|
1030
|
+
validateNetObject("CheckRemoteDebuggerPresent") || validateNetObject("IsDebuggerPresent") ||
|
|
1031
|
+
validateNetObject("NtRemoveProcessDebug") || validateNetObject("NtQueryInformationProcess")
|
|
1032
|
+
)
|
|
1033
|
+
) && !isFrameworkComponent()
|
|
1034
|
+
) {
|
|
1035
|
+
isAntiDebugPresent = true;
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
if (isAntiDebugPresent) options += (options.length != 0 ? " + " : String()) + "Anti-debug";
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
|
|
1042
|
+
|
|
1043
|
+
// A type of protection in which, after launching an application, it erases the headers and/or PE signature behind itself
|
|
1044
|
+
|
|
1045
|
+
var isAntiDumpPresent = false;
|
|
1046
|
+
|
|
1047
|
+
if (
|
|
1048
|
+
validateNetObject("VirtualProtect") && ( // from 'kernel32.dll', WinAPI
|
|
1049
|
+
// Need to check
|
|
1050
|
+
isAllNetReferencesPresent( // samples by: ConfuserEx, SkiDzEX
|
|
1051
|
+
references = [
|
|
1052
|
+
"System.Runtime.InteropServices", // System.Runtime.InteropServices.dll
|
|
1053
|
+
"Marshal", // MSIL: '*.Marshal::GetHINSTANCE( ... )'
|
|
1054
|
+
"GetHINSTANCE", // MSIL: '*.Marshal::GetHINSTANCE( ... )'
|
|
1055
|
+
"IntPtr", // MSIL: 'System.IntPtr'
|
|
1056
|
+
"op_Explicit" // MSIL: 'System.IntPtr::op_Explicit'
|
|
1057
|
+
]
|
|
1058
|
+
) ||
|
|
1059
|
+
isAllNetReferencesPresent( // samples by: Inx Obfuscator
|
|
1060
|
+
references = [
|
|
1061
|
+
"System.Diagnostics", // System.Diagnostics
|
|
1062
|
+
"memcpy", // from 'msvcrt.dll', WinAPI
|
|
1063
|
+
"IntPtr", // MSIL: 'System.IntPtr'
|
|
1064
|
+
"get_MainModule", // MSIL: '*.Process::get_MainModule()'
|
|
1065
|
+
"get_BaseAddress" // MSIL: '*.ProcessModule::get_BaseAddress()'
|
|
1066
|
+
]
|
|
1067
|
+
) ||
|
|
1068
|
+
isAllNetReferencesPresent( // samples by: MindLated
|
|
1069
|
+
references = [
|
|
1070
|
+
"System.Runtime.InteropServices", // System.Runtime.InteropServices.dll
|
|
1071
|
+
"Marshal", // MSIL: '*.Marshal::GetHINSTANCE( ... )'
|
|
1072
|
+
"GetHINSTANCE", // MSIL: '*.Marshal::GetHINSTANCE( ... )'
|
|
1073
|
+
"IntPtr", // MSIL: 'System.IntPtr'
|
|
1074
|
+
"CopyBlock",
|
|
1075
|
+
"InitBlock"
|
|
1076
|
+
]
|
|
1077
|
+
)
|
|
1078
|
+
)
|
|
1079
|
+
) {
|
|
1080
|
+
isAntiDumpPresent = true;
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
if (isAntiDumpPresent) options += (options.length != 0 ? " + " : String()) + "Anti-dump";
|
|
1084
|
+
|
|
1085
|
+
|
|
1086
|
+
|
|
1087
|
+
|
|
1088
|
+
const antiDnSpyTriggers = [
|
|
1089
|
+
"dnspy",
|
|
1090
|
+
"dnSpy",
|
|
1091
|
+
"DNSPY"
|
|
1092
|
+
];
|
|
1093
|
+
|
|
1094
|
+
var isAntiDnSpyPresent = false;
|
|
1095
|
+
|
|
1096
|
+
// Iterate through anti-DnSpy triggers
|
|
1097
|
+
for (var l = 0; l < antiDnSpyTriggers.length && !isAntiDnSpyPresent; l++) {
|
|
1098
|
+
const dnSpyName = antiDnSpyTriggers[l];
|
|
1099
|
+
|
|
1100
|
+
// Check if the signature for anti-DnSpy trigger is valid using Unicode signature mask or the original signature
|
|
1101
|
+
if (
|
|
1102
|
+
validateGlobalUnicodeString(dnSpyName) ||
|
|
1103
|
+
validateSignature("'" + dnSpyName + "'")
|
|
1104
|
+
) {
|
|
1105
|
+
// Set flag indicating the presence of anti-DnSpy behavior
|
|
1106
|
+
isAntiDnSpyPresent = true;
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
if (isAntiDnSpyPresent) options += (options.length != 0 ? " + " : String()) + "Anti-dnSpy";
|
|
1111
|
+
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
|
|
1115
|
+
const antiIlSpyTriggers = [
|
|
1116
|
+
"ilspy",
|
|
1117
|
+
"ilSpy",
|
|
1118
|
+
"ILSpy",
|
|
1119
|
+
"ILSPY"
|
|
1120
|
+
];
|
|
1121
|
+
|
|
1122
|
+
var isAntiIlSpyPresent = false;
|
|
1123
|
+
|
|
1124
|
+
for (var l = 0; l < antiIlSpyTriggers.length && !isAntiIlSpyPresent; l++) {
|
|
1125
|
+
const ilSpyName = antiIlSpyTriggers[l];
|
|
1126
|
+
|
|
1127
|
+
if (
|
|
1128
|
+
validateGlobalUnicodeString(ilSpyName) ||
|
|
1129
|
+
validateSignature("'" + ilSpyName + "'")
|
|
1130
|
+
) {
|
|
1131
|
+
isAntiIlSpyPresent = true;
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
if (isAntiIlSpyPresent) options += (options.length != 0 ? " + " : String()) + "Anti-ILSpy";
|
|
1136
|
+
|
|
1137
|
+
|
|
1138
|
+
|
|
1139
|
+
|
|
1140
|
+
const sbieVariants = [
|
|
1141
|
+
"sbiedll.",
|
|
1142
|
+
"SbieDll.",
|
|
1143
|
+
"SBIEDLL."
|
|
1144
|
+
];
|
|
1145
|
+
|
|
1146
|
+
var isAntiSbiePresent = false;
|
|
1147
|
+
|
|
1148
|
+
// Check if the signature for 'GetModuleHandle' is present
|
|
1149
|
+
if (validateSignature("'GetModuleHandle'")) { // from 'kernel32.dll') {
|
|
1150
|
+
// Iterate through Sandboxie variants
|
|
1151
|
+
for (var l = 0; l < sbieVariants.length && !isAntiSbiePresent; l++) {
|
|
1152
|
+
const sbieLib = sbieVariants[l];
|
|
1153
|
+
|
|
1154
|
+
// Check if the signature for Sandboxie variant is valid using Unicode signature mask or the original signature
|
|
1155
|
+
if (
|
|
1156
|
+
validateGlobalUnicodeString(sbieLib) ||
|
|
1157
|
+
validateSignature("'" + sbieLib + "'")
|
|
1158
|
+
) {
|
|
1159
|
+
// Set flag indicating the presence of anti-Sandboxie behavior
|
|
1160
|
+
isAntiSbiePresent = true;
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
if (isAntiSbiePresent) options += (options.length != 0 ? " + " : String()) + "Anti-SandBoxie";
|
|
1166
|
+
|
|
1167
|
+
|
|
1168
|
+
|
|
1169
|
+
|
|
1170
|
+
var isAntiVmPresent = false;
|
|
1171
|
+
|
|
1172
|
+
if (validateNetUnicodeString("vmware") || validateNetUnicodeString("VirtualBox")) {
|
|
1173
|
+
isAntiVmPresent = true;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
if (isAntiVmPresent) options += (options.length != 0 ? " + " : String()) + "Anti-VM";
|
|
1177
|
+
|
|
1178
|
+
|
|
1179
|
+
|
|
1180
|
+
|
|
1181
|
+
if (options.length != 0) {
|
|
1182
|
+
_setResult("~protection", "Anti analysis", String(), PE.isVerbose() ? options : String());
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
|
|
1187
|
+
|
|
1188
|
+
/**
|
|
1189
|
+
* Checks if the Portable Executable (PE) file is a .NET assembly.
|
|
1190
|
+
*
|
|
1191
|
+
* This function determines if the PE file is a .NET assembly by verifying the following:
|
|
1192
|
+
* 1. The PE file is identified as a .NET assembly.
|
|
1193
|
+
* 2. The PE file has the "KERNEL32.DLL" library present.
|
|
1194
|
+
* 3. The PE file has a global .cctor (class constructor) method present.
|
|
1195
|
+
*
|
|
1196
|
+
* @returns {boolean} True if the PE file is a .NET assembly, otherwise false.
|
|
1197
|
+
*/
|
|
1198
|
+
function isClrNET() {
|
|
1199
|
+
return PE.isNET() && PE.isLibraryPresent("KERNEL32.DLL") && PE.isNetGlobalCctorPresent();
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
|
|
1203
|
+
|
|
1204
|
+
// .NET OpCodes for static emulations
|
|
1205
|
+
|
|
1206
|
+
function NetOpCodes() {
|
|
1207
|
+
this.add = "58"; // MSIL: 'add'
|
|
1208
|
+
this.sub = "59"; // MSIL: 'sub'
|
|
1209
|
+
this.mul = "5A"; // MSIL: 'mul'
|
|
1210
|
+
this.and = "5F"; // MSIL: 'and'
|
|
1211
|
+
this.bne_un = "40????????"; // MSIL: 'bne.un'
|
|
1212
|
+
this.bne_un_s = "3309"; // MSIL: 'bne.un.s'
|
|
1213
|
+
this.br = "38????????"; // MSIL: 'br'
|
|
1214
|
+
this.br_s = "2B??"; // MSIL: 'br.s'
|
|
1215
|
+
this.brfalse = "39????????"; // MSIL: 'brfalse'
|
|
1216
|
+
this.brfalse_s = "2C??"; // MSIL: 'brfalse.s'
|
|
1217
|
+
this.brtrue = "3A????????"
|
|
1218
|
+
this.call = "28????????"; // MSIL: 'call'
|
|
1219
|
+
this.calli = "29????????"; // MSIL: 'calli'
|
|
1220
|
+
this.ceq = "FE01"; // MSIL: 'ceq'
|
|
1221
|
+
this.div = "5B"; // MSIL: 'div'
|
|
1222
|
+
this.dup = "25"; // MSIL: 'dup'
|
|
1223
|
+
this.idelem_i = "97"; // MSIL: 'idelem.i'
|
|
1224
|
+
this.ldc_i4 = "20????????"; // MSIL: 'ldc.i4'
|
|
1225
|
+
this.ldc_i4_0 = "16"; // MSIL: 'ldc.i4.0'
|
|
1226
|
+
this.ldc_i4_1 = "17"; // MSIL: 'ldc.i4.1'
|
|
1227
|
+
this.ldc_i4_2 = "18"; // MSIL: 'ldc.i4.2'
|
|
1228
|
+
this.ldc_i4_3 = "19"; // MSIL: 'ldc.i4.2'
|
|
1229
|
+
this.ldc_i4_4 = "1A"; // MSIL: 'ldc.i4.4'
|
|
1230
|
+
this.ldc_i4_s = "1F??"; // MSIL: 'ldc.i4.s'
|
|
1231
|
+
this.ldftn = "FE06????????"; // MSIL: 'ldftn'
|
|
1232
|
+
this.ldloc = "FE??????"; // MSIL: 'ldloc'
|
|
1233
|
+
this.ldloc_0 = "06"; // MSIL: 'ldloc.0'
|
|
1234
|
+
this.ldloc_1 = "07"; // MSIL: 'ldloc.1'
|
|
1235
|
+
this.ldloc_2 = "08"; // MSIL: 'ldloc.2'
|
|
1236
|
+
this.ldloc_3 = "09"; // MSIL: 'ldloc.3'
|
|
1237
|
+
this.ldloc_s = "11??"; // MSIL: 'ldloc.s'
|
|
1238
|
+
this.ldsfld = "7E????????"; // MSIL: 'ldsfld'
|
|
1239
|
+
this.ldstr = "72????????"; // MSIL: 'ldstr'
|
|
1240
|
+
this.ldelem_u4 = "95"; // MSIL: 'ldelem.u4'
|
|
1241
|
+
this.nop = "00"; // MSIL: 'nop'
|
|
1242
|
+
this.not = "66"; // MSIL: 'not'
|
|
1243
|
+
this.neg = "65"; // MSIL: 'neg'
|
|
1244
|
+
this.or = "60"; // MSIL: 'or'
|
|
1245
|
+
this.pop = "26"; // MSIL: 'pop'
|
|
1246
|
+
this.ret = "2A"; // MSIL: 'ret'
|
|
1247
|
+
this.rem_un = "5E"; // MSIL: 'rem.un'
|
|
1248
|
+
this.shl = "62"; // MSIL: 'shl'
|
|
1249
|
+
this.shr = "63"; // MSIL: 'shr'
|
|
1250
|
+
this.sizeof = "FE1C????????"; // MSIL: 'sizeof'
|
|
1251
|
+
this.stloc = "FE0E????"; // MSIL: 'stloc'
|
|
1252
|
+
this.stloc_0 = "0A"; // MSIL: 'stloc.0'
|
|
1253
|
+
this.stloc_1 = "0B"; // MSIL: 'stloc.1'
|
|
1254
|
+
this.stloc_2 = "0C"; // MSIL: 'stloc.2'
|
|
1255
|
+
this.stloc_3 = "0D"; // MSIL: 'stloc.3'
|
|
1256
|
+
this.stloc_s = "13??"; // MSIL: 'stloc.s'
|
|
1257
|
+
this.shr_un = "64"; // MSIL: 'shr.un'
|
|
1258
|
+
this.xor = "61"; // MSIL: 'xor'
|
|
1259
|
+
this.stelem_i = "9B"; // MSIL: 'stelem.i'
|
|
1260
|
+
this.stelem_i1 = "9C"; // MSIL: 'stelem.i1'
|
|
1261
|
+
this.stelem_i4 = "9E"; // MSIL: 'stelem.i4'
|
|
1262
|
+
this.box = "8C????????"; // MSIL: 'box'
|
|
1263
|
+
|
|
1264
|
+
this.switch__nobody = "45"; // MSIL: 'switch'
|
|
1265
|
+
this._unknown = "**"; // Unknown opcode
|
|
1266
|
+
this._any = "??"; // Any opcode
|
|
1267
|
+
|
|
1268
|
+
|
|
1269
|
+
|
|
1270
|
+
// setStrict sets the strict value of the opcode for substitution
|
|
1271
|
+
// btw I like what I do
|
|
1272
|
+
this.setStrict = function(opCodeMask, value) {
|
|
1273
|
+
// Remove spaces from opcode mask and value
|
|
1274
|
+
opCodeMask = removeSpaces(opCodeMask);
|
|
1275
|
+
value = removeSpaces(value);
|
|
1276
|
+
|
|
1277
|
+
// Find the index of the special pattern "??" in the opcode mask
|
|
1278
|
+
var indexOfSpecialPattern = opCodeMask.indexOf("??");
|
|
1279
|
+
|
|
1280
|
+
// Check if the opcode mask has a body (contains the special pattern "??")
|
|
1281
|
+
var isOpCodeMaskHasBody = indexOfSpecialPattern !== -1; // -1 if not found
|
|
1282
|
+
|
|
1283
|
+
// Extract the opcode in hexadecimal
|
|
1284
|
+
var opCodeInHex = isOpCodeMaskHasBody ? opCodeMask.substr(0x00, indexOfSpecialPattern) : opCodeMask;
|
|
1285
|
+
|
|
1286
|
+
// Check if the opcode mask has a body and the length of the body matches the length of the value
|
|
1287
|
+
if (isOpCodeMaskHasBody && opCodeMask.substr(opCodeInHex.length).length != value.length) {
|
|
1288
|
+
_error("The size of the input values does not match.");
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
// Combine the opcode in hexadecimal with the value
|
|
1292
|
+
return opCodeInHex + value;
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
// Sets the mask value to zero for the specified opcode
|
|
1296
|
+
this.setNullValue = function(opCodeMask) {
|
|
1297
|
+
|
|
1298
|
+
if (opCodeMask.indexOf("??") === -1) {
|
|
1299
|
+
_error("Instruction does not have a body to overwrite the value.");
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
return replaceAllInString(opCodeMask, "??", "00");
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
|
|
1307
|
+
|
|
1308
|
+
/**
|
|
1309
|
+
* Removes all spaces from the given input string.
|
|
1310
|
+
*
|
|
1311
|
+
* @param {string} inputString - The string from which spaces will be removed.
|
|
1312
|
+
* @returns {string} - The input string without any spaces.
|
|
1313
|
+
*/
|
|
1314
|
+
function removeSpaces(inputString) {
|
|
1315
|
+
return inputString.split(" ").join("");
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
|
|
1319
|
+
|
|
1320
|
+
/**
|
|
1321
|
+
* Replaces all occurrences of a specified substring within a given string with a new substring.
|
|
1322
|
+
*
|
|
1323
|
+
* @param {string} inputString - The original string in which to perform the replacements.
|
|
1324
|
+
* @param {string} search - The substring to search for within the input string.
|
|
1325
|
+
* @param {string} replacement - The substring to replace each occurrence of the search substring with.
|
|
1326
|
+
* @returns {string} - The modified string with all occurrences of the search substring replaced by the replacement substring.
|
|
1327
|
+
*/
|
|
1328
|
+
function replaceAllInString(inputString, search, replacement) {
|
|
1329
|
+
while (inputString.indexOf(search) !== -1) {
|
|
1330
|
+
inputString = inputString.replace(search, replacement)
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
return inputString;
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
|
|
1337
|
+
|
|
1338
|
+
function clearSectionName(sectionName) {
|
|
1339
|
+
if (sectionName.length > 0 && sectionName.trim() === String()) {
|
|
1340
|
+
return sectionName;
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
return sectionName.trim();
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
|
|
1347
|
+
|
|
1348
|
+
// This feature was originally intended only for .NET, but
|
|
1349
|
+
// now partially works with Native files.
|
|
1350
|
+
|
|
1351
|
+
function scanForPackersAndCryptors_NET_and_Native() { // For .NET and Native apps
|
|
1352
|
+
var options = String();
|
|
1353
|
+
|
|
1354
|
+
var isDetected = Boolean(),
|
|
1355
|
+
isCryptor = Boolean();
|
|
1356
|
+
|
|
1357
|
+
|
|
1358
|
+
|
|
1359
|
+
|
|
1360
|
+
if (PE.isNET()) {
|
|
1361
|
+
|
|
1362
|
+
var isAssemblyInvokeFound = false;
|
|
1363
|
+
|
|
1364
|
+
if (isAllNetReferencesPresent( // TODO: update [!!!]
|
|
1365
|
+
references = [
|
|
1366
|
+
"System.Reflection", // System.Reflection.dll
|
|
1367
|
+
"get_EntryPoint", // MSIL: '*.Assembly::get_EntryPoint()'
|
|
1368
|
+
"Assembly", // MSIL: 'System.Reflection.Assembly' from System.Reflection.dll
|
|
1369
|
+
"Invoke", // MSIL: '*.MethodBase::Invoke(object, object[])'
|
|
1370
|
+
"Load" // MSIL: '*.Assembly::Load(uint8[])'
|
|
1371
|
+
]
|
|
1372
|
+
)) {
|
|
1373
|
+
isAssemblyInvokeFound = true;
|
|
1374
|
+
|
|
1375
|
+
options = "Assembly invoke";
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
|
|
1379
|
+
|
|
1380
|
+
|
|
1381
|
+
// Check if any class from System.Security.Cryptography namespace is used (non-full name) - for cryptors
|
|
1382
|
+
if (findAndMark("System.Security.Cryptography", isFullName = false) != String()) {
|
|
1383
|
+
|
|
1384
|
+
// Specify cryptography classes to look for
|
|
1385
|
+
const cryptoClasses = [
|
|
1386
|
+
"TripleDESCryptoServiceProvider",
|
|
1387
|
+
"RSACryptoServiceProvider",
|
|
1388
|
+
"DSACryptoServiceProvider",
|
|
1389
|
+
"DESCryptoServiceProvider",
|
|
1390
|
+
"AesCryptoServiceProvider",
|
|
1391
|
+
"Rfc2898DeriveBytes",
|
|
1392
|
+
"SHA256Managed",
|
|
1393
|
+
"TripleDES",
|
|
1394
|
+
"Rijndael",
|
|
1395
|
+
"ECDsaCng",
|
|
1396
|
+
"AesAEAD",
|
|
1397
|
+
"Aes192Cbc",
|
|
1398
|
+
"Aes256Cbc",
|
|
1399
|
+
"Aes128Cbc",
|
|
1400
|
+
"AesManaged",
|
|
1401
|
+
"AesCng",
|
|
1402
|
+
"SHA256",
|
|
1403
|
+
"SHA512",
|
|
1404
|
+
"SHA1CryptoServiceProvider",
|
|
1405
|
+
"SHA512CryptoServiceProvider",
|
|
1406
|
+
"RC2CryptoServiceProvider",
|
|
1407
|
+
"SHA384CryptoServiceProvider",
|
|
1408
|
+
// "MD5CryptoServiceProvider",
|
|
1409
|
+
"SHA256CryptoServiceProvider",
|
|
1410
|
+
"RNGCryptoServiceProvider"
|
|
1411
|
+
];
|
|
1412
|
+
|
|
1413
|
+
// Iterate through cryptography classes
|
|
1414
|
+
for (var i = 0; i < cryptoClasses.length && !isCryptor; i++) {
|
|
1415
|
+
var cryptoClassSign = cryptoClasses[i],
|
|
1416
|
+
result = findAndMark(
|
|
1417
|
+
sign = cryptoClassSign,
|
|
1418
|
+
isFullName = true
|
|
1419
|
+
);
|
|
1420
|
+
|
|
1421
|
+
// Check if assembly invoke is found and the cryptography class is present
|
|
1422
|
+
if (isAssemblyInvokeFound && result.length != 0) {
|
|
1423
|
+
log(logType.net, "Crypto class present: " + cryptoClassSign);
|
|
1424
|
+
|
|
1425
|
+
isCryptor = true;
|
|
1426
|
+
|
|
1427
|
+
// Add the cryptography class to options
|
|
1428
|
+
options += (options.length != 0 ? " + " : String()) + cryptoClassSign;
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
|
|
1434
|
+
|
|
1435
|
+
|
|
1436
|
+
// Check if any class from System.IO.Compression namespace is used (non-full name)
|
|
1437
|
+
if (findAndMark("System.IO.Compression", isFullName = false).length != 0) {
|
|
1438
|
+
|
|
1439
|
+
// Specify compression classes to look for
|
|
1440
|
+
const compressionClasses = [
|
|
1441
|
+
"DeflateStream",
|
|
1442
|
+
"GZipStream"
|
|
1443
|
+
];
|
|
1444
|
+
|
|
1445
|
+
// Iterate through compression classes
|
|
1446
|
+
for (var i = 0; i < compressionClasses.length; i++) {
|
|
1447
|
+
var compressionClassSign = compressionClasses[i],
|
|
1448
|
+
result = findAndMark(compressionClassSign, isFullName = true);
|
|
1449
|
+
|
|
1450
|
+
// Check if assembly invoke is found and the compression class is present
|
|
1451
|
+
if (isAssemblyInvokeFound && result.length != 0) {
|
|
1452
|
+
log(logType.net, "Compression class present: " + compressionClassSign);
|
|
1453
|
+
|
|
1454
|
+
// If it's a cryptor, add the compression class to options
|
|
1455
|
+
if (isCryptor) options += (options.length != 0 ? " + " : String()) + compressionClassSign;
|
|
1456
|
+
|
|
1457
|
+
// Break the loop if a match is found
|
|
1458
|
+
break;
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
|
|
1465
|
+
// Self-Extracting archives
|
|
1466
|
+
// TODO: Upgrade
|
|
1467
|
+
|
|
1468
|
+
var isSfx = false;
|
|
1469
|
+
|
|
1470
|
+
if (!PE.isDll() && PE.isOverlayPresent()) {
|
|
1471
|
+
const overlayPatterns = [
|
|
1472
|
+
"'Rar!'", // samples by: WinRAR
|
|
1473
|
+
"'PK'03", // samples by: Zip SFX (by Intel)
|
|
1474
|
+
"';!@Install@!UTF-8!'", "'7z'BCAF271C", "efbbbf';!@Install@!UTF-8!'" // samples by: 7z
|
|
1475
|
+
]
|
|
1476
|
+
|
|
1477
|
+
for (var l = 0; l < overlayPatterns.length; l++) {
|
|
1478
|
+
if (PE.compareOverlay(overlayPatterns[l])) {
|
|
1479
|
+
log(logType.nothing, "SFX overlay pattern: " + overlayPatterns[l]);
|
|
1480
|
+
isSfx = true;
|
|
1481
|
+
}
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
|
|
1485
|
+
if (!isSfx && !PE.isNET()) {
|
|
1486
|
+
const sfxEntries = [
|
|
1487
|
+
// "e8$$$$$$$$558bec83ec..a1........8365....8365....5357bf........3bc7bb........74..85c374..f7d0", // samples by: WinZip
|
|
1488
|
+
// "558bec6a..68........68........64a1........50648925........83....5356578965..ff15", // samples by: Zip SFX
|
|
1489
|
+
// "e8$$$$$$$$558bec83ec..8365....8365....a1........5657bf........be........3bc7", // samples by: WinRAR Installer
|
|
1490
|
+
// "e8$$$$$$$$8bff558bec83ec..a1........8365....8365....5357bf........bb", // samples by: Zip SFX
|
|
1491
|
+
// "558bec83c4..b8........e8........33c05568........64ff30648920e8", // samples by: Zip SFX
|
|
1492
|
+
"4883ec..e8$$$$$$$$48895c24..55488bec4883ec..488365....48bb................488b05........483bc375", // samples by: WinRAR Installer
|
|
1493
|
+
"83ec..5657ff15........8bf08d4424..50c74424..........ff15........8a068b3d........3c..75..56ffd7", // samples by: Zip SFX
|
|
1494
|
+
"e9$$$$$$$$558bec81ec........830d..........5356576a..33dbbf........68........895d..881d", // samples by: Microsoft Cabinet
|
|
1495
|
+
"558bec83ec..56ff15........8bf08a003c..75..84c074..803e..74..46803e..75..803e..75..46eb", // samples by: Zip SFX
|
|
1496
|
+
"6a..33c0505050ff15........50e8$$$$$$$$55b8........8bece8........53b9........5657be", // samples by: Zip SFX
|
|
1497
|
+
"6a..68........e8........66813d............75..a1........81b8................75..", // samples by: Microsoft Cabinet
|
|
1498
|
+
"558bec83ec..565733ffff15........8bf0897d..8d45..50ff15........8a063c..75..56ff15", // samples by: Zip SFX
|
|
1499
|
+
"51526a..2eff15........506a..6a..2eff15........50e8........502eff15........5a59c3", // samples by: WinIMP
|
|
1500
|
+
"558bec81ec........535657ff15........a3........ff15........a1........6625....3d", // samples by: Microsoft Cabinet
|
|
1501
|
+
"558becb8........e8........5356be........578d45..5633db5053ff15........85c00f84", // samples by: Zip SFX
|
|
1502
|
+
"a1........c1e0..a3........575133c0bf........b9........3bcf76..2bcffcf3aa595f", // samples by: WinRAR Installer
|
|
1503
|
+
"558bec83c4..5356e8$$$$$$$$e8........6a..e8........8905........e8........8905", // samples by: Zip SFX
|
|
1504
|
+
"ff15........b1..380874..b1..4080....74..380874..4080....75..80....74..4033", // samples by: WinZip
|
|
1505
|
+
"53ff15........b3..38..74..80c3..4033d28a083aca74..3acb74..408a083aca75", // samples by: WinZip
|
|
1506
|
+
"558bec83c4..535657e8........e8........33c05568........64ff30648920e8", // samples by: WinRAR
|
|
1507
|
+
"53ff15........b3..38..74..80c3..8a48..4033d23aca74..3acb74..8a48..40", // samples by: WinZip
|
|
1508
|
+
"e8$$$$$$$$53bb........e8........85c074..33d28a1083fa..75..40eb", // samples by: WinRAR
|
|
1509
|
+
"fffe2a002a002a006d0065007300730061006700650073002a002a002a00", // samples by: WinRAR Installer
|
|
1510
|
+
"e8$$$$$$$$558bec83c4..b8........53", // samples by: WinRAR Installer
|
|
1511
|
+
"8A48014033D23ACA740A3ACB74068A4801" // samples by: WinZip
|
|
1512
|
+
]
|
|
1513
|
+
|
|
1514
|
+
if (PE.isSectionNamePresent("_winzip_")) {
|
|
1515
|
+
isSfx = true;
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
for (var k = 0; k < sfxEntries.length; k++) {
|
|
1519
|
+
if (PE.compareEP(sfxEntries[k])) {
|
|
1520
|
+
log(logType.nothing, "SFX entry pattern: " + sfxEntries[k]);
|
|
1521
|
+
|
|
1522
|
+
isSfx = true;
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
if (isSfx) options += (options.length != 0 ? " + " : String()) + "SFX";
|
|
1529
|
+
|
|
1530
|
+
|
|
1531
|
+
|
|
1532
|
+
|
|
1533
|
+
var entryLikePacker = false;
|
|
1534
|
+
|
|
1535
|
+
if (!PE.isDll()) {
|
|
1536
|
+
const entries = [
|
|
1537
|
+
"53565755488D35........488DBE", // samples by: UPX (x64)
|
|
1538
|
+
"B8........68........64", // samples by: Petite (x32)
|
|
1539
|
+
"60..................E8", // samples by: Anticrack Software (x32)
|
|
1540
|
+
"33C08BC068........68", // samples by: ExE Pack (x32)
|
|
1541
|
+
"74..E9........60E8", // samples by: PE-PACK
|
|
1542
|
+
"EB0668........C39C", // samples by: PECompact (x32)
|
|
1543
|
+
"93071F05....8ED0BC", // samples by: aPack (x32)
|
|
1544
|
+
"60BE........8DBE", // samples by: UPX (x32)
|
|
1545
|
+
"B8........6A..68", // samples by: Petite (x32)
|
|
1546
|
+
"BE........AD8BF8", // samples by: WinUPack (x32)
|
|
1547
|
+
"68........9C60E8", // samples by: XComp, XPACK (x32)
|
|
1548
|
+
"53558BE833DBEB60", // samples by: WWPack (x32)
|
|
1549
|
+
"BD........C745", // samples by: kkrunchy (x32)
|
|
1550
|
+
"57565351524150", // samples by: mpress (x64)
|
|
1551
|
+
"B8........5064", // samples by: PECompact (x32)
|
|
1552
|
+
"8CCBBA....03DA", // // samples by: aPack (x32)
|
|
1553
|
+
"B8........669C", // samples by: Petite, Themida (x32)
|
|
1554
|
+
"8CC0FA8ED0BC", // samples by: PACKWIN (x32)
|
|
1555
|
+
"B8........60", // samples by: Petite, Themida (x32)
|
|
1556
|
+
"8B44240456", // samples by: ASDPack (x32)
|
|
1557
|
+
"1E068CC88E", // samples by: aPack (x32)
|
|
1558
|
+
"1E068CCBBA", // samples by: aPack (x32)
|
|
1559
|
+
"EB..9C60E8", // samples by: PECompact (x32)
|
|
1560
|
+
"9C60E8CA", // samples by: Petite (x??)
|
|
1561
|
+
"60FCBED4", // samples by: ANDPakk (x32)
|
|
1562
|
+
"60EB..5D", // samples by: ASPack (x32)
|
|
1563
|
+
"60EB..E8", // samples by: G!X Protector
|
|
1564
|
+
"64FF35", // samples by: Petite (x32)
|
|
1565
|
+
"6033C0", // samples by: yzPack (x32)
|
|
1566
|
+
"669C60", // samples by: Petite (x??)
|
|
1567
|
+
"EB..60", // samples by: kkryptor, dePACK (x32)
|
|
1568
|
+
"60E8", // samples by: mpress, Packman, Pack Master, Yodas Crypter, DxPack, ASPack, MSLRH, tElock (x32)
|
|
1569
|
+
"6068" // samples by: BeRo, ExE Pack, AHPacker (x32)
|
|
1570
|
+
];
|
|
1571
|
+
|
|
1572
|
+
// Iterate through the entries to check against the entry point
|
|
1573
|
+
for (var e = 0; e < entries.length && !entryLikePacker; e++) {
|
|
1574
|
+
const entryToCheck = entries[e];
|
|
1575
|
+
|
|
1576
|
+
// If the entry point matches the current entry, set the flag to true and break the loop
|
|
1577
|
+
if (PE.compareEP(entryToCheck)) {
|
|
1578
|
+
log(logType.nothing, "EP like a packer: '" + entryToCheck + "'");
|
|
1579
|
+
|
|
1580
|
+
entryLikePacker = true;
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
if (entryLikePacker) options += (options.length != 0 ? " + " : String()) + "EntryPoint";
|
|
1586
|
+
|
|
1587
|
+
|
|
1588
|
+
|
|
1589
|
+
|
|
1590
|
+
// Check if the entry point is in the last section
|
|
1591
|
+
|
|
1592
|
+
var isLastSectionEP = false;
|
|
1593
|
+
|
|
1594
|
+
if (!PE.isDll()) {
|
|
1595
|
+
if (PE.getNumberOfSections() > 1) {
|
|
1596
|
+
// Get addresses of the last section and entry point
|
|
1597
|
+
|
|
1598
|
+
var lastSectionAddress = -1,
|
|
1599
|
+
entryPointAddress = -1;
|
|
1600
|
+
|
|
1601
|
+
|
|
1602
|
+
// Get last section with non -1 address
|
|
1603
|
+
for (var i = 1; lastSectionAddress == -1; i++) {
|
|
1604
|
+
lastSectionAddress = PE.OffsetToVA(PE.getSectionFileOffset(PE.getNumberOfSections() - i));
|
|
1605
|
+
}
|
|
1606
|
+
entryPointAddress = PE.getAddressOfEntryPoint();
|
|
1607
|
+
|
|
1608
|
+
|
|
1609
|
+
// Check if the entry point is greater than or equal to the last section address
|
|
1610
|
+
if (entryPointAddress >= lastSectionAddress) {
|
|
1611
|
+
isLastSectionEP = true;
|
|
1612
|
+
log(logType.nothing, "EP address (" + entryPointAddress + ") more than last section address (" + lastSectionAddress + ")");
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
|
|
1617
|
+
if (isLastSectionEP) options = "Last section EP";
|
|
1618
|
+
|
|
1619
|
+
|
|
1620
|
+
|
|
1621
|
+
|
|
1622
|
+
// Check for strange calls if entry point is in the last section
|
|
1623
|
+
|
|
1624
|
+
var isStrangeCalls = false;
|
|
1625
|
+
|
|
1626
|
+
if (!PE.isDll()) {
|
|
1627
|
+
if (isLastSectionEP && getAsmOpCode(getAsmInstructionByIndex(1)) === "CALL") {
|
|
1628
|
+
log(logType.nothing, "Strange call to address: " + getAsmInstructionByIndex(1).split(" ")[1]);
|
|
1629
|
+
isStrangeCalls = true;
|
|
1630
|
+
}
|
|
1631
|
+
}
|
|
1632
|
+
|
|
1633
|
+
if (isStrangeCalls) options += (options.length != 0 ? " + " : String()) + "Strange call";
|
|
1634
|
+
|
|
1635
|
+
|
|
1636
|
+
|
|
1637
|
+
|
|
1638
|
+
var isImportsLikePacker = false;
|
|
1639
|
+
|
|
1640
|
+
// ["Name", "Version", ImportLibraryIndex, Hash]
|
|
1641
|
+
// If {ImportLibraryIndex} is -1, it means the hash has no index
|
|
1642
|
+
|
|
1643
|
+
var dbCollectionOfHashesDictionary = [
|
|
1644
|
+
// packers
|
|
1645
|
+
["UPX", "0.59-0.93", 0, 0xd4fdcab1],
|
|
1646
|
+
["UPX", "0.94-1.93", 0, 0x1d51299a],
|
|
1647
|
+
["UPX", "1.94-2.03", 0, 0xb3318086],
|
|
1648
|
+
["UPX", "1.94-2.03", 0, 0x3778aab9],
|
|
1649
|
+
["UPX", "2.90-3.XX", 0, 0xf375ee03],
|
|
1650
|
+
["UPX", "2.90-3.XX", 0, 0xf737d853],
|
|
1651
|
+
["UPX", "3.91+", 0, 0xf737d853],
|
|
1652
|
+
["UPX", "3.91+", -1, 0x82a048fc],
|
|
1653
|
+
["UPX", "3.91+", -1, 0x554a1748],
|
|
1654
|
+
["NSPACK", null, 0, 0xf375ee03],
|
|
1655
|
+
["ASPack", "1.XX-2.XX", 0, 0x1272f45b],
|
|
1656
|
+
["MKFPACK", null, 0, 0x42b3e7f9],
|
|
1657
|
+
["MPRESS", null, 0, 0x174efb84],
|
|
1658
|
+
["PACKMAN", "0.0.0.1", 0, 0x174efb84],
|
|
1659
|
+
["PACKMAN", "1.0", 0, 0x69076a83],
|
|
1660
|
+
["PECompact", "0.90-0.91", -1, 0xbea416d1],
|
|
1661
|
+
["PECompact", "0.92-0.94", -1, 0x93312c2e],
|
|
1662
|
+
["PECompact", "0.97-0.971b", -1, 0xe6aa8495],
|
|
1663
|
+
["PECompact", "0.975-1.10b3", -1, 0x29188619],
|
|
1664
|
+
["PECompact", "1.10b7-1.34", -1, 0xe4c11305],
|
|
1665
|
+
["PECompact", "1.30-1.40", 0, 0x9b3305ed],
|
|
1666
|
+
["PECompact", "1.40-1.84", 0, 0xcc5b2a3c],
|
|
1667
|
+
["PECompact", "2.40-3.XX", 0, 0x2652ce4f],
|
|
1668
|
+
["PECompact", "2.40-3.XX", -1, 0xdb8fbb75],
|
|
1669
|
+
["EXE32PACK", "1.3X-1.4X", 0, 0x174efb84],
|
|
1670
|
+
["tElock", "1.0", -1, 0x051946f7],
|
|
1671
|
+
["JDPACK", "2.00", 0, 0xc002db0e],
|
|
1672
|
+
["CRINKLER", null, 0, 0x0b0e1fbf],
|
|
1673
|
+
["WinUpack", null, -1, 0x29188619],
|
|
1674
|
+
["YodasCrypter", "1.X", -1, 0x1303a51b],
|
|
1675
|
+
["XComp", "0.97-0.98", -1, 0xea1e66e4],
|
|
1676
|
+
["XPack", "0.97-0.98", -1, 0x2ac44dd2],
|
|
1677
|
+
["kkrunchy", null, -1, 0x29188619],
|
|
1678
|
+
["ANDPakk2", "0.18", -1, 0x29188619],
|
|
1679
|
+
// protectors
|
|
1680
|
+
["ASProtect", "1.XX-2.XX", 0, 0x1272f45b],
|
|
1681
|
+
["SHRINKER", "3.2", 0, 0xb2a64858],
|
|
1682
|
+
["SHRINKER", "3.2", 0, 0x158af2d0],
|
|
1683
|
+
["SHRINKER", "3.2", 0, 0x49e8aa1f],
|
|
1684
|
+
["SHRINKER", "3.5", 0, 0xe9ea0851],
|
|
1685
|
+
["SHRINKER", "3.5", 0, 0x3344b95d],
|
|
1686
|
+
["SHRINKER", "3.5", 0, 0x586088f3],
|
|
1687
|
+
["Enigma", "1.00-3.60", 0, 0xc002db0e],
|
|
1688
|
+
["Enigma", "2.XX", 0, 0xdd92de10],
|
|
1689
|
+
["Enigma", "3.70+", 0, 0xd04c7a50],
|
|
1690
|
+
["PCGUARD", "5.04-5.05", 0, 0x5a169c7a],
|
|
1691
|
+
["PCGUARD", "5.04-5.05", 0, 0x0b0b2965],
|
|
1692
|
+
["eXPressor", "1.2", -1, 0x66b35c6e],
|
|
1693
|
+
["eXPressor", "1.2", -1, 0x32f4466c],
|
|
1694
|
+
["eXPressor", "1.3", -1, 0x921d0280],
|
|
1695
|
+
["eXPressor", "1.3", -1, 0xf51eba68],
|
|
1696
|
+
["eXPressor", "1.3", -1, 0xbc84ce09],
|
|
1697
|
+
["eXPressor", "1.4.5.X", 0, 0x427816ab],
|
|
1698
|
+
["eXPressor", "1.4.5.X", -1, 0x3c705cae],
|
|
1699
|
+
["eXPressor", "1.4.5.X", -1, 0x4d02e093],
|
|
1700
|
+
["eXPressor", "1.4.5.X", -1, 0x958a9ea2], // VB6
|
|
1701
|
+
["eXPressor", "1.5.0.X", -1, 0x7ababb5a],
|
|
1702
|
+
["eXPressor", "1.5.0.X", -1, 0x95ca15e4],
|
|
1703
|
+
["eXPressor", "1.5.0.X", -1, 0xbd41da20],
|
|
1704
|
+
["eXPressor", "1.6", -1, 0xca58fa0c],
|
|
1705
|
+
["eXPressor", "1.6.1", -1, 0x48ffd359],
|
|
1706
|
+
["VMProtect", "1.70", -1, 0x1ff3103f],
|
|
1707
|
+
// ["VMProtect", "1.70", -1, 0x0c16df2d],
|
|
1708
|
+
["VMProtect", "2.0.3-2.13", -1, 0x9d12b153],
|
|
1709
|
+
["VMProtect", "3.0.0", -1, 0x1e5500c1],
|
|
1710
|
+
["VMProtect", "3.0.9", -1, 0xc5fb6a4b],
|
|
1711
|
+
["VMProtect", "3.2.0-3.5.0", -1, 0x5caa99c7],
|
|
1712
|
+
["YodasProtector", "1.0b", -1, 0x1303a51b],
|
|
1713
|
+
["ASM Guard", "2.XX+", -1, 0xf1e0d63b],
|
|
1714
|
+
["Themida", "2.XX-3.XX", 0, 0x3ffccc8a],
|
|
1715
|
+
["Amber", null, -1, 0x97c72051],
|
|
1716
|
+
[".NET Reactor", null, 0, 0x96be8e26],
|
|
1717
|
+
[".NET Reactor", null, 1, 0xb4cda32f],
|
|
1718
|
+
["Bat To Exe Converter", null, 0, 0x72a2ca64],
|
|
1719
|
+
["Vbs To Exe Converter", null, 0, 0x182aac68],
|
|
1720
|
+
["DNGuard", null, 0, 0x38432571],
|
|
1721
|
+
["DNGuard", "4.9+", 0, 0x99f8b58e]
|
|
1722
|
+
];
|
|
1723
|
+
|
|
1724
|
+
const importValidatingResult = validateImportHashes(dbCollectionOfHashesDictionary);
|
|
1725
|
+
|
|
1726
|
+
var versionByImportsDetected;
|
|
1727
|
+
|
|
1728
|
+
if (importValidatingResult != null) {
|
|
1729
|
+
versionByImportsDetected = importValidatingResult[1];
|
|
1730
|
+
|
|
1731
|
+
log(logType.nothing, "Imports hash like " + importValidatingResult[0] + (versionByImportsDetected ? " (version " + versionByImportsDetected + ")" : String()) + " (" + importValidatingResult[3] + ")")
|
|
1732
|
+
isImportsLikePacker = true;
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
// Clean up: release the dictionary
|
|
1736
|
+
dbCollectionOfHashesDictionary = undefined;
|
|
1737
|
+
|
|
1738
|
+
if (isImportsLikePacker) options += (options.length != 0 ? " + " : String()) + "Imports like " + importValidatingResult[0] + (versionByImportsDetected ? " (v" + importValidatingResult[1] + ")" : String());
|
|
1739
|
+
|
|
1740
|
+
|
|
1741
|
+
|
|
1742
|
+
|
|
1743
|
+
var isSectionNameLikePacker = false;
|
|
1744
|
+
|
|
1745
|
+
var dbCollectionOfSectionNamesDictionary = [
|
|
1746
|
+
["UPX", null, "UPX0"],
|
|
1747
|
+
["UPX", null, "UPX1"],
|
|
1748
|
+
["UPX", null, "UPX2"],
|
|
1749
|
+
["UPX", null, "UPX3"],
|
|
1750
|
+
["VMProtect", null, ".vmp"],
|
|
1751
|
+
["VMProtect", null, ".vmp0"],
|
|
1752
|
+
["VMProtect", null, ".vmp1"],
|
|
1753
|
+
["VMProtect", null, ".vmp2"],
|
|
1754
|
+
["VMProtect", null, ".vmp3"],
|
|
1755
|
+
["ASPack", "1.08-2.XX", ".adata"],
|
|
1756
|
+
["ASPack", "2.XX", ".aspack"],
|
|
1757
|
+
["Petite", null, ".petite"],
|
|
1758
|
+
["Petite", null, "petite"],
|
|
1759
|
+
["Enigma", null, ".enigma1"],
|
|
1760
|
+
["Enigma", null, ".enigma2"],
|
|
1761
|
+
[".NET Reactor", "2.XX", ".reacto"],
|
|
1762
|
+
["Themida", "3.X", ".imports"],
|
|
1763
|
+
["Themida", "3.X", ".themida"],
|
|
1764
|
+
["Themida", "3.X", ".winlice"],
|
|
1765
|
+
["Themida", "3.X", ".loadcon"],
|
|
1766
|
+
["Themida", "2.XX", " "],
|
|
1767
|
+
["Themida", null, ".stub01"],
|
|
1768
|
+
["ASM Guard", "2.XX", "ASMGUARD"],
|
|
1769
|
+
["ASM Guard", "2.XX", ".asmg"],
|
|
1770
|
+
["tElock", null, "UPX!"], // ???
|
|
1771
|
+
["YodasProtector", "1.0b", ".yP"],
|
|
1772
|
+
["YodasCrypter", "1.X", "yC"],
|
|
1773
|
+
["MPRESS", null, ".MPRESS1"],
|
|
1774
|
+
["MPRESS", null, ".MPRESS2"],
|
|
1775
|
+
["DxPack", "1.0", "coderpub"],
|
|
1776
|
+
["SafeNet", null, ".AKS1"],
|
|
1777
|
+
["SafeNet", null, ".AKS2"],
|
|
1778
|
+
["SafeNet", null, ".AKS3"],
|
|
1779
|
+
["Alienyze", null, ".alien"],
|
|
1780
|
+
["PECompact", null, "pec"],
|
|
1781
|
+
["PECompact", null, "pec1"],
|
|
1782
|
+
["RLP", null, ".rlp"],
|
|
1783
|
+
[".NET Reactor", null, ".reacto"],
|
|
1784
|
+
["StarForce", "4.X-5.X", ".ps4"],
|
|
1785
|
+
["StarForce", "3.X", ".sforce3"],
|
|
1786
|
+
["Safengine Shielden", null, ".sedat"],
|
|
1787
|
+
["VirtualizeProtect", null, "VProtect"],
|
|
1788
|
+
["Krypton", null, "YADO"],
|
|
1789
|
+
["NsPack", null, "nsp0"],
|
|
1790
|
+
["NsPack", null, "nsp1"],
|
|
1791
|
+
["nPack", null, ".nPack"],
|
|
1792
|
+
["JDPack", null, ".jdpack"],
|
|
1793
|
+
["SC Pack", null, ".scpack"],
|
|
1794
|
+
["Simple Pack", null, ".spack"],
|
|
1795
|
+
["Eronana", null, ".packer"],
|
|
1796
|
+
["PE-SHiELD", null, "PESHiELD"],
|
|
1797
|
+
["SVK Protector", null, "SVKP"],
|
|
1798
|
+
["obfus.h", null, ".obfh"],
|
|
1799
|
+
["Warbird", null, "?g_Encry"],
|
|
1800
|
+
["ACProtect", null, ".perplex"],
|
|
1801
|
+
["Software Compress", null, "SoftComp"],
|
|
1802
|
+
["RLPack", null, ".RLPack"],
|
|
1803
|
+
["CodeVirtualizer", null, ".vlizer"],
|
|
1804
|
+
["DYAMAR", "1.3.5", ".dyamarC"],
|
|
1805
|
+
["hmimys", "1.3", "hmimys"],
|
|
1806
|
+
["Morphnah", "1.0.X", ".nah"]
|
|
1807
|
+
];
|
|
1808
|
+
|
|
1809
|
+
const sectionNamesValidatingResult = validateSectionNames(dbCollectionOfSectionNamesDictionary);
|
|
1810
|
+
|
|
1811
|
+
var versionBySectionDetected;
|
|
1812
|
+
|
|
1813
|
+
if (sectionNamesValidatingResult != null) {
|
|
1814
|
+
versionBySectionDetected = sectionNamesValidatingResult[1];
|
|
1815
|
+
|
|
1816
|
+
log(logType.nothing, "Sections like " + sectionNamesValidatingResult[0] + (versionBySectionDetected ? " (v" + versionBySectionDetected + ")" : String()));
|
|
1817
|
+
isSectionNameLikePacker = true;
|
|
1818
|
+
}
|
|
1819
|
+
|
|
1820
|
+
// Clean up: release the dictionary
|
|
1821
|
+
dbCollectionOfSectionNamesDictionary = undefined;
|
|
1822
|
+
|
|
1823
|
+
if (isSectionNameLikePacker) options += (options.length != 0 ? " + " : String()) + "Sections like " + sectionNamesValidatingResult[0] + (versionBySectionDetected ? " (v" + sectionNamesValidatingResult[1] + ")" : String());
|
|
1824
|
+
|
|
1825
|
+
|
|
1826
|
+
|
|
1827
|
+
|
|
1828
|
+
// Check if there is a collision in sections
|
|
1829
|
+
|
|
1830
|
+
var isCollisionInSectionsPresent = false;
|
|
1831
|
+
|
|
1832
|
+
// Get section name collision between "0" and "1"
|
|
1833
|
+
const sectionNameCollision = PE.getSectionNameCollision("0", "1");
|
|
1834
|
+
|
|
1835
|
+
// Check if there is a collision
|
|
1836
|
+
if (sectionNameCollision.length != 0) {
|
|
1837
|
+
log(logType.nothing, "Section names collision: '" + sectionNameCollision + "'");
|
|
1838
|
+
isCollisionInSectionsPresent = true;
|
|
1839
|
+
}
|
|
1840
|
+
|
|
1841
|
+
if (isCollisionInSectionsPresent) options += (options.length != 0 ? " + " : String()) + "Sections collision (\"" + sectionNameCollision + "\")";
|
|
1842
|
+
|
|
1843
|
+
|
|
1844
|
+
|
|
1845
|
+
|
|
1846
|
+
// Check if there are repeating section names
|
|
1847
|
+
|
|
1848
|
+
var isSectionNamesRepeatingPresent = false;
|
|
1849
|
+
|
|
1850
|
+
var sectionCount = PE.getNumberOfSections(),
|
|
1851
|
+
sectionNamesDictionary = {};
|
|
1852
|
+
|
|
1853
|
+
for (var i = 0; i < sectionCount && !isSectionNamesRepeatingPresent; i++) {
|
|
1854
|
+
var sectionName = PE.getSectionName(i);
|
|
1855
|
+
sectionNamesDictionary[sectionName] = (sectionNamesDictionary[sectionName] || 0) + 1;
|
|
1856
|
+
if (sectionNamesDictionary[sectionName] > 1) {
|
|
1857
|
+
log(logType.nothing, "Section names repeating: '" + clearSectionName(sectionName) + "'");
|
|
1858
|
+
isSectionNamesRepeatingPresent = true;
|
|
1859
|
+
}
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
if (isSectionNamesRepeatingPresent) options += (options.length != 0 ? " + " : String()) + "Section names repeating";
|
|
1863
|
+
|
|
1864
|
+
|
|
1865
|
+
|
|
1866
|
+
|
|
1867
|
+
// Check if the first instruction at entry point starts with a stack operation
|
|
1868
|
+
|
|
1869
|
+
var isStartsWithStackOperation = false;
|
|
1870
|
+
|
|
1871
|
+
// Get the opcode of the first instruction at entry point
|
|
1872
|
+
const firstEpAsmOpCode = getFirstEpAsmOpCode();
|
|
1873
|
+
|
|
1874
|
+
// Switch statement to check for specific stack operation opcodes
|
|
1875
|
+
switch (firstEpAsmOpCode) {
|
|
1876
|
+
case "PUSHAL":
|
|
1877
|
+
case "PUSHA":
|
|
1878
|
+
case "PUSHF":
|
|
1879
|
+
case "POPA":
|
|
1880
|
+
log(logType.nothing, "'" + firstEpAsmOpCode + "' at EP");
|
|
1881
|
+
isStartsWithStackOperation = true;
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1884
|
+
if (isStartsWithStackOperation) options += (options.length != 0 ? " + " : String()) + "\"" + firstEpAsmOpCode.toLowerCase() + "\" at EP";
|
|
1885
|
+
|
|
1886
|
+
|
|
1887
|
+
|
|
1888
|
+
|
|
1889
|
+
// Many not-so-smart virus writers use base64 to pack
|
|
1890
|
+
// or hide malicious code, but do not realize that this
|
|
1891
|
+
// is very easily detected by heuristic analysis.
|
|
1892
|
+
|
|
1893
|
+
const signaturesVariants = [
|
|
1894
|
+
"TVoAAAAAA", // MZ ~[00 00 00 00 00]
|
|
1895
|
+
"TVqQAA", // MZ ~[90 00 03]
|
|
1896
|
+
"TVpQAA", // MZ ~[50 00 02]
|
|
1897
|
+
"TVp4AA" // MZ ~[78 00 01]
|
|
1898
|
+
];
|
|
1899
|
+
|
|
1900
|
+
var isEncodedPeDetected = false;
|
|
1901
|
+
|
|
1902
|
+
// Iterate through signature variants
|
|
1903
|
+
for (var s = 0; s < signaturesVariants.length && !isEncodedPeDetected; s++) {
|
|
1904
|
+
const trigger = signaturesVariants[s];
|
|
1905
|
+
|
|
1906
|
+
// Check if the signature is valid using Unicode signature mask or the original signature
|
|
1907
|
+
if (
|
|
1908
|
+
validateGlobalUnicodeString(trigger) || validateSignature("'" + trigger + "'")
|
|
1909
|
+
) {
|
|
1910
|
+
log(logType.nothing, "Encoded PE detected! (with Base64)");
|
|
1911
|
+
isCryptor = true;
|
|
1912
|
+
isEncodedPeDetected = true;
|
|
1913
|
+
}
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
if (isEncodedPeDetected) options += (options.length != 0 ? " + " : String()) + "Base64 payload";
|
|
1917
|
+
|
|
1918
|
+
|
|
1919
|
+
|
|
1920
|
+
|
|
1921
|
+
var isMzSignatureDetected = false;
|
|
1922
|
+
|
|
1923
|
+
if (PE.isOverlayPresent() &&
|
|
1924
|
+
PE.getOverlaySize() >= 100 &&
|
|
1925
|
+
PE.compareOverlay("'MZ'")) {
|
|
1926
|
+
log(logType.any, "PE signature at overlay");
|
|
1927
|
+
isMzSignatureDetected = true;
|
|
1928
|
+
}
|
|
1929
|
+
|
|
1930
|
+
if (isMzSignatureDetected) options += (options.length != 0 ? " + " : String()) + "PE in overlay";
|
|
1931
|
+
|
|
1932
|
+
|
|
1933
|
+
|
|
1934
|
+
|
|
1935
|
+
// Check for a strange overlay in the PE file
|
|
1936
|
+
|
|
1937
|
+
var hasStrangeOverlay = false;
|
|
1938
|
+
|
|
1939
|
+
// Conditions to check for a strange overlay
|
|
1940
|
+
if (!isMzSignatureDetected && !isSfx && !PE.isSigned() && PE.isOverlayPresent()) {
|
|
1941
|
+
var overlayEntropy = PE.calculateEntropy(PE.getOverlayOffset(), PE.getOverlaySize());
|
|
1942
|
+
if (
|
|
1943
|
+
PE.getOverlaySize() > 150 && overlayEntropy > 7 ||
|
|
1944
|
+
PE.getOverlaySize() > (PE.getSize() - PE.getOverlaySize())
|
|
1945
|
+
) {
|
|
1946
|
+
log(logType.any, "Overlay size: " + PE.getOverlaySize() + " bytes; Entropy: " + overlayEntropy);
|
|
1947
|
+
hasStrangeOverlay = true;
|
|
1948
|
+
}
|
|
1949
|
+
}
|
|
1950
|
+
|
|
1951
|
+
if (hasStrangeOverlay) options += (options.length != 0 ? " + " : String()) + "Strange overlay";
|
|
1952
|
+
|
|
1953
|
+
|
|
1954
|
+
|
|
1955
|
+
|
|
1956
|
+
// Flag to indicate high entropy
|
|
1957
|
+
|
|
1958
|
+
var isHighEntropy = false;
|
|
1959
|
+
|
|
1960
|
+
// Checks for high entropy (ignore overlay)
|
|
1961
|
+
if (!(PE.isDll() && (PE.isSectionNamePresent(".rdata") || PE.isSectionNamePresent(".rsrc"))) && // .dll with resources
|
|
1962
|
+
PE.calculateEntropy(0x00, PE.getSize() - PE.getOverlaySize()) > 7.3) {
|
|
1963
|
+
isHighEntropy = true;
|
|
1964
|
+
}
|
|
1965
|
+
|
|
1966
|
+
if (isHighEntropy) options += (options.length != 0 ? " + " : String()) + "High entropy";
|
|
1967
|
+
|
|
1968
|
+
|
|
1969
|
+
|
|
1970
|
+
|
|
1971
|
+
var isCompressedSectionPresent = false;
|
|
1972
|
+
|
|
1973
|
+
var sectionNumber = 0;
|
|
1974
|
+
|
|
1975
|
+
for (var t = 0; t < PE.getNumberOfSections() && !isCompressedSectionPresent; t++) {
|
|
1976
|
+
sectionNumber = t;
|
|
1977
|
+
if (PE.calculateEntropy(PE.getSectionFileOffset(sectionNumber), PE.getSectionFileSize(sectionNumber)) > 7.4) {
|
|
1978
|
+
isCompressedSectionPresent = true;
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
if (isCompressedSectionPresent) options += (options.length != 0 ? " + " : String()) + "Section " + sectionNumber + " (\"" + clearSectionName(PE.getSectionName(sectionNumber)) + "\") compressed";
|
|
1983
|
+
|
|
1984
|
+
|
|
1985
|
+
|
|
1986
|
+
|
|
1987
|
+
// Check for recurring import names
|
|
1988
|
+
|
|
1989
|
+
var recurringImports = false;
|
|
1990
|
+
|
|
1991
|
+
var importCount = PE.getNumberOfImports(),
|
|
1992
|
+
importNames = {};
|
|
1993
|
+
|
|
1994
|
+
for (var i = 0; i < importCount && !recurringImports; i++) {
|
|
1995
|
+
var name = PE.getImportLibraryName(i);
|
|
1996
|
+
importNames[name] = (importNames[name] || 0) + 1;
|
|
1997
|
+
if (importNames[name] >= 3) {
|
|
1998
|
+
recurringImports = true;
|
|
1999
|
+
}
|
|
2000
|
+
}
|
|
2001
|
+
|
|
2002
|
+
if (recurringImports) options += (options.length != 0 ? " + " : String()) + "Recurring import names";
|
|
2003
|
+
|
|
2004
|
+
|
|
2005
|
+
|
|
2006
|
+
|
|
2007
|
+
if (options.length != 0) isDetected = true;
|
|
2008
|
+
|
|
2009
|
+
|
|
2010
|
+
if (isDetected) {
|
|
2011
|
+
var detectedType = isCryptor ? "cryptor" : "packer";
|
|
2012
|
+
|
|
2013
|
+
_setResult("~" + detectedType, (isCryptor ? "Encrypted" : "Compressed") + " data", String(), PE.isVerbose() ? options : String());
|
|
2014
|
+
}
|
|
2015
|
+
}
|
|
2016
|
+
|
|
2017
|
+
|
|
2018
|
+
|
|
2019
|
+
|
|
2020
|
+
function scanForLicensingSystems_NET_and_Native() { // For .NET and Native apps
|
|
2021
|
+
var options = String();
|
|
2022
|
+
|
|
2023
|
+
var isDetected = Boolean();
|
|
2024
|
+
|
|
2025
|
+
|
|
2026
|
+
|
|
2027
|
+
|
|
2028
|
+
if (PE.isNET()) {
|
|
2029
|
+
|
|
2030
|
+
// https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.licenseproviderattribute
|
|
2031
|
+
|
|
2032
|
+
var isLicenseProviderPresent = false;
|
|
2033
|
+
|
|
2034
|
+
if (PE.isNetObjectPresent("LicenseProviderAttribute")) {
|
|
2035
|
+
isLicenseProviderPresent = true;
|
|
2036
|
+
}
|
|
2037
|
+
|
|
2038
|
+
if (isLicenseProviderPresent) options = "Provider attribute";
|
|
2039
|
+
|
|
2040
|
+
|
|
2041
|
+
|
|
2042
|
+
|
|
2043
|
+
// https://learn.microsoft.com/ru-ru/dotnet/api/system.componentmodel.licensemanager
|
|
2044
|
+
|
|
2045
|
+
var isLicenseManagerPresent = false;
|
|
2046
|
+
|
|
2047
|
+
if (PE.isNetObjectPresent("LicenseManager")) {
|
|
2048
|
+
isLicenseManagerPresent = true;
|
|
2049
|
+
}
|
|
2050
|
+
|
|
2051
|
+
if (isLicenseManagerPresent) options += (options.length != 0 ? " + " : String()) + "License manager";
|
|
2052
|
+
|
|
2053
|
+
}
|
|
2054
|
+
|
|
2055
|
+
|
|
2056
|
+
|
|
2057
|
+
|
|
2058
|
+
// Check for licensing strings
|
|
2059
|
+
|
|
2060
|
+
var isInterestingStringsFound = false;
|
|
2061
|
+
|
|
2062
|
+
const licesingStrings = [ /*[E]*/ "nter serial ", /*[S]*/ "erial key ", " activate ", " trial ", /*[W]*/ "rong activation", /*[W]*/ "rong licens", /*[L]*/ "icense expire", "valid license", /*[L]*/ "icense key", " full version", " purchase a "];
|
|
2063
|
+
|
|
2064
|
+
for (var i = 0; i < licesingStrings.length; i++) {
|
|
2065
|
+
const currentPatternToFind = licesingStrings[i];
|
|
2066
|
+
|
|
2067
|
+
if (PE.isSignaturePresent(0x00, PE.getSize(), "'" + currentPatternToFind + "'") ||
|
|
2068
|
+
PE.isSignaturePresent(0x00, PE.getSize(), "'" + generateUnicodeSignatureMask(currentPatternToFind) + "'")) {
|
|
2069
|
+
isInterestingStringsFound = true;
|
|
2070
|
+
break;
|
|
2071
|
+
}
|
|
2072
|
+
}
|
|
2073
|
+
|
|
2074
|
+
if (isInterestingStringsFound) options += (options.length != 0 ? " + " : String()) + "Strings";
|
|
2075
|
+
|
|
2076
|
+
|
|
2077
|
+
|
|
2078
|
+
|
|
2079
|
+
if (options.length != 0) isDetected = true;
|
|
2080
|
+
|
|
2081
|
+
|
|
2082
|
+
if (isDetected) {
|
|
2083
|
+
_setResult("~licensing", "Contains", String(), PE.isVerbose() ? options : String());
|
|
2084
|
+
}
|
|
2085
|
+
}
|
|
2086
|
+
|
|
2087
|
+
|
|
2088
|
+
|
|
2089
|
+
function scanForBadFileFormat_NET_and_Native() {
|
|
2090
|
+
var options = String();
|
|
2091
|
+
|
|
2092
|
+
var isDetected = Boolean();
|
|
2093
|
+
|
|
2094
|
+
|
|
2095
|
+
|
|
2096
|
+
|
|
2097
|
+
var isEntryPointIncorrect = false;
|
|
2098
|
+
|
|
2099
|
+
if (!PE.isEntryPointCorrect()) {
|
|
2100
|
+
isEntryPointIncorrect = true;
|
|
2101
|
+
}
|
|
2102
|
+
|
|
2103
|
+
if (isEntryPointIncorrect) options += (options.length != 0 ? " + " : String()) + "EntryPoint";
|
|
2104
|
+
|
|
2105
|
+
|
|
2106
|
+
|
|
2107
|
+
|
|
2108
|
+
var isSectionAlignmentIncorrect = false;
|
|
2109
|
+
|
|
2110
|
+
if (!PE.isSectionAlignmentCorrect()) {
|
|
2111
|
+
isSectionAlignmentIncorrect = true;
|
|
2112
|
+
}
|
|
2113
|
+
|
|
2114
|
+
if (isSectionAlignmentIncorrect) options += (options.length != 0 ? " + " : String()) + "Section aligment";
|
|
2115
|
+
|
|
2116
|
+
|
|
2117
|
+
|
|
2118
|
+
|
|
2119
|
+
var isFileAlignmentIncorrect = false;
|
|
2120
|
+
|
|
2121
|
+
if (!PE.isFileAlignmentCorrect()) {
|
|
2122
|
+
isFileAlignmentIncorrect = true;
|
|
2123
|
+
}
|
|
2124
|
+
|
|
2125
|
+
if (isFileAlignmentIncorrect) options += (options.length != 0 ? " + " : String()) + "File alignment";
|
|
2126
|
+
|
|
2127
|
+
|
|
2128
|
+
|
|
2129
|
+
|
|
2130
|
+
var isHeaderIncorrect = false;
|
|
2131
|
+
|
|
2132
|
+
if (!PE.isHeaderCorrect()) {
|
|
2133
|
+
isHeaderIncorrect = true;
|
|
2134
|
+
}
|
|
2135
|
+
|
|
2136
|
+
if (isHeaderIncorrect) options += (options.length != 0 ? " + " : String()) + "Header";
|
|
2137
|
+
|
|
2138
|
+
|
|
2139
|
+
|
|
2140
|
+
|
|
2141
|
+
var isRelocsTableIncorrect = false;
|
|
2142
|
+
|
|
2143
|
+
if (!PE.isRelocsTableCorrect()) {
|
|
2144
|
+
isRelocsTableIncorrect = true;
|
|
2145
|
+
}
|
|
2146
|
+
|
|
2147
|
+
if (isRelocsTableIncorrect) options += (options.length != 0 ? " + " : String()) + "Relocs";
|
|
2148
|
+
|
|
2149
|
+
|
|
2150
|
+
|
|
2151
|
+
|
|
2152
|
+
var isImportTableIncorrect = false;
|
|
2153
|
+
|
|
2154
|
+
if (!PE.isImportTableCorrect()) {
|
|
2155
|
+
isImportTableIncorrect = true;
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2158
|
+
if (isImportTableIncorrect) options += (options.length != 0 ? " + " : String()) + "IAT";
|
|
2159
|
+
|
|
2160
|
+
|
|
2161
|
+
|
|
2162
|
+
|
|
2163
|
+
// Check EAT (only for .dll)
|
|
2164
|
+
|
|
2165
|
+
var isExportTableIncorrect = false;
|
|
2166
|
+
|
|
2167
|
+
if (PE.isDll() && !PE.isExportTableCorrect()) {
|
|
2168
|
+
isExportTableIncorrect = true;
|
|
2169
|
+
}
|
|
2170
|
+
|
|
2171
|
+
if (isExportTableIncorrect) options += (options.length != 0 ? " + " : String()) + "EAT";
|
|
2172
|
+
|
|
2173
|
+
|
|
2174
|
+
|
|
2175
|
+
|
|
2176
|
+
var isResourcesTableIncorrect = false;
|
|
2177
|
+
|
|
2178
|
+
if (!PE.isResourcesTableCorrect()) {
|
|
2179
|
+
isResourcesTableIncorrect = true;
|
|
2180
|
+
}
|
|
2181
|
+
|
|
2182
|
+
if (isResourcesTableIncorrect) options += (options.length != 0 ? " + " : String()) + "Resources";
|
|
2183
|
+
|
|
2184
|
+
|
|
2185
|
+
|
|
2186
|
+
|
|
2187
|
+
if (options.length != 0) isDetected = true;
|
|
2188
|
+
|
|
2189
|
+
|
|
2190
|
+
if (isDetected) {
|
|
2191
|
+
_setResult("~corrupted data", "Bad format", String(), PE.isVerbose() ? options : String());
|
|
2192
|
+
}
|
|
2193
|
+
}
|
|
2194
|
+
|
|
2195
|
+
|
|
2196
|
+
|
|
2197
|
+
function scanForDebugData_NET_and_Native() { // For .NET and Native apps
|
|
2198
|
+
var options = String();
|
|
2199
|
+
|
|
2200
|
+
var isDetected = Boolean();
|
|
2201
|
+
|
|
2202
|
+
|
|
2203
|
+
|
|
2204
|
+
|
|
2205
|
+
// Check for sections with debug data by name
|
|
2206
|
+
|
|
2207
|
+
var isDebugSectionPresent = false;
|
|
2208
|
+
|
|
2209
|
+
var sectionNumber = 0;
|
|
2210
|
+
|
|
2211
|
+
for (var i = 0; i < PE.getNumberOfSections() && !isDebugSectionPresent; i++) {
|
|
2212
|
+
sectionNumber = i;
|
|
2213
|
+
|
|
2214
|
+
const currentSectionName = PE.getSectionName(i).toLowerCase();
|
|
2215
|
+
|
|
2216
|
+
if (currentSectionName.indexOf("debug") !== -1 || // Modern LLVM debug sections
|
|
2217
|
+
currentSectionName === ".stab" || currentSectionName === ".stabstr") { // TCC/GCC
|
|
2218
|
+
log(logType.any, "Debug section detected: \"" + clearSectionName(PE.getSectionName(sectionNumber)) + "\"");
|
|
2219
|
+
isDebugSectionPresent = true;
|
|
2220
|
+
}
|
|
2221
|
+
}
|
|
2222
|
+
|
|
2223
|
+
if (isDebugSectionPresent) options = "Section " + sectionNumber + " (\"" + clearSectionName(PE.getSectionName(sectionNumber)) + "\")";
|
|
2224
|
+
|
|
2225
|
+
|
|
2226
|
+
|
|
2227
|
+
|
|
2228
|
+
// .NET Native debug header, EAT function
|
|
2229
|
+
|
|
2230
|
+
var isNetNativeDebugDataPresent = false;
|
|
2231
|
+
|
|
2232
|
+
if (!PE.isNET() && PE.isExportFunctionPresent("DotNetRuntimeDebugHeader")) {
|
|
2233
|
+
log(logType.any, ".NET Native debug function detected");
|
|
2234
|
+
isNetNativeDebugDataPresent = true;
|
|
2235
|
+
}
|
|
2236
|
+
|
|
2237
|
+
if (isNetNativeDebugDataPresent) options += (options.length != 0 ? " + " : String()) + "DotNET runtime header";
|
|
2238
|
+
|
|
2239
|
+
|
|
2240
|
+
|
|
2241
|
+
|
|
2242
|
+
// Check for absolute PDB path
|
|
2243
|
+
|
|
2244
|
+
var isPdbFullPathPresent = false;
|
|
2245
|
+
|
|
2246
|
+
var pdbExtensionPatternOffset = PE.findSignature(PE.getDosStubOffset() + PE.getDosStubSize(), PE.getSize() - PE.getOverlaySize(), "'.pdb'");
|
|
2247
|
+
|
|
2248
|
+
var pdbPathBeginOffset, pdbPath = String();
|
|
2249
|
+
|
|
2250
|
+
if (pdbExtensionPatternOffset !== -1) {
|
|
2251
|
+
|
|
2252
|
+
for (var i = pdbExtensionPatternOffset; i > 0; i--) {
|
|
2253
|
+
if (PE.readByte(i) === 0x00) {
|
|
2254
|
+
pdbPathBeginOffset = i + 1;
|
|
2255
|
+
break;
|
|
2256
|
+
}
|
|
2257
|
+
}
|
|
2258
|
+
|
|
2259
|
+
pdbPath = PE.getString(pdbPathBeginOffset, 256);
|
|
2260
|
+
|
|
2261
|
+
if (pdbPath.length > 255)
|
|
2262
|
+
pdbPath = pdbPath.substring(0, 255) + " . . .";
|
|
2263
|
+
|
|
2264
|
+
pdbPath = pdbPath.replace(/[\n\r]/g, "");
|
|
2265
|
+
|
|
2266
|
+
if (pdbPath.match(/^[a-zA-Z]:\\/) !== null) {
|
|
2267
|
+
log(logType.any, "PDB absolute path: \"" + pdbPath + "\"");
|
|
2268
|
+
isPdbFullPathPresent = true;
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2271
|
+
|
|
2272
|
+
if (isPdbFullPathPresent) options += (options.length != 0 ? " + " : String()) + "Absolute PDB path";
|
|
2273
|
+
|
|
2274
|
+
|
|
2275
|
+
|
|
2276
|
+
|
|
2277
|
+
// Check for portable (relative path) or embedded PDB
|
|
2278
|
+
|
|
2279
|
+
var isPortableOrEmbeddedPdbDetected = false;
|
|
2280
|
+
|
|
2281
|
+
var pdbTextType = String();
|
|
2282
|
+
|
|
2283
|
+
if (pdbPath && !isPdbFullPathPresent) {
|
|
2284
|
+
pdbTextType = validateSignature("00 52 53 44 53") ? "Embedded" : "Portable";
|
|
2285
|
+
|
|
2286
|
+
log(logType.any, pdbTextType + " PDB name: \"" + pdbPath + "\"");
|
|
2287
|
+
isPortableOrEmbeddedPdbDetected = true;
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
if (isPortableOrEmbeddedPdbDetected) options += (options.length != 0 ? " + " : String()) + pdbTextType + " PDB (release)";
|
|
2291
|
+
|
|
2292
|
+
|
|
2293
|
+
|
|
2294
|
+
|
|
2295
|
+
var isCosturaEmbeddedDebugData = false;
|
|
2296
|
+
|
|
2297
|
+
if (PE.isNET() && PE.isNetObjectPresent("costura.costura.pdb.compressed")) {
|
|
2298
|
+
log(logType.any, "Costura embedded PDB detected");
|
|
2299
|
+
isCosturaEmbeddedDebugData = true;
|
|
2300
|
+
}
|
|
2301
|
+
|
|
2302
|
+
if (isCosturaEmbeddedDebugData) options += (options.length != 0 ? " + " : String()) + "Costura.Fody embedded PDB";
|
|
2303
|
+
|
|
2304
|
+
|
|
2305
|
+
|
|
2306
|
+
|
|
2307
|
+
if (options.length != 0) isDetected = true;
|
|
2308
|
+
|
|
2309
|
+
|
|
2310
|
+
if (isDetected) {
|
|
2311
|
+
_setResult("~debug data", "Contains", String(), PE.isVerbose() ? options : String());
|
|
2312
|
+
}
|
|
2313
|
+
}
|
|
2314
|
+
|
|
2315
|
+
|
|
2316
|
+
|
|
2317
|
+
/**
|
|
2318
|
+
* Checks if the .NET Visual Basic standard library is present.
|
|
2319
|
+
*
|
|
2320
|
+
* @returns {boolean} True if the Microsoft.VisualBasic library is found; otherwise false.
|
|
2321
|
+
*/
|
|
2322
|
+
function isVbNetStandartLibraryPresent() {
|
|
2323
|
+
return PE.isNetObjectPresent("Microsoft.VisualBasic");
|
|
2324
|
+
}
|
|
2325
|
+
|
|
2326
|
+
|
|
2327
|
+
|
|
2328
|
+
/**
|
|
2329
|
+
* Determines if the current file is a .NET DLL signed by Microsoft Corporation.
|
|
2330
|
+
*
|
|
2331
|
+
* @returns {boolean} True if the file meets the criteria, false otherwise.
|
|
2332
|
+
*/
|
|
2333
|
+
function isFrameworkComponent() {
|
|
2334
|
+
return PE.isNET() && PE.isDll() && PE.isSigned() && PE.findSignature(PE.getOverlayOffset(), 300, "'Microsoft Corporation'") != -1;
|
|
2335
|
+
}
|
|
2336
|
+
|
|
2337
|
+
|
|
2338
|
+
|
|
2339
|
+
/**
|
|
2340
|
+
* Validates the presence of a signature (pattern) within a specified range in a PE file.
|
|
2341
|
+
*
|
|
2342
|
+
* Searches for the given pattern starting from the DOS stub end until the PE size excluding the overlay.
|
|
2343
|
+
* Logs a message if the pattern is found and returns a boolean indicating the result.
|
|
2344
|
+
*
|
|
2345
|
+
* @param {string} pattern - The pattern to search for within the file.
|
|
2346
|
+
* @returns {boolean} True if the pattern is found, false otherwise.
|
|
2347
|
+
*/
|
|
2348
|
+
function validateSignature(pattern) {
|
|
2349
|
+
const
|
|
2350
|
+
offsetFound = PE.findSignature(PE.getDosStubOffset() + PE.getDosStubSize(), PE.getSize() - PE.getOverlaySize(), pattern),
|
|
2351
|
+
resultBool = offsetFound != -1;
|
|
2352
|
+
|
|
2353
|
+
if (resultBool) {
|
|
2354
|
+
lastOffsetDetected = "0x" + Number(offsetFound).toString(16);
|
|
2355
|
+
log(logType.any, "Pattern found: " + pattern);
|
|
2356
|
+
}
|
|
2357
|
+
return resultBool;
|
|
2358
|
+
}
|
|
2359
|
+
|
|
2360
|
+
|
|
2361
|
+
|
|
2362
|
+
/**
|
|
2363
|
+
* Searches all sections in the current PE file for the specified byte code.
|
|
2364
|
+
* If discovered, logs the offset at which it appears and returns true.
|
|
2365
|
+
*
|
|
2366
|
+
* @param {string} byteCode - The byte code signature to locate.
|
|
2367
|
+
* @returns {boolean} True if the byte code is found in any section, otherwise false.
|
|
2368
|
+
*/
|
|
2369
|
+
function validateNetByteCode(byteCode) {
|
|
2370
|
+
for (var s = 0; s < PE.getNumberOfSections(); s++) {
|
|
2371
|
+
const
|
|
2372
|
+
sectionOffset = PE.getSectionFileOffset(s),
|
|
2373
|
+
sectionSize = PE.getSectionFileSize(s);
|
|
2374
|
+
|
|
2375
|
+
var offsetFound = PE.findSignature(sectionOffset, sectionOffset + sectionSize, byteCode);
|
|
2376
|
+
if (offsetFound != -1) {
|
|
2377
|
+
lastOffsetDetected = "0x" + Number(offsetFound).toString(16);
|
|
2378
|
+
log(logType.net, "ByteCode detected: " + byteCode);
|
|
2379
|
+
return true;
|
|
2380
|
+
}
|
|
2381
|
+
}
|
|
2382
|
+
return false;
|
|
2383
|
+
}
|
|
2384
|
+
|
|
2385
|
+
|
|
2386
|
+
|
|
2387
|
+
/**
|
|
2388
|
+
* Validates if the given object is a .NET object.
|
|
2389
|
+
*
|
|
2390
|
+
* @param {Object} object - The object to be validated.
|
|
2391
|
+
* @returns {boolean} - Returns true if the object is a .NET object, otherwise false.
|
|
2392
|
+
*/
|
|
2393
|
+
function validateNetObject(object) {
|
|
2394
|
+
const result = PE.isNetObjectPresent(object);
|
|
2395
|
+
if (result) log(logType.net, "Object present: " + object);
|
|
2396
|
+
return result;
|
|
2397
|
+
}
|
|
2398
|
+
|
|
2399
|
+
|
|
2400
|
+
|
|
2401
|
+
/**
|
|
2402
|
+
* Validates if a .NET Unicode string is present in the PE file.
|
|
2403
|
+
*
|
|
2404
|
+
* @param {string} ustring - The Unicode string to validate.
|
|
2405
|
+
* @returns {boolean} - Returns true if the Unicode string is present, otherwise false.
|
|
2406
|
+
*/
|
|
2407
|
+
function validateNetUnicodeString(ustring) {
|
|
2408
|
+
const result = PE.isNetUStringPresent(ustring);
|
|
2409
|
+
if (result) log(logType.net, "String present: \"" + ustring + "\"");
|
|
2410
|
+
return result;
|
|
2411
|
+
}
|
|
2412
|
+
|
|
2413
|
+
|
|
2414
|
+
|
|
2415
|
+
/**
|
|
2416
|
+
* Validates if a given Unicode string exists within the PE file.
|
|
2417
|
+
*
|
|
2418
|
+
* This function searches for the specified Unicode string within the PE file's
|
|
2419
|
+
* memory range, excluding the DOS stub and overlay sections. If the string is
|
|
2420
|
+
* found, it logs a message indicating the presence of the string.
|
|
2421
|
+
*
|
|
2422
|
+
* @param {string} ustring - The Unicode string to search for within the PE file.
|
|
2423
|
+
* @returns {boolean} - Returns true if the Unicode string is found, otherwise false.
|
|
2424
|
+
*/
|
|
2425
|
+
function validateGlobalUnicodeString(ustring) {
|
|
2426
|
+
const result = PE.findSignature(PE.getDosStubOffset() + PE.getDosStubSize(), PE.getSize() - PE.getOverlaySize(), generateUnicodeSignatureMask(ustring)) != -1;
|
|
2427
|
+
if (result) log(logType.nothing, "Unicode string found: \"" + ustring + "\"");
|
|
2428
|
+
return result;
|
|
2429
|
+
}
|
|
2430
|
+
|
|
2431
|
+
|
|
2432
|
+
|
|
2433
|
+
/**
|
|
2434
|
+
* Generates a Unicode signature mask for the given input string.
|
|
2435
|
+
*
|
|
2436
|
+
* This function iterates through each character in the input string and appends
|
|
2437
|
+
* its Unicode representation to the output string. The first character is appended
|
|
2438
|
+
* without a prefix, while subsequent characters are prefixed with "00".
|
|
2439
|
+
*
|
|
2440
|
+
* "test" -> "'t'00'e'00's'00't'"
|
|
2441
|
+
*
|
|
2442
|
+
* @param {string} inputString - The input string for which to generate the Unicode signature mask.
|
|
2443
|
+
* @returns {string} The generated Unicode signature mask.
|
|
2444
|
+
*/
|
|
2445
|
+
function generateUnicodeSignatureMask(inputString) {
|
|
2446
|
+
var output = String();
|
|
2447
|
+
|
|
2448
|
+
// Iterate through each character in the input string
|
|
2449
|
+
for (var c = 0; c < inputString.length; c++) {
|
|
2450
|
+
// Append the Unicode representation of the character to the output
|
|
2451
|
+
output += (c != 0 ? "00" : String()) + "'" + inputString[c] + "'";
|
|
2452
|
+
}
|
|
2453
|
+
|
|
2454
|
+
// Return the generated Unicode signature mask
|
|
2455
|
+
return output;
|
|
2456
|
+
}
|
|
2457
|
+
|
|
2458
|
+
|
|
2459
|
+
|
|
2460
|
+
/**
|
|
2461
|
+
* Checks if all .NET references in the provided array are missing.
|
|
2462
|
+
*
|
|
2463
|
+
* @param {Array} references - An array of .NET references to check.
|
|
2464
|
+
* @returns {boolean} - Returns true if all .NET references are missing, otherwise false.
|
|
2465
|
+
*/
|
|
2466
|
+
function isAllNetReferencesMissing(references) {
|
|
2467
|
+
// Iterate through the array of .NET references
|
|
2468
|
+
for (var i = 0; i < references.length; i++) {
|
|
2469
|
+
// Get the current reference
|
|
2470
|
+
const ref = references[i];
|
|
2471
|
+
|
|
2472
|
+
// If the .NET object corresponding to the reference is present, return false
|
|
2473
|
+
if (PE.isNetObjectPresent(ref)) {
|
|
2474
|
+
return false;
|
|
2475
|
+
}
|
|
2476
|
+
}
|
|
2477
|
+
|
|
2478
|
+
// If all .NET references are missing, return true
|
|
2479
|
+
return true;
|
|
2480
|
+
}
|
|
2481
|
+
|
|
2482
|
+
|
|
2483
|
+
|
|
2484
|
+
/**
|
|
2485
|
+
* Checks if all .NET references are present.
|
|
2486
|
+
*
|
|
2487
|
+
* @param {Array} references - An array of .NET references to check.
|
|
2488
|
+
* @returns {boolean} - Returns true if all .NET references are present, otherwise false.
|
|
2489
|
+
*/
|
|
2490
|
+
function isAllNetReferencesPresent(references) {
|
|
2491
|
+
// Iterate through the array of .NET references
|
|
2492
|
+
for (var i = 0; i < references.length; i++) {
|
|
2493
|
+
// Get the current reference
|
|
2494
|
+
const ref = references[i];
|
|
2495
|
+
|
|
2496
|
+
// If the .NET object corresponding to the reference is not present, return false
|
|
2497
|
+
if (!PE.isNetObjectPresent(ref)) {
|
|
2498
|
+
return false;
|
|
2499
|
+
}
|
|
2500
|
+
}
|
|
2501
|
+
|
|
2502
|
+
// If all .NET references are present, return true
|
|
2503
|
+
return true;
|
|
2504
|
+
}
|
|
2505
|
+
|
|
2506
|
+
|
|
2507
|
+
|
|
2508
|
+
/**
|
|
2509
|
+
* Searches for a signature in the first section of a PE file and marks it if found.
|
|
2510
|
+
*
|
|
2511
|
+
* @param {string} sign - The signature to search for.
|
|
2512
|
+
* @param {boolean} isFullName - A flag indicating whether to append '00' to the signature.
|
|
2513
|
+
* @returns {string} - The found signature if present, otherwise an empty string.
|
|
2514
|
+
*/
|
|
2515
|
+
function findAndMark(sign, isFullName) {
|
|
2516
|
+
if (PE.isSignatureInSectionPresent(0,
|
|
2517
|
+
("00'" + sign + "'") + // 00'string
|
|
2518
|
+
(isFullName ? "00" : String()))) { // ... '00
|
|
2519
|
+
return sign;
|
|
2520
|
+
}
|
|
2521
|
+
return String();
|
|
2522
|
+
}
|
|
2523
|
+
|
|
2524
|
+
|
|
2525
|
+
|
|
2526
|
+
function scanForObfuscations_Native() {
|
|
2527
|
+
var options = String();
|
|
2528
|
+
|
|
2529
|
+
var isDetected = Boolean();
|
|
2530
|
+
|
|
2531
|
+
|
|
2532
|
+
|
|
2533
|
+
|
|
2534
|
+
// Check for section names containing forbidden characters
|
|
2535
|
+
|
|
2536
|
+
var strangeSections = false;
|
|
2537
|
+
|
|
2538
|
+
// Define forbidden characters
|
|
2539
|
+
const badSectionChars = '-=+~!@#$%^&*()"№;%:?*():;,/\\|\'`<> ';
|
|
2540
|
+
|
|
2541
|
+
// Iterate through sections and characters to check for forbidden characters
|
|
2542
|
+
for (var i = 0; i < PE.getNumberOfSections() && !strangeSections; i++) {
|
|
2543
|
+
var sectionName = PE.getSectionName(i);
|
|
2544
|
+
|
|
2545
|
+
if (sectionName.length === 0 || sectionName[0] === " ") {
|
|
2546
|
+
strangeSections = true;
|
|
2547
|
+
}
|
|
2548
|
+
|
|
2549
|
+
|
|
2550
|
+
var isIdioticMinGwSectionsPresent = false;
|
|
2551
|
+
|
|
2552
|
+
if (_isResultPresent("linker", "GNU linker ld (GNU Binutils)")) {
|
|
2553
|
+
if (PE.isSectionNamePresent(".build-id")) {
|
|
2554
|
+
isIdioticMinGwSectionsPresent = true;
|
|
2555
|
+
} else {
|
|
2556
|
+
for (var d = 1; d < 10 && !isIdioticMinGwSectionsPresent; d++) { // sections like "/5", "/2" etc
|
|
2557
|
+
if (sectionName.indexOf("/" + d) != -1) {
|
|
2558
|
+
isIdioticMinGwSectionsPresent = true;
|
|
2559
|
+
}
|
|
2560
|
+
}
|
|
2561
|
+
}
|
|
2562
|
+
}
|
|
2563
|
+
|
|
2564
|
+
if (isIdioticMinGwSectionsPresent) {
|
|
2565
|
+
strangeSections = false;
|
|
2566
|
+
break;
|
|
2567
|
+
}
|
|
2568
|
+
|
|
2569
|
+
|
|
2570
|
+
for (var d = 0; d < badSectionChars.length && !strangeSections; d++) {
|
|
2571
|
+
// If forbidden character is found, set flag and break
|
|
2572
|
+
if (sectionName.indexOf(badSectionChars[d]) !== -1) {
|
|
2573
|
+
strangeSections = true;
|
|
2574
|
+
}
|
|
2575
|
+
}
|
|
2576
|
+
|
|
2577
|
+
|
|
2578
|
+
}
|
|
2579
|
+
|
|
2580
|
+
if (strangeSections) options += (options.length != 0 ? " + " : String()) + "Strange sections";
|
|
2581
|
+
|
|
2582
|
+
|
|
2583
|
+
|
|
2584
|
+
|
|
2585
|
+
// Check for DOS header in the PE file
|
|
2586
|
+
|
|
2587
|
+
var isDosMissing = false,
|
|
2588
|
+
isCustomDosPresent = false;
|
|
2589
|
+
|
|
2590
|
+
// If DOS stub size is 0, set flag for missing DOS
|
|
2591
|
+
if (PE.getDosStubSize() === 0) {
|
|
2592
|
+
isDosMissing = true;
|
|
2593
|
+
} else {
|
|
2594
|
+
// Define messages to check for custom DOS
|
|
2595
|
+
const messages = [
|
|
2596
|
+
"This program cannot be run in DOS mode.", // most popular (standart)
|
|
2597
|
+
"This program must be run under Win32",
|
|
2598
|
+
"This program must be run under Win64",
|
|
2599
|
+
"This program requires Win32",
|
|
2600
|
+
"This is a Windows NT character-mode executable" // Watcom C/C++
|
|
2601
|
+
];
|
|
2602
|
+
|
|
2603
|
+
isCustomDosPresent = true;
|
|
2604
|
+
|
|
2605
|
+
// Iterate through messages to check for custom DOS
|
|
2606
|
+
for (var d = 0; d < messages.length && isCustomDosPresent; d++) {
|
|
2607
|
+
if (PE.findSignature(PE.getDosStubOffset(), PE.getDosStubSize(), "'" + messages[d] + "'") != -1) {
|
|
2608
|
+
isCustomDosPresent = false;
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2611
|
+
}
|
|
2612
|
+
|
|
2613
|
+
// Add appropriate option based on DOS presence
|
|
2614
|
+
if (isDosMissing) options += (options.length != 0 ? " + " : String()) + "Missing DOS";
|
|
2615
|
+
else if (isCustomDosPresent) options += (options.length != 0 ? " + " : String()) + "Custom DOS";
|
|
2616
|
+
|
|
2617
|
+
|
|
2618
|
+
|
|
2619
|
+
|
|
2620
|
+
// It works if the file contains an import without an extension (for example, instead of "kernel32.dll" it is written "kernel32").
|
|
2621
|
+
// Compilers don't do that
|
|
2622
|
+
|
|
2623
|
+
var isContainsNoExtensionLibrary = false;
|
|
2624
|
+
|
|
2625
|
+
for (var i = 0; i < PE.getNumberOfImports() && !isContainsNoExtensionLibrary; i++) {
|
|
2626
|
+
const libraryName = PE.getImportLibraryName(i).toLowerCase();
|
|
2627
|
+
|
|
2628
|
+
if (libraryName.length > 4) {
|
|
2629
|
+
if (libraryName[libraryName.length - 4] !== ".") {
|
|
2630
|
+
isContainsNoExtensionLibrary = true;
|
|
2631
|
+
}
|
|
2632
|
+
} else { /* if (libraryName.indexOf(".") === -1) */
|
|
2633
|
+
isContainsNoExtensionLibrary = true;
|
|
2634
|
+
}
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2637
|
+
if (isContainsNoExtensionLibrary) options += (options.length != 0 ? " + " : String()) + "No extension import";
|
|
2638
|
+
|
|
2639
|
+
|
|
2640
|
+
|
|
2641
|
+
|
|
2642
|
+
// .exe files in imports are a separate type of sophistication. But this happens.
|
|
2643
|
+
|
|
2644
|
+
var exeInImports = false;
|
|
2645
|
+
|
|
2646
|
+
for (var i = 0; i < PE.getNumberOfImports() && !exeInImports; i++) {
|
|
2647
|
+
const libraryName = PE.getImportLibraryName(i).toLowerCase();
|
|
2648
|
+
|
|
2649
|
+
if (libraryName.length > 4) {
|
|
2650
|
+
if (libraryName !== "ntoskrnl.exe" && libraryName.substr(libraryName.length - 4, 4) === ".exe") {
|
|
2651
|
+
exeInImports = true;
|
|
2652
|
+
}
|
|
2653
|
+
}
|
|
2654
|
+
}
|
|
2655
|
+
|
|
2656
|
+
if (exeInImports) options += (options.length != 0 ? " + " : String()) + "EXE in imports";
|
|
2657
|
+
|
|
2658
|
+
|
|
2659
|
+
|
|
2660
|
+
|
|
2661
|
+
// Looks for sections whose names contain strange (or invalid) characters
|
|
2662
|
+
|
|
2663
|
+
var isInvalidImportsPresent = false;
|
|
2664
|
+
|
|
2665
|
+
const badImportChars = '=~!@#$%^&*()"№;%:?*():;,|\'`<> ';
|
|
2666
|
+
|
|
2667
|
+
for (var i = 0; i < PE.getNumberOfImports() && !isInvalidImportsPresent; i++) {
|
|
2668
|
+
const libraryName = PE.getImportLibraryName(i).toLowerCase();
|
|
2669
|
+
|
|
2670
|
+
for (var l = 0; l < badImportChars.length && !isInvalidImportsPresent; l++) {
|
|
2671
|
+
if (libraryName.indexOf(badImportChars[l]) !== -1) {
|
|
2672
|
+
isInvalidImportsPresent = true;
|
|
2673
|
+
}
|
|
2674
|
+
}
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2677
|
+
if (isInvalidImportsPresent) options += (options.length != 0 ? " + " : String()) + "Invalid imports";
|
|
2678
|
+
|
|
2679
|
+
|
|
2680
|
+
|
|
2681
|
+
|
|
2682
|
+
// Checks if application resources can be read or if they are compressed/encrypted
|
|
2683
|
+
|
|
2684
|
+
var isUnreadableResourcesPresent = false;
|
|
2685
|
+
|
|
2686
|
+
for (var i = 0; i < PE.getNumberOfResources() && !isUnreadableResourcesPresent; i++) {
|
|
2687
|
+
if (PE.getResourceOffsetByNumber(i) === -1)
|
|
2688
|
+
isUnreadableResourcesPresent = true;
|
|
2689
|
+
}
|
|
2690
|
+
|
|
2691
|
+
if (isUnreadableResourcesPresent) options += (options.length != 0 ? " + " : String()) + "Unreadable resources";
|
|
2692
|
+
|
|
2693
|
+
|
|
2694
|
+
|
|
2695
|
+
/*
|
|
2696
|
+
var isCheckSumEmpty = false;
|
|
2697
|
+
|
|
2698
|
+
if (PE.getImageOptionalHeader("CheckSum") == 0) {
|
|
2699
|
+
log(logType.any, "IMAGE_OPTIONAL_HEADER : CheckSum == 0");
|
|
2700
|
+
isCheckSumEmpty = true;
|
|
2701
|
+
}
|
|
2702
|
+
|
|
2703
|
+
if (isCheckSumEmpty) options += (options.length != 0 ? " + " : String()) + "No checksum";
|
|
2704
|
+
|
|
2705
|
+
|
|
2706
|
+
|
|
2707
|
+
|
|
2708
|
+
// False-positive detections; Todo: fix
|
|
2709
|
+
var aLotOfBreaks = false;
|
|
2710
|
+
|
|
2711
|
+
const codeSection = PE.section[".text"];
|
|
2712
|
+
|
|
2713
|
+
if (codeSection && PE.isSignaturePresent(codeSection.FileOffset, codeSection.FileSize, "CC CC CC CC CC CC CC CC CC CC CC CC CC")) { // ret (c3); int 3 (cc)
|
|
2714
|
+
aLotOfBreaks = true;
|
|
2715
|
+
}
|
|
2716
|
+
|
|
2717
|
+
if (aLotOfBreaks) options += (options.length != 0 ? " + " : String()) + "A lot of \"__debugbreak()\"";
|
|
2718
|
+
*/
|
|
2719
|
+
|
|
2720
|
+
|
|
2721
|
+
|
|
2722
|
+
|
|
2723
|
+
// Checks is executable application has been compiled or converted to a DLL
|
|
2724
|
+
// Like https://github.com/hasherezade/exe_to_dll
|
|
2725
|
+
|
|
2726
|
+
var exeAsDll = false;
|
|
2727
|
+
|
|
2728
|
+
if (PE.isDll() && (
|
|
2729
|
+
PE.isExportFunctionPresent("Start") ||
|
|
2730
|
+
PE.isExportFunctionPresent("main") ||
|
|
2731
|
+
PE.isExportFunctionPresent("_start"))) {
|
|
2732
|
+
exeAsDll = true;
|
|
2733
|
+
}
|
|
2734
|
+
|
|
2735
|
+
if (exeAsDll) options += (options.length != 0 ? " + " : String()) + "EXE as DLL";
|
|
2736
|
+
|
|
2737
|
+
|
|
2738
|
+
|
|
2739
|
+
|
|
2740
|
+
// The .text section should always come first
|
|
2741
|
+
|
|
2742
|
+
var isTextSectionNotFirst = false;
|
|
2743
|
+
|
|
2744
|
+
if ((PE.section[0].Name != ".text" && PE.section[0].Name != ".textbss") && (PE.section[".text"] && PE.section[".textbss"])) {
|
|
2745
|
+
isTextSectionNotFirst = true;
|
|
2746
|
+
}
|
|
2747
|
+
|
|
2748
|
+
if (isTextSectionNotFirst) options += (options.length != 0 ? " + " : String()) + "\".text\" section is not first";
|
|
2749
|
+
|
|
2750
|
+
|
|
2751
|
+
|
|
2752
|
+
|
|
2753
|
+
// If IAT (Import Address Table) is missing
|
|
2754
|
+
|
|
2755
|
+
var isIatMissing = false;
|
|
2756
|
+
|
|
2757
|
+
if (PE.getNumberOfImports() == 0 &&
|
|
2758
|
+
(!PE.isDll() && PE.section[".text"])) {
|
|
2759
|
+
isIatMissing = true;
|
|
2760
|
+
}
|
|
2761
|
+
|
|
2762
|
+
if (isIatMissing) options += (options.length != 0 ? " + " : String()) + "No IAT";
|
|
2763
|
+
|
|
2764
|
+
|
|
2765
|
+
|
|
2766
|
+
|
|
2767
|
+
// Check if the entry point starts with NOP
|
|
2768
|
+
|
|
2769
|
+
var isStartsWithNop = false;
|
|
2770
|
+
|
|
2771
|
+
// Condition to check if the first instruction is NOP
|
|
2772
|
+
if (getFirstEpAsmInstruction() === "NOP") { // nop (90)
|
|
2773
|
+
isStartsWithNop = true;
|
|
2774
|
+
}
|
|
2775
|
+
|
|
2776
|
+
if (isStartsWithNop) options += (options.length != 0 ? " + " : String()) + "Nop at EP";
|
|
2777
|
+
|
|
2778
|
+
|
|
2779
|
+
|
|
2780
|
+
// A lot of bugs! Todo.
|
|
2781
|
+
/*
|
|
2782
|
+
// Example:
|
|
2783
|
+
// xor eax, eax
|
|
2784
|
+
// je $+1
|
|
2785
|
+
var isBreakerDetected = false;
|
|
2786
|
+
|
|
2787
|
+
//
|
|
2788
|
+
// 0: 31 c0 | xor eax, eax
|
|
2789
|
+
// 1: 31 db | xor ebx, ebx
|
|
2790
|
+
// 2: 31 c9 | xor ecx, ecx
|
|
2791
|
+
// 3: 31 d2 | xor edx, edx
|
|
2792
|
+
// 4: 31 f6 | xor esi, esi
|
|
2793
|
+
// 5: 31 ff | xor edi, edi
|
|
2794
|
+
// 6: 31 ed | xor ebp, ebp
|
|
2795
|
+
// 7: 31 e4 | xor esp, esp
|
|
2796
|
+
//
|
|
2797
|
+
const xorPatterns_x86 = [
|
|
2798
|
+
"c0", "db", "c9", "d2", "f6", "ff", "ed", "e4"
|
|
2799
|
+
];
|
|
2800
|
+
|
|
2801
|
+
for (var i = 0; i < xorPatterns_x86.length && !isBreakerDetected; i++) {
|
|
2802
|
+
const foundOffset = PE.findSignature(0x00, PE.getSize() - PE.getOverlaySize(), "31 " + xorPatterns_x86[i] + "0F84......00"); // ... je $+[*] ...
|
|
2803
|
+
|
|
2804
|
+
if (foundOffset !== -1 && !PE.compare("%% %% %% %% %% %% %%", foundOffset - 7)) {
|
|
2805
|
+
isBreakerDetected = true;
|
|
2806
|
+
}
|
|
2807
|
+
}
|
|
2808
|
+
|
|
2809
|
+
if (isBreakerDetected) options += (options.length != 0 ? " + " : String()) + "Anti-Decompile";
|
|
2810
|
+
*/
|
|
2811
|
+
|
|
2812
|
+
|
|
2813
|
+
|
|
2814
|
+
|
|
2815
|
+
// Check if NOP padding is present at the entry point
|
|
2816
|
+
|
|
2817
|
+
var isNopPaddingPresent = false;
|
|
2818
|
+
|
|
2819
|
+
// Condition to check for NOP padding
|
|
2820
|
+
if (!isStartsWithNop && getEpAsmPattern(onlyOpCodes = true, numberOf = 5).indexOf(getInstructionsAsmPattern(["NOP", "NOP"])) !== -1) {
|
|
2821
|
+
isNopPaddingPresent = true;
|
|
2822
|
+
}
|
|
2823
|
+
|
|
2824
|
+
if (isNopPaddingPresent) options += (options.length != 0 ? " + " : String()) + "Nop EP padding";
|
|
2825
|
+
|
|
2826
|
+
|
|
2827
|
+
|
|
2828
|
+
|
|
2829
|
+
// ASM Guard fake signatures
|
|
2830
|
+
|
|
2831
|
+
if (PE.isSectionNamePresent(".asmg") || PE.isSectionNamePresent("ASMGUARD")) {
|
|
2832
|
+
for (var f = 0; f < 3; f++)
|
|
2833
|
+
_removeResult("packer", ["UPX", "MPRESS", "EP:MPRESS"][f]);
|
|
2834
|
+
}
|
|
2835
|
+
|
|
2836
|
+
|
|
2837
|
+
|
|
2838
|
+
|
|
2839
|
+
if (options.length != 0) isDetected = true;
|
|
2840
|
+
|
|
2841
|
+
|
|
2842
|
+
if (isDetected) {
|
|
2843
|
+
_setResult("~protection", "Generic", String(), PE.isVerbose() ? options : String());
|
|
2844
|
+
}
|
|
2845
|
+
}
|
|
2846
|
+
|
|
2847
|
+
|
|
2848
|
+
|
|
2849
|
+
const _patternSplitter = "|";
|
|
2850
|
+
|
|
2851
|
+
/**
|
|
2852
|
+
* Generates a pattern of assembly instructions or opcodes from the entry point.
|
|
2853
|
+
*
|
|
2854
|
+
* @param {boolean} onlyOpCodes - If true, only the opcodes of the instructions are included in the pattern.
|
|
2855
|
+
* @param {number} numberOf - The number of instructions to include in the pattern.
|
|
2856
|
+
* @returns {string} The generated assembly pattern.
|
|
2857
|
+
*/
|
|
2858
|
+
function getEpAsmPattern(onlyOpCodes, numberOf) {
|
|
2859
|
+
// Initialize the result with a pattern splitter
|
|
2860
|
+
var result = _patternSplitter;
|
|
2861
|
+
|
|
2862
|
+
// Get the address of the entry point
|
|
2863
|
+
var disasmAddress = PE.getAddressOfEntryPoint();
|
|
2864
|
+
|
|
2865
|
+
// Iterate through instructions up to the specified number
|
|
2866
|
+
for (var i = 0; i < numberOf; i++) {
|
|
2867
|
+
|
|
2868
|
+
// Update the address to the next instruction if not the first iteration
|
|
2869
|
+
if (i >= 1) {
|
|
2870
|
+
disasmAddress = PE.getDisasmNextAddress(disasmAddress);
|
|
2871
|
+
}
|
|
2872
|
+
|
|
2873
|
+
// Get the assembly instruction at the current address
|
|
2874
|
+
const asmInstruction = PE.getDisasmString(disasmAddress);
|
|
2875
|
+
|
|
2876
|
+
// Append either the opcode or the full instruction to the result
|
|
2877
|
+
result += (
|
|
2878
|
+
onlyOpCodes ?
|
|
2879
|
+
getAsmOpCode(asmInstruction) : // "MOV"
|
|
2880
|
+
asmInstruction // "MOV EAX, 4"
|
|
2881
|
+
) + _patternSplitter;
|
|
2882
|
+
}
|
|
2883
|
+
|
|
2884
|
+
// Return the generated assembly pattern
|
|
2885
|
+
return result;
|
|
2886
|
+
}
|
|
2887
|
+
|
|
2888
|
+
|
|
2889
|
+
|
|
2890
|
+
/**
|
|
2891
|
+
* Retrieves the assembly instruction at the specified index from the entry point of a PE file.
|
|
2892
|
+
*
|
|
2893
|
+
* @param {number} index - The index of the assembly instruction to retrieve.
|
|
2894
|
+
* @returns {string} The assembly instruction at the specified index.
|
|
2895
|
+
*/
|
|
2896
|
+
function getAsmInstructionByIndex(index) {
|
|
2897
|
+
// Get the address of the entry point
|
|
2898
|
+
var disasmAddress = PE.getAddressOfEntryPoint();
|
|
2899
|
+
|
|
2900
|
+
// Iterate through instructions until the specified index is reached
|
|
2901
|
+
for (var i = 0; i <= index; i++) {
|
|
2902
|
+
|
|
2903
|
+
// Update the address to the next instruction if not the first iteration
|
|
2904
|
+
if (i >= 1) {
|
|
2905
|
+
disasmAddress = PE.getDisasmNextAddress(disasmAddress);
|
|
2906
|
+
}
|
|
2907
|
+
|
|
2908
|
+
// If the current iteration matches the specified index, retrieve the instruction
|
|
2909
|
+
if (i === index) {
|
|
2910
|
+
const asmInstruction = PE.getDisasmString(disasmAddress);
|
|
2911
|
+
|
|
2912
|
+
// Return the assembly instruction
|
|
2913
|
+
return asmInstruction;
|
|
2914
|
+
}
|
|
2915
|
+
}
|
|
2916
|
+
}
|
|
2917
|
+
|
|
2918
|
+
|
|
2919
|
+
|
|
2920
|
+
/**
|
|
2921
|
+
* Generates a subpattern string to search for instructions within a pattern divided by a separator.
|
|
2922
|
+
*
|
|
2923
|
+
* This function allows you to create a subpattern that can be used to search for specific instructions
|
|
2924
|
+
* within a larger pattern string that is divided by a separator (_patternSplitter).
|
|
2925
|
+
*
|
|
2926
|
+
* Examples:
|
|
2927
|
+
* - "|OPCODE1|OPCODE2|OPCODE3|".indexOf("|OPCODE2|")
|
|
2928
|
+
* - "|OPCODE1|OPCODE2|OPCODE3|".indexOf(getInstructionsAsmPattern("OPCODE2"))
|
|
2929
|
+
* - "|OPCODE1|OPCODE2|OPCODE3|".indexOf("|OPCODE2|OPCODE3|")
|
|
2930
|
+
* - "|OPCODE1|OPCODE2|OPCODE3|".indexOf(getInstructionsAsmPattern(["OPCODE2", "OPCODE3"]))
|
|
2931
|
+
*
|
|
2932
|
+
* @param {string|string[]} instruction - The instruction or array of instructions to create the subpattern for.
|
|
2933
|
+
* @returns {string} The generated subpattern string.
|
|
2934
|
+
*/
|
|
2935
|
+
function getInstructionsAsmPattern(instruction) {
|
|
2936
|
+
return _patternSplitter +
|
|
2937
|
+
(
|
|
2938
|
+
Array.isArray(instruction) ?
|
|
2939
|
+
instruction.join(_patternSplitter) :
|
|
2940
|
+
instruction
|
|
2941
|
+
) +
|
|
2942
|
+
_patternSplitter;
|
|
2943
|
+
}
|
|
2944
|
+
|
|
2945
|
+
|
|
2946
|
+
|
|
2947
|
+
/**
|
|
2948
|
+
* Retrieves the first assembly instruction at the entry point of the PE file.
|
|
2949
|
+
*
|
|
2950
|
+
* @returns {string} The disassembled string of the first instruction at the entry point.
|
|
2951
|
+
*/
|
|
2952
|
+
function getFirstEpAsmInstruction() {
|
|
2953
|
+
return PE.getDisasmString(PE.OffsetToVA(PE.getEntryPointOffset()));
|
|
2954
|
+
}
|
|
2955
|
+
|
|
2956
|
+
|
|
2957
|
+
|
|
2958
|
+
/**
|
|
2959
|
+
* Extracts the opcode from an assembly instruction.
|
|
2960
|
+
*
|
|
2961
|
+
* @param {string} instruction - The assembly instruction.
|
|
2962
|
+
* @returns {string} - The opcode of the instruction.
|
|
2963
|
+
*/
|
|
2964
|
+
function getAsmOpCode(instruction) {
|
|
2965
|
+
return instruction.indexOf(" ") !== -1 ? instruction.split(" ")[0] : instruction;
|
|
2966
|
+
}
|
|
2967
|
+
|
|
2968
|
+
|
|
2969
|
+
|
|
2970
|
+
/**
|
|
2971
|
+
* Retrieves the first assembly operation code from the entry point of the executable.
|
|
2972
|
+
*
|
|
2973
|
+
* @returns {string} The assembly operation code of the first instruction at the entry point.
|
|
2974
|
+
*/
|
|
2975
|
+
function getFirstEpAsmOpCode() {
|
|
2976
|
+
return getAsmOpCode(getFirstEpAsmInstruction());
|
|
2977
|
+
}
|
|
2978
|
+
|
|
2979
|
+
|
|
2980
|
+
|
|
2981
|
+
/**
|
|
2982
|
+
* Checks if a given function name pattern is mangled.
|
|
2983
|
+
*
|
|
2984
|
+
* This function determines if a function name pattern is mangled by checking
|
|
2985
|
+
* specific characteristics of the pattern. It supports detection for both
|
|
2986
|
+
* Microsoft Visual C++ (MSVCPP) and GNU C++ (GNUCPP) mangled names.
|
|
2987
|
+
*
|
|
2988
|
+
* Examples:
|
|
2989
|
+
* - MSVCPP: ??0_Lockit@std@@QEAA@H@Z
|
|
2990
|
+
* - GNUCPP: _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
|
|
2991
|
+
*
|
|
2992
|
+
* @param {string} functionPattern - The function name pattern to check.
|
|
2993
|
+
* @returns {boolean} - Returns true if the function name pattern is mangled, otherwise false.
|
|
2994
|
+
*/
|
|
2995
|
+
function isFunctionMangled(functionPattern) {
|
|
2996
|
+
return functionPattern.length > 5 && (
|
|
2997
|
+
(functionPattern[0] == '?' && functionPattern.indexOf("@@") !== -1) || // MSVCPP mangler
|
|
2998
|
+
(functionPattern.substring(0, 4) == "_ZSt") // GNUCPP mangler
|
|
2999
|
+
);
|
|
3000
|
+
}
|
|
3001
|
+
|
|
3002
|
+
|
|
3003
|
+
|
|
3004
|
+
/**
|
|
3005
|
+
* Extracts the name of a mangled function from a given function pattern.
|
|
3006
|
+
*
|
|
3007
|
+
* @param {string} functionPattern - The mangled function pattern to analyze.
|
|
3008
|
+
* @returns {string} - The extracted function name if the pattern is recognized as mangled, otherwise returns the original pattern.
|
|
3009
|
+
*/
|
|
3010
|
+
function getNameOfMangledFunction(functionPattern) {
|
|
3011
|
+
if (isFunctionMangled(functionPattern)) {
|
|
3012
|
+
if (functionPattern[0] === '?' && functionPattern[1] !== '?') {
|
|
3013
|
+
|
|
3014
|
+
// MSVCPP mangler (e.g., ??0_Lockit@std@@QEAA@H@Z)
|
|
3015
|
+
return functionPattern.split("?")[1].split("@")[0];
|
|
3016
|
+
|
|
3017
|
+
} else if (functionPattern[0] === '?' && functionPattern[1] === '?' && functionPattern[3] === '?' && functionPattern[4] === '$') {
|
|
3018
|
+
|
|
3019
|
+
// MSVCPP mangler (e.g., ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ)
|
|
3020
|
+
return functionPattern.split("$")[1].split("@")[0];
|
|
3021
|
+
|
|
3022
|
+
} else if (functionPattern[0] === '?' && functionPattern[1] === '?' && functionPattern[2] === '_') {
|
|
3023
|
+
// MSVCPP mangler (e.g., ??_7_Facet_base@std@@6B@)
|
|
3024
|
+
var functionName = functionPattern.split("?")[2].split("@")[0];
|
|
3025
|
+
|
|
3026
|
+
functionName = functionName.substring(2, functionName.length);
|
|
3027
|
+
return functionName;
|
|
3028
|
+
|
|
3029
|
+
} else if (functionPattern[0] === '?' && functionPattern[1] === '?') {
|
|
3030
|
+
|
|
3031
|
+
// MSVCPP mangler
|
|
3032
|
+
var functionName = functionPattern.split("?")[2].split("@")[0];
|
|
3033
|
+
functionName = functionName.substring(1, functionName.length); // first char is a number
|
|
3034
|
+
return functionName;
|
|
3035
|
+
|
|
3036
|
+
} else if (functionPattern[0] === '_') {
|
|
3037
|
+
|
|
3038
|
+
// GNUCPP mangler (e.g., _ZSt12functionName)
|
|
3039
|
+
var match = functionPattern.match(/_ZSt(\d+)(\w+)/);
|
|
3040
|
+
if (match) {
|
|
3041
|
+
return match[2].substring(0, parseInt(match[1], 10));
|
|
3042
|
+
} else {
|
|
3043
|
+
return functionPattern;
|
|
3044
|
+
}
|
|
3045
|
+
|
|
3046
|
+
}
|
|
3047
|
+
} else {
|
|
3048
|
+
return functionPattern;
|
|
3049
|
+
}
|
|
3050
|
+
}
|
|
3051
|
+
|
|
3052
|
+
|
|
3053
|
+
|
|
3054
|
+
/**
|
|
3055
|
+
* Validates import hashes in a given database collection.
|
|
3056
|
+
*
|
|
3057
|
+
* @param {Array} dbCollection - The database collection to validate. Each element in the collection is expected to be an array with the following structure:
|
|
3058
|
+
* [name, version, position, hash]
|
|
3059
|
+
* - name {string}: The name of the import.
|
|
3060
|
+
* - version {string}: The version of the import.
|
|
3061
|
+
* - position {number}: The position of the import.
|
|
3062
|
+
* - hash {string}: The hash of the import.
|
|
3063
|
+
* @returns {Array|null} The first array pattern that has a matching import position and hash, or null if no match is found.
|
|
3064
|
+
*/
|
|
3065
|
+
function validateImportHashes(dbCollection) {
|
|
3066
|
+
for (var i = 0; i < dbCollection.length; i++) {
|
|
3067
|
+
const
|
|
3068
|
+
currentIndex = i,
|
|
3069
|
+
currentArrayPattern = dbCollection[currentIndex];
|
|
3070
|
+
|
|
3071
|
+
const
|
|
3072
|
+
name = currentArrayPattern[0],
|
|
3073
|
+
version = currentArrayPattern[1],
|
|
3074
|
+
position = currentArrayPattern[2],
|
|
3075
|
+
hash = currentArrayPattern[3];
|
|
3076
|
+
|
|
3077
|
+
if (PE.isImportPositionHashPresent(position, hash)) {
|
|
3078
|
+
return currentArrayPattern;
|
|
3079
|
+
}
|
|
3080
|
+
}
|
|
3081
|
+
|
|
3082
|
+
return null;
|
|
3083
|
+
}
|
|
3084
|
+
|
|
3085
|
+
|
|
3086
|
+
|
|
3087
|
+
/**
|
|
3088
|
+
* Validates section names in a given database collection.
|
|
3089
|
+
*
|
|
3090
|
+
* Iterates through the provided database collection and checks if the section name
|
|
3091
|
+
* is present using the PE.isSectionNamePresent function. If a section name is found,
|
|
3092
|
+
* it returns the corresponding array pattern. If no section name is found, it returns null.
|
|
3093
|
+
*
|
|
3094
|
+
* @param {Array} dbCollection - The database collection to validate, where each element is an array pattern.
|
|
3095
|
+
* @param {string} dbCollection[].0 - The name in the array pattern.
|
|
3096
|
+
* @param {string} dbCollection[].1 - The version in the array pattern.
|
|
3097
|
+
* @param {string} dbCollection[].2 - The section name in the array pattern.
|
|
3098
|
+
* @returns {Array|null} The array pattern with the valid section name, or null if no valid section name is found.
|
|
3099
|
+
*/
|
|
3100
|
+
function validateSectionNames(dbCollection) {
|
|
3101
|
+
for (var i = 0; i < dbCollection.length; i++) {
|
|
3102
|
+
const
|
|
3103
|
+
currentIndex = i,
|
|
3104
|
+
currentArrayPattern = dbCollection[currentIndex];
|
|
3105
|
+
|
|
3106
|
+
const
|
|
3107
|
+
name = currentArrayPattern[0],
|
|
3108
|
+
version = currentArrayPattern[1],
|
|
3109
|
+
sectionName = currentArrayPattern[2];
|
|
3110
|
+
|
|
3111
|
+
if (PE.isSectionNamePresent(sectionName)) {
|
|
3112
|
+
return currentArrayPattern;
|
|
3113
|
+
}
|
|
3114
|
+
}
|
|
3115
|
+
|
|
3116
|
+
return null;
|
|
3117
|
+
}
|
|
3118
|
+
|
|
3119
|
+
|
|
3120
|
+
|
|
3121
|
+
function scanForLanguages_NET_and_Native() {
|
|
3122
|
+
log(logType.nothing, "Scanning to programming language has started!");
|
|
3123
|
+
|
|
3124
|
+
var c_cpp = _isLangPresent("C/C++"); // Unknown; C or C++
|
|
3125
|
+
|
|
3126
|
+
const extdb = [
|
|
3127
|
+
["C++", "cpp"],
|
|
3128
|
+
["Rust", "rs"],
|
|
3129
|
+
["Java", "class"],
|
|
3130
|
+
["JavaScript", "js"],
|
|
3131
|
+
["Python", "pyd"],
|
|
3132
|
+
["PureBasic", "pb"]
|
|
3133
|
+
];
|
|
3134
|
+
|
|
3135
|
+
|
|
3136
|
+
for (var i = 0; i < extdb.length; i++) {
|
|
3137
|
+
const
|
|
3138
|
+
langName = extdb[i][0],
|
|
3139
|
+
langExtName = extdb[i][1];
|
|
3140
|
+
|
|
3141
|
+
if (PE.isSignaturePresent(0x00, PE.getSize(), "%% %% %% %% %% %% %% %% '." + langExtName + "' 00 00")) {
|
|
3142
|
+
log(logType.any, "Lines of ." + langExtName + " files (" + langName + ") detected");
|
|
3143
|
+
_setLangByHeur(langName);
|
|
3144
|
+
}
|
|
3145
|
+
}
|
|
3146
|
+
|
|
3147
|
+
|
|
3148
|
+
if (!_isLangDetected("C++") && PE.isSignaturePresent(0x00, PE.getSize(), "%% %% %% %% %% %% %% %% %% %% '.c' 00")) {
|
|
3149
|
+
log(logType.any, "Lines of .c files (C) detected (not a C++)");
|
|
3150
|
+
_setLangByHeur("C");
|
|
3151
|
+
}
|
|
3152
|
+
|
|
3153
|
+
|
|
3154
|
+
for (var i = 0; i < PE.getNumberOfResources(); i++) {
|
|
3155
|
+
var resourceOffset = PE.getResourceOffsetByNumber(i);
|
|
3156
|
+
|
|
3157
|
+
if (resourceOffset !== -1) {
|
|
3158
|
+
var resourceSignature = PE.getString(resourceOffset, 0x40);
|
|
3159
|
+
|
|
3160
|
+
if (resourceSignature.split(" ")[0] === "object" && resourceSignature.indexOf(": ") !== -1) {
|
|
3161
|
+
_setLangByHeur("Object Pascal");
|
|
3162
|
+
break;
|
|
3163
|
+
}
|
|
3164
|
+
}
|
|
3165
|
+
}
|
|
3166
|
+
|
|
3167
|
+
|
|
3168
|
+
if (!_getNumberOfResults("protector") &&
|
|
3169
|
+
!_getNumberOfResults("cryptor") &&
|
|
3170
|
+
!_getNumberOfResults("~cryptor")
|
|
3171
|
+
) {
|
|
3172
|
+
|
|
3173
|
+
var isPpLibraryPresent = false,
|
|
3174
|
+
isCLibraryPresent = false;
|
|
3175
|
+
|
|
3176
|
+
for (var i = 0; i < PE.getNumberOfImports(); i++) {
|
|
3177
|
+
const libraryName = PE.getImportLibraryName(i).toLowerCase();
|
|
3178
|
+
|
|
3179
|
+
// Detect mangler
|
|
3180
|
+
for (var k = 0; k < PE.getNumberOfImportThunks(i); k++) {
|
|
3181
|
+
const functionName = PE.getImportFunctionName(i, k); // import, thunk
|
|
3182
|
+
|
|
3183
|
+
if (!isPpLibraryPresent && isFunctionMangled(functionName)) {
|
|
3184
|
+
log(logType.any, "Mangler detected -> \"" + libraryName + "\", at function \"" + getNameOfMangledFunction(functionName) + "\"");
|
|
3185
|
+
|
|
3186
|
+
|
|
3187
|
+
if (!_getNumberOfResults("compiler") && !_getNumberOfResults("~compiler")) {
|
|
3188
|
+
if (functionName[0] == '_') {
|
|
3189
|
+
_setResult("~compiler", "MinGW", String(), String());
|
|
3190
|
+
} else if (functionName[0] == '?') {
|
|
3191
|
+
_setResult("~compiler", "Microsoft Visual C/C++", String(), String());
|
|
3192
|
+
}
|
|
3193
|
+
}
|
|
3194
|
+
|
|
3195
|
+
// if (!_isLangDetected())
|
|
3196
|
+
isPpLibraryPresent = true; // if language is unknown
|
|
3197
|
+
}
|
|
3198
|
+
}
|
|
3199
|
+
|
|
3200
|
+
|
|
3201
|
+
|
|
3202
|
+
if (libraryName.indexOf("msvcr") !== -1) {
|
|
3203
|
+
log(logType.any, "C library present -> \"" + libraryName + "\"");
|
|
3204
|
+
isCLibraryPresent = true;
|
|
3205
|
+
}
|
|
3206
|
+
|
|
3207
|
+
if (
|
|
3208
|
+
libraryName.indexOf("++") !== -1 ||
|
|
3209
|
+
libraryName.indexOf("cpp") !== -1 ||
|
|
3210
|
+
libraryName.indexOf("msvcp") !== -1
|
|
3211
|
+
) {
|
|
3212
|
+
log(logType.any, "C++ library present -> \"" + libraryName + "\"");
|
|
3213
|
+
isPpLibraryPresent = true;
|
|
3214
|
+
}
|
|
3215
|
+
}
|
|
3216
|
+
|
|
3217
|
+
|
|
3218
|
+
|
|
3219
|
+
|
|
3220
|
+
const rdataSection = PE.section[".rdata"];
|
|
3221
|
+
|
|
3222
|
+
if (rdataSection) {
|
|
3223
|
+
if (c_cpp && // if C/C++ detected by DIE
|
|
3224
|
+
PE.isSignaturePresent(
|
|
3225
|
+
rdataSection.FileOffset,
|
|
3226
|
+
rdataSection.FileSize,
|
|
3227
|
+
generateUnicodeSignatureMask("Visual C++"))) {
|
|
3228
|
+
|
|
3229
|
+
log(logType.any, "Embedded Visual C++ Runtime detected.");
|
|
3230
|
+
isPpLibraryPresent = true; // Visual C++ Runtime library in resources
|
|
3231
|
+
}
|
|
3232
|
+
}
|
|
3233
|
+
|
|
3234
|
+
|
|
3235
|
+
if (isPpLibraryPresent || (c_cpp && PE.isSignaturePresent(0x00, PE.getSize() - PE.getOverlaySize(), "' C++ '"))) {
|
|
3236
|
+
_setLangByHeur("C++");
|
|
3237
|
+
} else if (!_isLangPresent("C++") && isCLibraryPresent && (PE.isFunctionPresent("_iob") || PE.isFunctionPresent("printf") || PE.isFunctionPresent("malloc") || PE.isFunctionPresent("memset"))) {
|
|
3238
|
+
_setLangByHeur("C");
|
|
3239
|
+
} else if (PE.isLibraryPresentExp(/^api-ms-win-crt*/i) || PE.section[".msvcjmc"]) {
|
|
3240
|
+
_setLangByHeur("C/C++");
|
|
3241
|
+
} else if (!_isLangDetected() && !_getNumberOfResults("compiler") && !PE.isNET()) {
|
|
3242
|
+
_setLangByHeur("ASMx" + (PE.is64() ? "64" : "86"));
|
|
3243
|
+
}
|
|
3244
|
+
}
|
|
3245
|
+
}
|
|
3246
|
+
|
|
3247
|
+
|
|
3248
|
+
|
|
3249
|
+
/**
|
|
3250
|
+
* Sets the language based on heuristic analysis.
|
|
3251
|
+
*
|
|
3252
|
+
* @param {string} languageName - The name of the detected language.
|
|
3253
|
+
*/
|
|
3254
|
+
function _setLangByHeur(languageName) {
|
|
3255
|
+
log(logType.any, languageName + " language detected!");
|
|
3256
|
+
_setLang(languageName, true, heurLabel);
|
|
3257
|
+
}
|
|
3258
|
+
|
|
3259
|
+
|
|
3260
|
+
|
|
3261
|
+
/**
|
|
3262
|
+
* Logs a message with a specific type and text.
|
|
3263
|
+
*
|
|
3264
|
+
* @param {number} messageTypeId - The type of the message.
|
|
3265
|
+
* -2: Error,
|
|
3266
|
+
* -1: About,
|
|
3267
|
+
* 1: Any,
|
|
3268
|
+
* 2: .NET.
|
|
3269
|
+
* @param {string} messageText - The text of the message to log.
|
|
3270
|
+
* Must not contain newline characters.
|
|
3271
|
+
* @throws Will throw an error if the messageText contains a newline character.
|
|
3272
|
+
*/
|
|
3273
|
+
function log(messageTypeId, messageText) {
|
|
3274
|
+
if (!messageText) {
|
|
3275
|
+
return;
|
|
3276
|
+
} else if (messageText.indexOf("\n") != -1) {
|
|
3277
|
+
_error("Illegal char at log( ... )");
|
|
3278
|
+
}
|
|
3279
|
+
|
|
3280
|
+
var prefix = String();
|
|
3281
|
+
|
|
3282
|
+
if (messageTypeId !== -2) {
|
|
3283
|
+
prefix = heurLabel;
|
|
3284
|
+
}
|
|
3285
|
+
|
|
3286
|
+
if (messageTypeId > -2 && messageTypeId !== 0) {
|
|
3287
|
+
prefix += "/";
|
|
3288
|
+
}
|
|
3289
|
+
|
|
3290
|
+
switch (messageTypeId) {
|
|
3291
|
+
case -2:
|
|
3292
|
+
prefix = "!";
|
|
3293
|
+
break;
|
|
3294
|
+
case -1:
|
|
3295
|
+
prefix += "About";
|
|
3296
|
+
break;
|
|
3297
|
+
case 1:
|
|
3298
|
+
prefix += "Any";
|
|
3299
|
+
break;
|
|
3300
|
+
case 2:
|
|
3301
|
+
prefix += ".NET";
|
|
3302
|
+
break;
|
|
3303
|
+
}
|
|
3304
|
+
|
|
3305
|
+
if (typeof _log !== "undefined") {
|
|
3306
|
+
_log("[" + prefix + "] " + messageText);
|
|
3307
|
+
} else {
|
|
3308
|
+
_error("Unable to write log message");
|
|
3309
|
+
}
|
|
3310
|
+
}
|
|
3311
|
+
|
|
3312
|
+
|
|
3313
|
+
|
|
3314
|
+
// ALPHA v0.01
|
|
3315
|
+
// The module is disabled and does not work
|
|
3316
|
+
// You can write this yourself if you want.
|
|
3317
|
+
|
|
3318
|
+
function scanForMaciliousCode_NET_and_Native() {
|
|
3319
|
+
|
|
3320
|
+
var _CriticalProc_ntdll = false;
|
|
3321
|
+
|
|
3322
|
+
if (validateSignature("'RtlSetProcessIsCritical'")) {
|
|
3323
|
+
_CriticalProc_ntdll = true;
|
|
3324
|
+
}
|
|
3325
|
+
|
|
3326
|
+
if (_CriticalProc_ntdll) heurAvSetResult("CriticalProc_ntdll", 8);
|
|
3327
|
+
|
|
3328
|
+
|
|
3329
|
+
|
|
3330
|
+
|
|
3331
|
+
var _TakeScreenshot = false;
|
|
3332
|
+
|
|
3333
|
+
if (PE.isNET()) {
|
|
3334
|
+
if (validateNetObject("BitBlt") || validateNetObject("GetDC")) {
|
|
3335
|
+
_TakeScreenshot = true;
|
|
3336
|
+
}
|
|
3337
|
+
} else { // Global scan
|
|
3338
|
+
if (validateSignature("00'BitBlt'00") || validateSignature("00'GetDC'00")) {
|
|
3339
|
+
_TakeScreenshot = true;
|
|
3340
|
+
}
|
|
3341
|
+
}
|
|
3342
|
+
|
|
3343
|
+
if (_TakeScreenshot) heurAvSetResult("TakeScreenshot", 3);
|
|
3344
|
+
}
|
|
3345
|
+
|
|
3346
|
+
|
|
3347
|
+
|
|
3348
|
+
function heurAvSetResult(label, scores) {
|
|
3349
|
+
if (scores <= 10 && scores >= 0) {
|
|
3350
|
+
_setResult("~macilious", ("Win" + (PE.is64() ? "64" : "32") + ".") + label, "Heuristic AV", scores + "/10");
|
|
3351
|
+
} else {
|
|
3352
|
+
_error("Incorrect scores value for '" + label + "'");
|
|
3353
|
+
}
|
|
3354
|
+
}
|
|
3355
|
+
|
|
3356
|
+
|
|
3357
|
+
// Every time I start writing bad code I get hit with my head on the keybofewuihdsowefjfqodgsa79dowqhdsioefurogrwhuoguethuhofrwyioguqwehuf
|