Be Still, My Beating Chart

Data. Wow. The web has a lot of data. Around 1.2 zettabytes. It can all be a bit overwhelming. Especially if you have no way to visualize it. If only UBot Studio had a way to visualize data. Oh, right, it does! Be still, my beating chart!

So how do we make a chart in UBot Studio? Simple, just open up the bot bank, open the “Charting” category, and drag a chart command into the script.


Give it a useful name, because the name will be used in the chart itself. As you can see, once you hit “ok”, a new tab is created beside the browser.

But a chart with no data is like a bowl with no salsa. Let’s put some data in there. Paste the following code into your script:

 clear all data
 loop(20) {
 add item to list(%data,$rand(1,100),"Don\'t Delete","Global")

This bit of code just creates a list called %data, and fills it with 20 random numbers. Let’s give it a quick run.

Great, now we have have some data to put in our chart, and some salsa to put in our bowl. Next we’re going to drag a plot command into our chart command. We’ll set the Data parameter to our %data list, and the plot type to bar graph.



And when you click OK, magic happens.



And that, friends, is how to make your data pretty. Enjoy your chips and salsa!


Excuse me, Sir, Do you have the Time (functions)?

Well, if you’re using the latest version of UBot Studio, then yes, you do have the time… functions. That’s right, UBot Studio now gives you the power to control time.



Let’s look at how these work. The $date function simply returns the current date and time. Simple enough.

The $now function returns the exact same thing as $date. It is included mostly for semantic clarity.

The $n second function is more interesting. you add an $n seconds function, you’ll see that the “n” is replaced by whatever number you choose.

You can change the unit of time as well.

As you can see, the title of the node changes depending on the information you enter.

Maybe what we really need to know isn’t the time right now, but the time exactly 1 second from now.

A few things to notice about this function. First, it comes with a $1 second function built into the first parameter. You can, of course, edit this and change it to whatever you need it to be, as shown above. The second thing to notice is that the node title again changes depending on the parameters.

The last function here is the $n ago function. This operates just like $n from now, except it takes you into the past instead of the future.

That wraps up the time functions. With this, UBot Studio can automate anything that requires looking at a watch. And it’s a good thing, too. I’m late for a meeting.


Set up UBot Studio on a Free Amazon VPS in Ten Minutes

Want to use UBot Studio or UBot Studio bots, but don’t want them running on your Windows machine or don’t have a Windows machine?


No problem!


I’ll be typing this entire post in AMAZON orange to thank Amazon for creating Amazon Web Services, the cloud service that solves this problem for you for free.


Ok, Just kidding.

But kudos to Amazon for giving something awesome to everyone out there for free: A cloud computing service that can seriously improve your marketing, and that you can use to run UBot Studio/uBots.


Here’s how to get up and running in about ten minutes. Follow along with the gifs:


Step 1: Sign up For AWS and set up your EC2 VPS. (about 2 minutes)


  1. If you don’t already have an AWS account, start there. Visit and click Create Free Account. Finish the account creation portion.
  2. Once complete, go to if you haven’t been redirected there already.
  3. Click EC2 on the dashboard.
  4. Click “Launch Instance”.
  5. Scroll down to Microsoft Windows Server 2012 R2 Base and click “Select”
  6. Click Review and Launch on the next page.
  7. Click Launch.
  8. Choose “Create a new key pair”
  9. Type a name for your key pair.
  10. Download the key pair.
  11. Click “Launch Instance”.


You now have a fully functioning Virtual Private Server ready to install UBot Studio.


3. Get the connection info. (about 1 minute)


  1. Go to the Amazon EC2 console.
  2. Go to running instances.
  3. Choose your new instance and click Actions, “Get Password.”
  4. Click Browse and navigate to the private key file you created when you launched the instance. Select the file and click Open to copy the entire contents of the file into contents box.
  5. Click Decrypt Password. The console displays the default administrator password for the instance in the Connect To Your Instance dialog box, replacing the link to Get Password shown previously with the actual password.
  6. Record the info.



3. Connect to the server. (2 minutes)


If you’re using a Mac, I recommend you download the free, open source Remote Desktop client CoRD here:

  1. Open CoRD and add a new server with the info you just obtained, then connect.


4. Install UBot Studio. (2 minutes)


  1. Just open up Internet Explorer on your new EC2 VPS and download UBot Studio.


Congratulations – you’ve now got a free VPS ready to go with UBot Studio. Your marketing will never be the same.


Protip: - The free tier DOES have computing limits, so it’s a good idea to set an alarm so you don’t go over them and start paying, just in case. And if you need a more in-depth tutorial for all of this, Youtube has a few.


UBot Studio 5.7: Getting to know the new features

UBot Studio 5.7 is now out! Here is an intro to some of the new features you’ll find.

(Keep in mind that these new features can be accessed via the Bot Bank or the search toolbox.)

Unsubscribed? Just click this big button to sign up and get the latest features!


1) Compression:

Compression commands

Ever been stuck interacting with a downloaded .zip file? Or maybe you want to automatically zip up files on the daily for uploading?

Now, the Compression features allow you to automatically zip up, unzip, and analyze zip files for the data inside.

The new Compression commands let you create and interact with zip files!


2) Charting:

New Charting Commands in the Bot Bank

New Charting Commands in the Bot Bank

To use the new charting functionality inside UBot Studio, it’s literally as simple as dropping in the chart command and the data you need to plot (via a list).

Charting in UBot Studio is as easy as dropping in a Chart command and your list of plot points.


3) Encryption:

Encryption Function in the Bot Bank

Encryption Function in the Bot Bank

Need extra security? Use the simple $encryption function!

Encryption and decryption inside UBot Studio

4) Advanced text functions:

Advanced Text

We wanted to make it more comfortable to manipulate strings, so we added some more common text manipulation functions. These are worth looking into more carefully if you find yourself interacting frequently with strings of text and data. For more information on each, visit the wiki. A few examples of a few are below:

Reverse text: This is just sort of fun.

Reversing text in UBot Studio is quick and easy….

Clean text: Removes all multiple spaces, reducing them to a single space:

And so is removing extra white spaces in strings you’ve downloaded!

But what’s even better, is combining them all. This next video shows off $reverse text, $clean text, and $humanize all working in conjunction to create a readable string out of what looks like gibberish:

Combine the Advanced text functions to turn otherwise nonsense strings into useful information!

5) Extended Math:


UBot Studio can now do your homework! Just drop one of these extended math functions into your script to build some data-savvy, extra-nerdy bots.


6) Advanced Table


Working with complicated tables means needing extra functionality. You can now complete an operation with every cell in a row, column, or table, as well as create whole tables straight from excel or text file.


7) Advanced List


How nice would it be to simply replace an item in a list with a new item? Or to complete an operation with each item on the list? Along with some other complex commands and functions like enqueue and $pop, we’ve added these new Advanced List features so that interacting with lists is now even easier.


Click here to sign into your account and download the latest, greatest version of UBot Studio!


UBot Studio 5.7 – Revenge of the Nerds

A few months ago we introduced a new member of the UBot Studio team, Adam, who has been programming feverishly ever since he joined. He and I have been working quietly on a big update to UBot Studio that hugely increases what you can do with the software, regardless of the Edition you have. And we’re just a few days away from the release, so I can finally talk about it.

UBot Studio 5.7 will add a treasure trove of power for those who have a UBot Studio subscription.


How do I get the new version?

Like any version, just click the update option when you open your UBot Studio software, or simply login to the homepage and click the subscribe button.

If you haven’t been subscribed for a while, this deal is extra special because you get automagically moved to the newest version PLUS six months or a year of updates. Users can subscribe for just $54 to get this offer. And don’t forget – annual subscribers receive a 15% discount!


What’s in this big update?


The new features include the ability to create charts, compress and decompress files, encrypt and de-encrypt, and interact with time functionality (ie, UBot will now easily recognize when “3 days ago” was). The advanced and extended features include new List, Table, Text, and Math functions. You’ll find these new commands and functions by searching for them in the toolbox search bar or inside the Bot Bank. By leveraging the Bot Bank, we’ve added all of this advanced functionality without cluttering up the toolbox.

The wiki will be updated for you and you’ll see detailed blog posts describing each new group of commands in the next few weeks.

Here’s a sneak peek at the new features, which you’ll be able to access straight from the Bot Bank if you are subscribed:


Simply drop the chart command and choose your data to create stunning visual representations!

An example of the encrypt command.

You’ll find the new commands inside the Bot Bank or in the search toolbox if you’re subscribed.


A list of all the new additional features is below:


New Charting Commands in the Bot Bank

New Charting Commands in the Bot Bank

Encryption Function in the Bot Bank

Encryption Function in the Bot Bank


New Extended Math functions in the Bot Bank


New Advanced List commands and functions in the Bot Bank

Advanced Text

New Advanced Text functions in the Bot Bank


New Compression commands in the Bot Bank


New Advanced Table commands in the Bot Bank

Click here to sign into your account and download the latest, greatest version of UBot Studio!



Logging, Part 3: The Tao of Flow Testing

Of course, unit testing won’t work for every situation. In a bot, sometimes we need to perform actions that we don’t want to run over and over every time we want to run our tests. For instance, if your bot creates accounts on some website, you probably don’t want to create a bunch of accounts just for testing purposes. Don’t worry, UBot Studio still has you covered.

The Tao of Flow Testing

Flow testing has a similar purpose to unit testing, but it differs in execution. Flow tests will
occur in the main flow of your script. instead of running them separately, flow tests will run while your bot is running. Let me demonstrate.

We’ll start with our boilerplate code, including our purpose.


Next, we’ll navigate to the account creation form.



This is the first spot where we might see a problem. For instance, if your internet is having connectivity issues, or there’s a problem with the server, your bot will never see this form. We can protect against this eventuality by creating a flow test.


By looking for the text “Sample Account Creation Form”, we can know beyond the shadow of a doubt that our page loaded correctly. If our bot fails to find the text it’s looking for, establish will run its child commands. So what should we put in there? We have a few options. We could put a wait command and another navigate in there, so that the bot will simply try again if it fails. We can also pause the script and alert the user to let them know what is happening. For this example, I’m going to use the latter option.


This is a useful option, because if the bot is deep inside some process, it gives us an opportunity to get it back on track instead of letting it break down prematurely. Let’s play the script and see what happens.

UBot Studio 5.5 f5

Lovely! Everything worked without issue, so our establish command did nothing. That’s how we like it. Now I’m going to change the navigate command on purpose, to show you what would happen in case of an error.

UBot Studio 5.5 f6

Our flow test now pauses the script and let’s us know there’s an issue. Great, let’s move on.

UBot Studio 5.5 f8

Isn’t UBot Studio fun? I’ll finish filling these out and have my bot click the submit button.

UBot Studio 5.5 f8

Looks like my bot works like a charm. Of course, in the real world, thing are often less smooth. We want to know with certainty that our bot created the account successfully. Looks like another perfect job for a flow test!


Again, we need to decide what to do if the test fails. We might want to wait 5 minutes and try again. We might want to send an angry email to the website’s technical support (please don’t actually do that). For this example, I’ll again pause the script and alert us to the situation.


Let’s give this a final run through and see how it looks.

UBot Studio 5.5 f11

Flow testing provides you with a failsafe, to get your bots back on track if they ever go off course. But note the secondary benefit here as well. Even though our bot ran perfectly, our establish commands are still very helpful. By looking in the log window, we actually have a story of how our bot performed. By seeing all that green, we know that our bot worked perfectly. If we had a very long bot, we could quickly scroll through our log, and if there was a problem. we’ll know immediately what it was and where it happened. You might even want to record information at the moment in question. You could, for instance, take advantage of UBot Studio’s “save browser image” command to see exactly what you bot saw.


Download this bot!


All in all, these two styles of testing offer your bots the tools to keep them running for longer and with less bugs. Unit tests are a clean and organized solution when you’re testing a piece of code that can be run over and over without issue. Flow tests are perfect for testing on the go, while your bot is working its magic. Good luck in all your ventures, and here’s to many happy, healthy, stable bots.

Logging, Part 2: The Art of Unit Testing

In the previous blog post, we discussed UBot Studio’s new logging commands. I’d now like to explain further implications of the new logging commands, especially the power they give you to automatically test your code.

Writing automated tests is a practice used by the best coders in the world. But even if you’re not a coder at all, tests will make your bots able to withstand anything the internet throws at them. Automated testing is one of the single best practices you can do for keeping bots from breaking, especially when those bots are very large. There are two types of automated tests that we will look at: Unit Tests, and Flow Tests.

The Art of Unit Testing

Another important implication of the changes is that it is now very simple to write unit tests. What is a unit test, you ask? Only one of the most important ideas to come from computer science in the last 20 years or so.

A unit test is a short piece of code that has no purpose other than to ensure some other piece of code is working correctly. By putting a robust suite of unit tests into your code, you can always rest assured that your bot will be as stable and bug-free as possible. This is especially useful for those of us who have created large, complex bots. Trying to make a change in complex code can cause a ripple effect, where one change affects some other bit of code down the line, causing headaches every step of the way. But if you have a good test suite in place, you’ll know right away if something is ever out of place, and you can fix it before it becomes a big mess.

It’s a good idea to keep unit tests out of the main script. The best way to do this is to create a separate tab. Set it to invisible if you need to compile.

Let’s look at what unit testing looks like in UBot Studio. Say we have a simple function:


Using this function might look like this:


In the course of making a very large bot, it might be that I need to change this function at some point. I want to make sure it will always work as I expect, so I’ll write a test. I’ll start by making a new tab for my tests:
UBot Studio 5.5 S3

We’ll start with some basic boilerplate code to make sure our log shows like we want. We’ll use the clear all data command to make sure we start fresh each time we run our tests. We’ll also set a purpose. This isn’t strictly necessary, but it gives our tests a sense of completeness. Make sure the purpose command comes after the clear all data command, since the log itself is stored in a variable.



Great! we’re ready to test. We’ll drag an establish. For a unit test, we want it to fail by default, run the child commands, and then pass. To do this, we’ll set a variable. We’ll test for the variable to look like what our padded text function makes text look like.


On its own, we know this test will fail, because we haven’t actually set the variable. Let’s see what happens if we run it.


Oh no! Our test failed! Let’s fix that. We’ll add a set command to make a variable that satisfies the starting condition.

We give it a run and…



Let’s add some more defines to our script and see if we can keep it clean.

UBot Studio S9


By now our unit tests are looking a little cluttered.

UBot Studio 5.5 s10

Ok, maybe 4 isn’t bad, but let’s pretend it’s more like 40. We can keep our life much more organized if we put our tests in different sections. You’ll have to make a decision on how tests should be grouped. In this example, I’m going to group them by tests for commands vs tests for functions.

UBot Studio 5.5 s11

That feels more organized. Let’s give it a run and look at our results.

UBot Studio 5.5 s12

Uh Oh! I’m seeing red! Let’s look at what broke and why. On closer inspection, I realize that I forgot the www and a trailing backslash in all my urls. I’ve gone through and fixed them all. Let’s try again.

UBot Studio 5.5 s13

A little slice of nerd satisfaction is a test report with lots of green. Also take note of how the sections affect the organization of the log. This is a solid, if simple, test suite if ever there was one.

To download this bot, click here.

Logging, Part 1: Introduction to Logging in UBot Studio

Over the years, the UBot team has watched in awe as the scripts our users created went from small, specific tools, to enormous, complex, multifaceted uBots. As software developers, this left us with an interesting problem: How should large scripts be organized in a way that allows UBotters to keep their sanity? In the latest update to UBot Studio, 5.5.12, we’ve taken a novel approach to begin addressing this question – by turning your scripts into a story.

The human brain is extremely good at managing stories. Our brains are notoriously bad at handling complex mathematical logic and data. So guess which path computer scientists decided to model programming after? The latter, of course.

At UBot Studio, our goal has been to make building applications easier for non-programmers, and also to create smarter ways to understand building programs overall. By introducing a set of smart logging commands, establish, purpose, activity, log, and ui log view, UBot Studio makes building your uBots less like math and more like a good book.

You’ll notice that the logging commands appear in black instead of the normal blue. This is to keep logging commands conceptually separate from other commands. Generally, a bot should work without having any logging commands in it, so the color difference helps to visually follow the main flow of your bot without being distracted by the log commands. Now, when I say that your bot should work without any logging commands, I mean this only speaking technically. Logging and testing are considered best practices that will help keep your bots robust and free of bugs.

The first command to understand is the ui log view. This works just like any other ui command, in that when you add it to your script, a ui element will be added to the ui panel. In this case, the element will appear as a large textbox that will show you the log as it updates.

UI Log View

Note that when you use any log command, it will write to two places: the log files, located in Users/{NAME}/AppData/Roaming/UBot Studio/Log; and a variable in UBot Studio called #log. In the log files, the log is stored as plain text. In the #log variable, the log is stored as html, which can be followed in the ui log view, or shown in full via UBot Studio’s web browser. You can accomplish this latter task with the following code:

 ui log view("Log")

Great, now let’s look at some actual log commands. When creating a bot, the first thing you want to do is define your purpose. This should be the overall objective you wish to achieve for the bot or the script. Write a few words about what you are trying to do. When you run it, it looks like this:


Next, let’s take a look at the activity command. You can think about your bot as a series of activities or tasks. First, your bot does one activity. Then, it does another activity. The activity command is also identical to the log command, with a slightly different message. You’ll use it to split up and describe the various tasks that your bot accomplishes. You may also find it useful at the beginning of defined commands.

Screen Shot 2015-03-16 at 11.12.02 AM

The log command is a little more general than purpose or activity. The log command is for writing quick bits of information to the blog. For instance, if you need to know what a particular variable is at any given time, the log command is a good choice.

Screen Shot 2015-03-16 at 11.12.06 AM

The section command is similar to the other log commands, with an important difference. Besides writing to the log, it also allows you to organize your script and your log. The section command will describe a group of similar commands, and those commands will be children of the section command. Functionally, all the section command does is write to the log and run the commands inside of it. Visually, it make your script easier to mentally chunk.

The section command also helps keep the log organized. Any log command ran inside a section will show up inside that section in the log. We’re going to ignore this command for this lesson, but explain it further in Part 2.


Here’s a visual diagram of how you might use these commands in your script, and what the story would look like in your log when that script is successful:

Establish and Log Diagram
The establish command is a bit more complex. With the establish command, you’ll be testing to see that the world is as you expect it to be. For instance, maybe you’re logged into a website, and you’re scraping or sorting through 1000 pages of search results. Maybe this website occasionally logs you out. You can use establish to check for some condition, for example, to see if there is text on the page that reads “results”. In practice, we would use establish to check for the condition “$searchpage(“results”), and this will establish that our browser is on the results page, or that we’re logged in. This way you’ll know you’re logged in and in the right place before you try to scrape.

If the condition passes, the establish command will continue on with your script. The log will show a pale green acknowledgement of the situation.

If the condition doesn’t pass, the establish command will run all the commands contained inside it. Once it does, it will test the condition again. If it passes this time, the log window will let you know with a brighter green color. If it still fails, the log window will show a red message. It’s important to write meaningful messages in your establish commands, so that if there ever is a problem, you can find it quickly and easily.

So, what should you put inside it? Generally, an establish command should contain script to correct the problem, or at least, to notify you that a problem has occured. In the latter case, you might also have it pause or stop the script, so that you can come back and fix it manually. Think of establish as a system for providing failsafes to your uBots. In a perfect world, your establish commands will never have to run. But using establish commands will make your uBots very robust, and your uBots will keep running even if the world isn’t perfect (and trust me, it isn’t).

You may also notice that the establish command also has an advanced parameter. This parameter allows you to use establish in a completely different way. I won’t be going over this now, but keep an eye out, as we’ll be writing a separate blog post for this in the near future.

Here’s that same diagram from before, but with the establish command included in place of a log command:

Establish and Log Diagram 2

Logging and establishing conditions are habits that will require foresight and discipline. It will be tempting to just write the code that completes your scripts the quickest. But if you stick to this better coding practice, you’ll find that your uBots will grow more quickly, easily, and with more stability than your competitors. You will easily be able to track down and fix mistakes in your uBots, and determine where they need improvement. As your uBots grow and grow, you’ll be confident you can handle the larger scope.
And as I like to say, big bots means big bucks.

Next week, I’ll cover using these commands for unit testing!


Who’s Building The Future of UBot? Pt 1

You might have noticed a new release of UBot Studio today – 5.5.13, which introduces some cool new concepts that make testing UBot Studio code a snap (more on those in a blog post later this week). I thought this would be a great time to thank the newest member of the UBot Studio team for working on this, and to introduce him to the UBot community: Say hello to Adam, our new lead developer.


Adam has been programming since he stopped wearing diapers. Forced to type the code of the games that he wanted to play into his Apple2E from magazines because hard drives weren’t mainstream, he naturally started fiddling to make the games do other things. After choosing to go to computer camp in 3rd grade instead of doing team sports, Adam’s nerd cred was thoroughly established.


Before joining the development team taking over development at UBot Studio, Adam was a Senior Engineer at a game development company that built some of the most popular games on the web. You know that facebook game that you get all those super annoying invites from? Adam worked on that. After a brief stint at an online education startup, he decided to go freelance and travel the world a bit. After completing several freelance projects with the UBot Studio team, he is now working closely with me to lead development of future updates to UBot Studio and our future projects. Adam’s enthusiasm, entrepreneurial spirit, and strong insight into programming theories make him a perfect fit for the team.


Why Your Bot Is Showing Up As A Virus (And What To Do About It)

Over the years, we’ve changed our mind about antivirus software.

Everyone used to need it. Back when the internet was filled with trojan horses, logic bombs, viruses, and malware, virus scanners used to be necessary. Back when you downloaded software willy-nilly and Google didn’t pre-label sites as potentially dangerous, it seemed like within no time at all you could pick up a virus, just by browsing the web.

But since then the need for virus protection has changed. In the Wall Street Journal, Symantec’s own Senior VP for Information Security has said anti-virus software “is dead.” Virus scanning software has become nearly obsolete in the business world, and companies like Symantec, who invented commercial antivirus with the ubiquitous Norton antivirus protection suite, now defend against cyber threats via automated threat forensics (checking network traffic to detect threats early on, for example). Journalists are writing headlines like “Antivirus Is Ailing” and “The Antivirus Era Is Over.” In the last decade, security experts have switched their focus from detecting software on your PC via antivirus products to stopping viruses before they ever get to your computer, and minimizing lost data once the viruses do get their. (In fact, Symantec only has about a 70% success detection rate - so it’s no surprise these companies are moving away from endpoint protection.)

Displeased Face Male

When your AV software tries to remove Skype because it’s “dangerous”.

Many don’t realize how anti-virus scanning works. For example, are more scanners better than one? Virus Total, a virus scanning aggregator, now lists over 50 virus scanners, and many often use this product to test files across many different scanners, but Virus Total specifically recommends AGAINST this: “In VirusTotal desktop-oriented solutions coexist with perimeter-oriented solutions; heuristics in this latter group may be more aggressive and paranoid, since the impact of false positives is less visible in the perimeter. It is simply not fair to compare both groups….Very often antivirus solutions and URL scanners will produce false positives, i.e. detect as malicious innocuous files and URLs. These erroneous detections may severely hinder the business activity/popularity of third party products (e.g. refrain access to a given site, dissuade users from downloading and installing a given application, etc.).”

Virus scanners, even according to the makers of them, often find out about actual problems too late, and often what they detect is a false positive.Some even detect chat clients because they’re productivity killers, and torrent clients because they might be used to download viruses accidentally.

Virus scanners, frankly, are often crap.

So if you ever notice that something you’ve compiled in UBot Studio is being detected as malware or as containing a virus, first, relax, and remember that this is almost certainly a false positive report, and it’s being sent from a dinosaur in a dying industry. Then, follow these steps to fix the problem.


Mostly Harmless

Click the “Angel” icon to vote for a file as harmless on Virus Total

      1. If the scanner is on your computer, be sure to add the file to the virus scanners exceptions list. This will let you continue using the file.
      2. Don’t upload your file to VirusTotal. Search for it there using its md5 hash to determine if it’s been uploaded already. This is quicker, and industry experts have told us that uploading your file is one reason that some products are falsely detected. (According to Virus Total, they help “antivirus labs by forwarding them the malware they fail to detect.”) The md5 hash is just a string that helps verify a file quickly. To check the hash, use the command line in Windows or OSX.) If your file is on Virus Total, make sure to vote that it is “Harmless” in the top right.
      3. Read your virus scanner results carefully. Make sure to check any “Additional Information” sections. Take note of any specifically important and ambiguous wording, such as: “While not necessarily malicious, the scanned file presents certain characteristics which depending on the user policies and environment may or may not represent a threat.” (Actual language from Virus Total.)
      4. Let the company or companies reporting it as malicious know that it’s a false positive. There are several ways to do this, but the best is to submit a false positive report. This site has a list of where to submit false positives for each company. A short message is all you need to give them in most false positive reports, along the lines of “Dear company, the executable I’ve attached was compiled using UBot Studio. Your virus scanner reported it as containing {virus x}. It does not contain this and this was a false positive. Please refrain from reporting this UBot Studio compiled executable as containing x.”
      5. No, really, tell the virus scanning company that it’s a false positive. Tweet to them. Email them. Post on their forum. Get your friends together and anyone else having this problem, and explain that you compiled the software yourself in UBot Studio, and it is definitely a false positive. If you do this as soon as you notice the issue, you are more likely to get a speedier resolution. Make no mistake – these AntiVirus companies are wrongly accusing you of a crime, and in doing so they may be harming your business unjustly. It is crucial that you do whatever you can to make these companies aware that you won’t be bullied.
      6. Let us know at Be sure to link us to the Virus Total report and let us know the following:
        • Were you including the installer in your compilation?
        • What plugins were included?
        • What virus scanners are detecting your product as a false positive?
        • Include the script, if possible.
      7. Send anyone who might be using your compiled executable an email letting them know what’s going on. Here’s a quick message you can use or modify:

I just got word that the software I made is being detected as a virus by X antivirus program. First of all, let me assure you that it does not contain any malicious script and is entirely safe to run.

Second, I’ve contacted X, the company listing it falsely, and you can follow the progress of this false positive submission here: [Link to your sales page or blog or forum post explaining where the ticket or email is and how they can get more info.]

As you know, virus scanners work by analyzing software for specific actions and potential threats. My software checks with a server when it’s loaded to see if it has to download any additional support files, and this is probably why it’s being detected as malicious. This is known as a “generic downloader” signature and is a common problem for producing false positives. [Here include any ambiguous wording that could help explain that the virus scanner isn’t sure that it’s actually a virus, and maybe even send this link to show that even Info Security professionals have this same problem.]

Sometimes virus scanners help, but often times, they tell you there’s something dangerous on your computer when there really isn’t. In this case, you are totally safe to run the file and I’m working on getting this issue corrected. If you have any questions please let me know. To run the file, simply add it to the ‘exceptions list’ in your AV scanner. Contact me if you need help doing this.


Concerned Software Creator


Over the years, we’ve worked to make UBot Studio friendlier to AV software, by changing how compiling works and how the calls-to-home work. We’ve done everything we can to keep AV companies out of our business, and out of your business. As a software creator, it is now up to you to take that flag, carry it with pride, and, if necessary, beat a few AV company executives over the head with it.