我正在编写一个简单的免费软件来编码和解码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