It's up to you
There are two play styles (with regard to this question at least), with their own drawbacks and advantages.
The first is to keep the realms of the world (DM) and the player characters strictly separate. I use the term "Golden Box" to describe this. In Golden Box gameplay, the players cannot define anything about the world, including who an NPC does or does not know - that is in the purview of the DM. Similarly, the DM cannot define background for the player character.
The advantages to this method include not having to deal with this sort of question. The player only knows the NPC if you, the DM, say they do. The player can argue for it, usually backed up with a background, but in the end it's up to you.
The disadvantage to this is that there is very little flexibility, and the players can feel like they have very little agency over the game.
The second playstyle, which I will not name since the only name I know it by lacks general context, allows anyone to define anything, and it is only addressed if there is an issue or will be an issue if left unchecked.
The advantage to this kind of play is that the players usually have a lot more buy-in - they have created parts of the world. In situations where this is taken to its logical end, the players define the world, the npcs, and to an extent the antagonists. This can be a very satisfying way to play.
The disadvantage of this is primarily it gives 'that guy' a free pass for a long time (to wreck your plot), and it can make a game feel directionless.
These are extremes. You usually mix them when playing a game.
I would recommend, in your situation, that you tend towards the first. When the player declares something about the setting that gives them an advantage, have them justify it, or if the situation allows, to roll for it. Don't be afraid to say No, especially if the declaration the player makes is problematic.
You know you need to signpost your actions - but something I've learned in my - cough - years of DMing is that often when I think I'm making something incredibly obvious, my players think I'm dropping tiny hints at best.
You mentioned you're currently using things like letters on the dead guards and the actions of authorities. Do your players see these letters at all? Do the letters adequately explain the situation? If it's something like this one, while it may suffice to make your players feel guilty about killing that guard, it isn't necessarily indicative that the players are the bad guys. Likewise, if you haven't sufficiently established the nature of the authorities or the government (likely not given the players perceive it as "unjust"), the players have no reason to assume it's anything else.
Remember, your players are operating under typical RPG assumptions, which is that PCs are the heroes no matter what acts of criminality they get up to. Think about Link smashing pots in random people's houses, or Cloud slaughtering dozens of ShinRa guards. The plot still frames both Link and Cloud as heroes, in part because of Gameplay and Story Segregation, which requires the game to provide challenges and loot to the players even when it's not strictly logical; but also because that's just how RPGs tend to work.
In other words, you've answered your own question: you simply need to signpost more effectively.
In particular, focus on telegraphing to the players what their actions look like to innocent people of the country, and make it at least twice as obvious as you think you need to. Have villagers run away when the party approaches, screaming for help because "those mercenaries from $HomeCountry are here!". Have "wanted" posters everywhere, which specifically talk about the players' actions in terms that you'd normally see on a Disney villain's rap sheet. Have the next batch of heroes, as you suggested, try talking to the PCs before attacking, and use language specifically describing them as bad guys, such as "Halt, $HomeCountry soldiers! We know you have come to our nation to scout our defenses and assassinate our leaders. You have butchered our guards and allied with that most ancient of evils, a lich. Come peacefully and your deaths will be swift and painless, or stand and die like the villains you are!"
As @Mark Gardner noted in a comment and @Icyfire in an answer, it's especially important to use signposts which the PCs have reason to trust or believe. This could be friends of the PCs who say, "Man, you guys are getting pretty scary, just slaughtering all those guards like it's nothing..." and act generally hesitant around them; or trustworthy authority figures (if you have clerics, paladins, or similar religious characters, a priest or other religious authority can be very useful here) who comment that the PCs are useful and effective, but "if you weren't working for me I'd have arrested you by now".
The point here is that your players likely haven't caught on to how they're seen in this new country. They have no reason to believe their actions are not being ignored in typical RPG fashion - all they see is random encounters and boss fights. You need to make clear to them, repeatedly and excruciatingly from trustworthy sources, that this is not the case.
(As a side note, your players might well choose to continue as they have been, and run with their reputation as villains. Since you say you're fine running an evil party, there's nothing wrong with that, but at that point you'll want to break character and have a brief "Session Zero 2.0" where you check in with the players that this is, in fact, what they want.)
Remember that NPCs are people, not info dumps.
Your players are following what I'd call the video game model of NPC interaction. In a lot of RPG video games, the NPCs are infinitely patient and let you talk to them over and over, exploring all of their dialogue trees. Thus, the incentive for the player is to talk to them forever to get all of the possible information that the NPC knows.
However, in D&D, there's an actual person behind each NPC, and not just a dialogue tree. Therefore, you can respond as a person in a real conversation, instead of an infodump.
In my games, I accomplish this by giving each NPC a starting disposition toward the party and at least a skeleton of a personality. These things determine how an NPC is going to react and how much information they're willing to give. For example, a bartender might start off friendly, but if the PCs keep probing and pushing, he might become increasingly annoyed and hostile to the PCs. On the other hand, a kindly quest-giving wizard might be patient enough to tolerate any amount of questioning from the PCs.
Because you're playing a game, I find that I have the best success when these personality traits are exaggerated. For example, while a real-life bartender might only be subtly exasperated, your in-game one might become openly rude. In this way, you can give your players obvious social cues for when conversations are over.
It takes some time for your players to learn that social interaction in D&D is not the same as in video games, but they will figure it out over time. However, if you yourself are getting exasperated, you can always go for the brute-force strategy, and simply say something like "This NPC is not willing to tell you more," or "He doesn't know any more".