mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	Added support for changing the Windows agent bitmap logo within the executable. Agent needs to be changed to fully support this.
This commit is contained in:
		
							parent
							
								
									e306af5fc9
								
							
						
					
					
						commit
						d519546a6c
					
				
					 3 changed files with 60 additions and 1 deletions
				
			
		| 
						 | 
					@ -2482,4 +2482,5 @@ if (require.main === module) { start(); }
 | 
				
			||||||
module.exports.createAuthenticodeHandler = createAuthenticodeHandler;
 | 
					module.exports.createAuthenticodeHandler = createAuthenticodeHandler;
 | 
				
			||||||
module.exports.loadCertificates = loadCertificates;
 | 
					module.exports.loadCertificates = loadCertificates;
 | 
				
			||||||
module.exports.loadIcon = loadIcon;
 | 
					module.exports.loadIcon = loadIcon;
 | 
				
			||||||
 | 
					module.exports.loadBitmap = loadBitmap;
 | 
				
			||||||
module.exports.hashObject = hashObject;
 | 
					module.exports.hashObject = hashObject;
 | 
				
			||||||
| 
						 | 
					@ -1384,6 +1384,22 @@ function CreateMeshCentralServer(config, args) {
 | 
				
			||||||
                    // Invalid icon file path
 | 
					                    // Invalid icon file path
 | 
				
			||||||
                    delete obj.config.domains[i].agentfileinfo.icon;
 | 
					                    delete obj.config.domains[i].agentfileinfo.icon;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                if (typeof obj.config.domains[i].agentfileinfo.logo == 'string') {
 | 
				
			||||||
 | 
					                    // Load the agent .bmp file
 | 
				
			||||||
 | 
					                    var logo = null;
 | 
				
			||||||
 | 
					                    try { logo = require('./authenticode.js').loadBitmap(obj.path.join(obj.datapath, obj.config.domains[i].agentfileinfo.logo)); } catch (ex) { }
 | 
				
			||||||
 | 
					                    if (logo != null) {
 | 
				
			||||||
 | 
					                        // The logo file was correctly loaded
 | 
				
			||||||
 | 
					                        obj.config.domains[i].agentfileinfo.logo = logo;
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        // Failed to load the icon file, display a server warning
 | 
				
			||||||
 | 
					                        addServerWarning("Unable to load agent logo file: " + obj.config.domains[i].agentfileinfo.logo + ".", 24, [obj.config.domains[i].agentfileinfo.logo]);
 | 
				
			||||||
 | 
					                        delete obj.config.domains[i].agentfileinfo.logo;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    // Invalid icon file path
 | 
				
			||||||
 | 
					                    delete obj.config.domains[i].agentfileinfo.logo;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3022,6 +3038,35 @@ function CreateMeshCentralServer(config, args) {
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        // Check the agent logo
 | 
				
			||||||
 | 
					                        if (destinationAgentOk == true) {
 | 
				
			||||||
 | 
					                            if ((domain.agentfileinfo != null) && (domain.agentfileinfo.logo != null)) {
 | 
				
			||||||
 | 
					                                // Check if the destination agent matches the logo we want
 | 
				
			||||||
 | 
					                                const agentBitmaps = destinationAgent.getBitmapInfo();
 | 
				
			||||||
 | 
					                                if (agentBitmaps != null) {
 | 
				
			||||||
 | 
					                                    const agentBitmapNames = Object.keys(agentBitmaps);
 | 
				
			||||||
 | 
					                                    if (agentBitmapNames.length > 0) {
 | 
				
			||||||
 | 
					                                        const agentMainBitmap = agentBitmaps[agentBitmapNames[0]];
 | 
				
			||||||
 | 
					                                        const agentMainBitmapHash = require('./authenticode.js').hashObject(agentMainBitmap);
 | 
				
			||||||
 | 
					                                        const bitmapHash = require('./authenticode.js').hashObject(domain.agentfileinfo.logo);
 | 
				
			||||||
 | 
					                                        if (agentMainBitmapHash != bitmapHash) { destinationAgentOk = false; } // If the existing agent logo does not match the desired logo, we need to re-sign the agent.
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            } else {
 | 
				
			||||||
 | 
					                                // Check if the destination agent has the default icon
 | 
				
			||||||
 | 
					                                const agentBitmaps1 = destinationAgent.getBitmapInfo();
 | 
				
			||||||
 | 
					                                const agentBitmaps2 = originalAgent.getBitmapInfo();
 | 
				
			||||||
 | 
					                                const agentBitmapNames = Object.keys(agentBitmaps1);
 | 
				
			||||||
 | 
					                                if (agentBitmapNames.length == 0) {
 | 
				
			||||||
 | 
					                                    destinationAgentOk = false;
 | 
				
			||||||
 | 
					                                } else {
 | 
				
			||||||
 | 
					                                    const iconHash1 = require('./authenticode.js').hashObject(agentBitmaps1[agentBitmapNames[0]]);
 | 
				
			||||||
 | 
					                                    const iconHash2 = require('./authenticode.js').hashObject(agentBitmaps2[agentBitmapNames[0]]);
 | 
				
			||||||
 | 
					                                    if (iconHash1 != iconHash2) { destinationAgentOk = false; } // If the existing agent icon does not match the desired icon, we need to re-sign the agent.
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // If everything looks ok, runs a hash of the original and destination agent .text, .data and .rdata sections. If different, sign the agent again.
 | 
					                    // If everything looks ok, runs a hash of the original and destination agent .text, .data and .rdata sections. If different, sign the agent again.
 | 
				
			||||||
| 
						 | 
					@ -3084,6 +3129,18 @@ function CreateMeshCentralServer(config, args) {
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        // Change the agent logo
 | 
				
			||||||
 | 
					                        if (domain.agentfileinfo.logo != null) {
 | 
				
			||||||
 | 
					                            const agentBitmaps = originalAgent.getBitmapInfo();
 | 
				
			||||||
 | 
					                            if (agentBitmaps != null) {
 | 
				
			||||||
 | 
					                                const agentBitmapNames = Object.keys(agentBitmaps);
 | 
				
			||||||
 | 
					                                if (agentBitmapNames.length > 0) {
 | 
				
			||||||
 | 
					                                    agentBitmaps[agentBitmapNames[0]] = domain.agentfileinfo.logo;
 | 
				
			||||||
 | 
					                                    originalAgent.setBitmapInfo(agentBitmaps);
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    const signingArguments = { out: signeedagentpath, desc: signDesc, url: signUrl, time: timeStampUrl, proxy: timeStampProxy }; // Shallow clone
 | 
					                    const signingArguments = { out: signeedagentpath, desc: signDesc, url: signUrl, time: timeStampUrl, proxy: timeStampProxy }; // Shallow clone
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2329,7 +2329,8 @@
 | 
				
			||||||
                            20: "Invalid \"LoginCookieEncryptionKey\" in config.json.",
 | 
					                            20: "Invalid \"LoginCookieEncryptionKey\" in config.json.",
 | 
				
			||||||
                            21: "Backup path can't be set within meshcentral-data folder, backup settings ignored.",
 | 
					                            21: "Backup path can't be set within meshcentral-data folder, backup settings ignored.",
 | 
				
			||||||
                            22: "Failed to sign agent {0}: {1}",
 | 
					                            22: "Failed to sign agent {0}: {1}",
 | 
				
			||||||
                            23: "Unable to load agent icon file: {0}."
 | 
					                            23: "Unable to load agent icon file: {0}.",
 | 
				
			||||||
 | 
					                            24: "Unable to load agent logo file: {0}."
 | 
				
			||||||
                        };
 | 
					                        };
 | 
				
			||||||
                        var x = '';
 | 
					                        var x = '';
 | 
				
			||||||
                        for (var i in message.warnings) {
 | 
					                        for (var i in message.warnings) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue