使用gcrypt库

时间:2017-02-01 09:22:39

标签: c linux encryption libgcrypt

我正在编写一个简单的免费软件来编码和解码bash脚本,主要是。

目标是获取可执行脚本文件,其中没有人可以读取内部的源代码,root和包含的所有者。编码/解码文件我选择使用带有3DES算法的gcrypt库。但不幸的是,唯一可用的文档是针对谁已经使用该库(例如参考指南)。

您可以在以下地址找到我的代码: wScriptObfuscator.c

目前我在两步中的第一步停止:编码脚本文件。您可以在以下代码行中阅读此步骤的核心:

char secKey[(WSO_KEYSIZE + 1)];
char inVector[(WSO_KEYSIZE + 1)];

memcpy(secKey, WSO_SYMKEY, WSO_KEYSIZE);
secKey[WSO_KEYSIZE] = '\0';
memcpy(inVector, WSO_INIVECTOR, WSO_KEYSIZE);
inVector[WSO_KEYSIZE] = '\0';
#if __DEBUG__ > 0
printf("Key:    %s\nVector: %s\n", secKey, inVector);
#endif

resData = malloc(st.st_size + sizeof(char));

// End initialization process
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);

// This function creates the context handle required for most of the other cipher functions
if (gcry_cipher_open(&hd, GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_ECB, 0) == GPG_ERR_NO_ERROR) {

  // Set the key used for encryption or decryption operations
  if (gcry_cipher_setkey(hd, secKey, gcry_cipher_get_algo_keylen(GCRY_CIPHER_3DES)) == GPG_ERR_NO_ERROR) {

    // Set the initialization vector used for encryption or decryption
    if (gcry_cipher_setiv(hd, inVector, WSO_KEYSIZE) == GPG_ERR_NO_ERROR) {

      // Encription
      if (
        gcry_cipher_encrypt(
          hd,
          resData, (st.st_size + sizeof(char)),
          data, (st.st_size + sizeof(char))
        ) == GPG_ERR_NO_ERROR
        ) {

        // Encripted data saving...
        fd = open(sFileName, O_WRONLY);
        idx = 0;
        t = 1;
        if (fd > 0) {
          while (idx < st.st_size && t > 0) {
            t = write(fd, (data + idx), (st.st_size - idx));
            if (t > 0) idx = idx + t;
          }
        }
        close(fd);

      }
      else {
        fprintf(stderr, "ERROR! Encription procedure failed\n");
        err = WSO_ERROR_ENCRIPTFAILURE;
      }
    }
    else {
      fprintf(stderr, "ERROR! gcry_cipher_setiv() failed\n");
      err = WSO_ERROR_ENCRIPTFAILURE;
    }
  }
  else {
    fprintf(stderr, "ERROR! Key initialization failed\n");
    err = WSO_ERROR_ENCRIPTFAILURE;
  }

  gcry_cipher_close(hd);

}
else {
  fprintf(stderr, "ERROR! Encripted channel opening procedure failed\n");
  err = WSO_ERROR_ENCRIPTFAILURE;
}

if (resData != NULL) free(resData);

一切看起来都很好但不是最后一个编码器进程函数gcry_cipher_encrypt()。这很奇怪,因为它需要良好初始化的gcry_cipher_hd_t结构,编码数据缓冲区,大小,源数据缓冲区,大小等等。它看起来很简单......但是不起作用。

很遗憾,我还没有找到有关返回的错误代码的文档。

您也可以通过sourceforge下载代码:

svn checkout https://svn.code.sf.net/p/linuxwoodo/code/trunk linuxwoodo-code

wScriptObfuscator.c文件位于以下文件夹中: 躯干/ prj__wScriptObfuscator / B1 / SRC

0 个答案:

没有答案