The result is the following script:
function OnInit(initData) {
initData.name = "Import_HASH_from_RHash_to_file";
initData.version = "1.0";
initData.copyright = "(c) 2021 t23111";
initData.url = "";
initData.desc = "Import HASH summ from RHash.exe to text file!";
initData.default_enable = true;
initData.min_version = "";
var cmd = initData.AddCommand();
cmd.name = "Import_HASH_from_RHash_to_file";
cmd.method = "Import_HASH_from_RHash_to_file";
//cmd.desc = "Import HASH summ from RHash.exe to text file!";
//cmd.label = "Import_HASH_from_RHash_to_file";
//cmd.template = "FILE,ADD/S,REMOVE/S,TOGGLE/S";
//cmd.hide = false;
//cmd.icon = "edit";
}
function Import_HASH_from_RHash_to_file(clickData) {
if (clickData.func.sourcetab.selected.count == 0) {
var dlg = DOpus.Dlg;
dlg.message = "Please select a file!";
dlg.Show;
return;
} else {
for (var eSel = new Enumerator(clickData.func.sourcetab.selected); !eSel.atEnd(); eSel.moveNext()) {
if (eSel.item().is_dir) {
var dlg = DOpus.Dlg;
dlg.message = eSel.item().RealPath + " is folder, not a file!";
dlg.Show;
} else {
//New File Name
var filepath = eSel.item().path + "\\";
var filename = eSel.item().name;
var filepathfull = filepath + filename;
var filenamenew = eSel.item().name + "_RHash.txt";
var filepathnew = filepath + filenamenew;
var filesize = eSel.item().size;
//Getting RHash program output
var exe = "rhash.exe";
var exe_path = "D:\\test\\RHash-1.4.1-win64\\";
var exe_path_full = "\"" + exe_path + exe + "\"";
var hash = "crc32";
/*
AICH - %{aich}
BLAKE2B - %{blake2b}
BLAKE2S - %{blake2s}
BTIH - %{btih}
CRC32 - %{crc32}
CRC32C - %{crc32c}
ED2K - %{ed2k}
ED2K-LINK - %{ed2k-link}
EDON-R256 - %{edon-r256}
EDON-R512 - %{edon-r512}
GOST12-256 - %{gost12-256}
GOST12-512 - %{gost12-512}
GOST94 - %{gost94}
GOST94-CRYPTOPRO - %{gost94-cryptopro}
HAS-160 - %{has160}
MD4 - %{md4}
MD5 - %{md5}
RIPEMD-160 - %{ripemd160}
SHA1 - %{sha1}
SHA-224 - %{sha-224}
SHA-256 - %{sha-256}
SHA-384 - %{sha-384}
SHA-512 - %{sha-512}
SHA3-224 - %{sha3-224}
SHA3-256 - %{sha3-256}
SHA3-384 - %{sha3-384}
SHA3-512 - %{sha3-512}
SNEFRU-128 - %{snefru128}
SNEFRU-256 - %{snefru256}
TIGER - %{tiger}
TTH - %{tth}
WHIRLPOOL - %{whirlpool}
*/
var params =
" --printf=\"%p - %{"+hash+"}\" "
//" --list-hashes "//for get list all support hash
//" --printf=\"%{"+hash+"}\" "
+ "\"" + filepathfull + "\"";
var rhash_out = RunEx(exe_path_full, params).toUpperCase();
var rhash_out_2 = RunHiddenEx(exe_path_full, params).toUpperCase();
//File Content
var filecontent =
"File Name: \n" + eSel.item().name
+ "\n" + "File Path: \n" + filepath
+ "\n" + "File Path Full: \n" + filepathfull
+ "\n\n" + "exe: \n" + exe
+ "\n" + "exe_path: \n" + exe_path
+ "\n" + "exe_path_full: \n" + exe_path_full
+ "\n" + "params: \n" + params
+ "\n" + "RHash command: \n" + exe_path_full + params
+ "\n\n" + "HASH from RHash, RunEx: \n" + rhash_out
+ "\n\n" + "HASH from RHash, RunHiddenEx: \n" + rhash_out_2
+ "\n";
var filecontentencode = DOpus.Create.StringTools.Encode(filecontent, "utf-8 bom"); //Encode to UTF-8-BOM
var file = DOpus.FSUtil.OpenFile(filepathnew, "wa"); //Create text File for write
if (file.error == 0) {
file.Write(filecontentencode); //Write to file
file.Close();
}
var dlg = DOpus.Dlg;
dlg.message = "File is complete!";
dlg.Show;
}
}
}
}
///////////////////////////////////////////////////////////////////////////////
function RunEx(exe, params){
//params = (params?" "+params:"");
var shell = new ActiveXObject("WScript.Shell");
var exec = shell.Exec(exe + params);
var stdOut = "", stdErr = "";
while(exec.Status == 0){
stdOut += exec.StdOut.ReadAll();
stdErr += exec.StdErr.ReadAll();
}
var result = {
returncode : exec.ExitCode,
stdout : stdOut,
stderr : stdErr
}
return result.stdout;
}
///////////////////////////////////////////////////////////////////////////////
function RunHiddenEx ( exe, params, tmpFileBase, tmpFileExt, shell, fso){ //v1.2
if (!fso) fso = new ActiveXObject("Scripting.FilesystemObject");
if (!shell) shell = new ActiveXObject("WScript.Shell");
if (!tmpFileBase) tmpFileBase = "DO.Temp.";
if (!tmpFileExt) tmpFileExt = ".txt";
var tmpFileStdout = GetTmpFileName(tmpFileBase, tmpFileExt, fso).fullname;
var tmpFileStderr = tmpFileStdout+".err"+tmpFileExt;
var cmd = '%comspec% /c ""'+exe+'" '+params+' >"'+tmpFileStdout+'" 2>"'+tmpFileStderr+'""';
var result = {};
result.cmd = cmd;
if (exe.match(/^([A-z]:\\.+|\\\\(.*?)\\.+)$/)){ //test path to exe if given
if (!fso.FileExists(exe)){
var msg = "E Executable not found ["+exe+"]";
DOpus.Output(msg);
throw msg;
}
}
result.returncode = shell.Run( cmd, 0, true);
result.stdout = ReadFile(tmpFileStdout, fso); fso.DeleteFile(tmpFileStdout);
result.stderr = ReadFile(tmpFileStderr, fso); fso.DeleteFile(tmpFileStderr);
return result.stdout;
}
///////////////////////////////////////////////////////////////////////////////
function ReadFile ( path, fso ){
fso = fso || new ActiveXObject("Scripting.FilesystemObject");
var content = "";
if (!fso.FileExists(path)){
return content;
}
var file = fso.OpenTextFile( path, 1, -2); // Read, UseDefaultEncoding
if (!file.AtEndOfStream)
content = file.ReadAll();
file.Close();
return content;
}
///////////////////////////////////////////////////////////////////////////
function GetTmpFileName(prefix, extension, fso) {
fso = fso || new ActiveXObject("Scripting.FilesystemObject");
var tFolder = fso.GetSpecialFolder(2); //2 = temp folder
var tFile = fso.GetTempName();
if (prefix!=undefined) tFile=prefix+tFile;
if (extension!=undefined) tFile+=extension;
return {
path : tFolder.Path,
name : tFile,
fullname: tFolder.Path+'\\'+tFile
};
}
The command for "RHash" is as follows:
"D:\test\RHash-1.4.1-win64\rhash.exe" --printf="%p - %{crc32}" "D:\test\ExperienceIndexOK_x64_p.exe"
The response should come:
D:\TEST\EXPERIENCEINDEXOK_X64_P.EXE - 85BCE596
I send the following parameters to the "RunEx()" and "RunHiddenEx()" functions:
exe_path_full:
"D:\test\RHash-1.4.1-win64\rhash.exe"
and
params:
--printf="%p - %{crc32}" "D:\test\ExperienceIndexOK_x64_p.exe"
In response, I get:
HASH from RHash, RunEx:
D:\TEST\EXPERIENCEINDEXOK_X64_P.EXE - 85BCE596
HASH from RHash, RunHiddenEx:
D:\TEST\RHASH-1.4.1-WIN64\RHASH.EXE - 3F8F5524D:\TEST\EXPERIENCEINDEXOK_X64_P.EXE - 85BCE596
That is, the problem is in the "RunHiddenEx()" function, which additionally counts the hash sum for itself =) )).
Help me fix this!!!