Socket
Socket
Sign inDemoInstall

@paulll/siso

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@paulll/siso

Simple Solve


Version published
Weekly downloads
14
Maintainers
1
Weekly downloads
 
Created
Source

Simple Solve

build:unknown npm license:mit

Фреймворк для автоматического анализа чего бы то ни было. Изначально задумывался для автоматического решения CTF-задач.

Принцип

В основном похож на Dataflow Programming, но в данном случае мы оперируем единичными неизменяемыми единицами данных, а не их потоками, а "дуги" составляются автоматически в реальном времени, и не могут быть опредены заранее. Позаимствуем терминологию:

  • Узел - черный ящик, принимающий на вход одни данные и выдающий на выходе другие на основе входящих
  • Токен - единица данных, передаваемая между узлами. Помимо самих данных содержит так же информацию об их типе и показатель релевантности

На вход подается некоторый первоначальный набор токенов (обычно исходные данные для анализа), затем система из узлов создает новые токены на основе существующих. Вновь появившиеся токены рассматриваются наравне с первоначальными, и так пока не будут обработаны все токены.

Подобный принцип хорошо подходит для обработки данных, структура которых заранее неизвестна: анализ социального графа; решение типовых ctf-задач, декомпозирующихся в более простые

Пример

Рекурсивная распаковка Base64:

import {ProcessorNode, Token, Executor, Context} from "@paulll/siso";

class Base64DecodeTextNode extends ProcessorNode {
  public input = [["string"]];
  public async process(ctx: Context, tokens: Token[]) {
    const data = await tokens[0].data;
    const decoded = Buffer.from(data, "base64");

    // Если data в действительности содержала лишь base64
    if (decoded.toString("base64") === data) {
      return [new Token(["string"], decoded.toString("utf8"), 1)];
    }
  }
}

const executor = new Executor();
executor.addNode(new Base64DecodeTextNode());

const ctx = executor.run([
  new Token(["string"], "U0dWc2JHOGdWMjl5YkdRaA==", 1),
]);

ctx.on("newToken", async (token: Token) => {
  console.log(await token.data);
});

Здесь мы имеем всего один узел, который принимает на вход строку, и при обнаружении в ней base64-содержимого декодирует его, создавая новый токен. Новый токен поступает на вход того же узла, и так будет продолжаться, пока вся "матрешка" из base64 не декодируется.

Keywords

FAQs

Package last updated on 19 Jul 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc