Jump to content

Report illegal usage of a cheating aimbot script


oORageOo
 Share

Recommended Posts

Hello,

 

Sorry if i posted in the wrong section , i didn't found any section type "report abuse" "hack" etc...

 

just take a look and advice if its authorized or not , sounds really suspicious.....:

 

 

 

Share this post


Link to post
Share on other sites

5 hours ago, oORageOo said:

just take a look and advice if its authorized or not , sounds really suspicious.....:

Please, explain hypothetical method of hacking and/or abuse

Share this post


Link to post
Share on other sites

ok :

"

Cheating in online games is defined as the action of pretending to comply with the rules of the game, while secretly subverting them to gain an unfair advantage over an opponent.[1] Depending on the game, different activities constitute cheating and it is either a matter of game policy or consensus opinion as to whether a particular activity is considered to be cheating.

Cheating reportedly exists in most multiplayer online games, but it is difficult to measure.[2] The Internet and darknets can provide players with the methodology necessary to cheat in online games, sometimes in return for a price.* - source wiki

 

now more seriously :

Aimbots and triggerbots

An aimbot (sometimes called "auto-aim") is a type of computer game bot[ used in multiplayer first-person shooter games to provide varying levels of automated target acquisition to the player. They are most common in first person shooter games, and are sometimes used along with a TriggerBot, which automatically shoots when an opponent appears within the field-of-view or aiming reticule of the player.

Aimbotting relies on each player's client computer receiving information about all other players, whether they are visible from the player's position or not. Targeting is a matter of determining the location of any opponent relative to the player's location and pointing the player's weapon at the target. This targeting works regardless of whether the opponent is behind walls or too far away to be seen directly.

Some servers allow inactive players to spectate, watching the game from the viewpoints of the active players. Recording of gameplay actions is also often possible. If someone was using a targeting aimbot, the bot would be obvious to the spectator as unnatural exact position tracking. Some aimbots and triggerbots attempt to hide from spectators the fact they are being used through a number of methods, such as delaying firing to hide the fact it shoots the instant an opponent is in the cheater's crosshair. Some Triggerbot programs can be easily toggled on and off using the mouse or keyboard.

Cheat suites may incorporate these in addition to other features, including adjustments to extrasensory perception, move speed, ammo count, and player radar. Neophytes may colloquially define these suites as aimbot programs....

 

basically it can be exploited to aim his target easily and take advantage on other players which normally is stricly forbidden in any mmo game and can result in a ban...

 

Share this post


Link to post
Share on other sites

 

2 hours ago, xKostyan said:

what exactly is suspicious there?

 

Dont act like an innocent guy please , i work in IT, and i know that his type of data can be easily used to compile an aimbot tool which is normally forbidden in any online game ....

Share this post


Link to post
Share on other sites

 

If You Don't Believe me i show You an exemple , and Be glad you Don't get banned already...

 

P.S : I hate cheaters

Share this post


Link to post
Share on other sites

Seriously? In the first video the target is barely getting hit, the wonky aiming is nothing of the sort of a bot, in the second case it is a bit strange but he wasn't dodging that well, and the third one is just an obvious scam, the video was made back in Age of Destroyers, like two years ago, and he doesn't even shoot at anything with it, the download site for that is just sketchy, the video that started the whole thing is showcasing the combat.log that is updating in real-time, it basically says everything that is happening in battle, more specifically buffs and debuffs being applied, by no means it can be helpful in making an aim-bot, are you sure you work in IT?

Share this post


Link to post
Share on other sites

It depends on which sort of bot your're working on, it can be really usefull yes , like it allready exist on Overwatch based on screen range and to "calibrate" :

 

For example :

 

  1. PLAYER_DATA GetMyPlayerData(void)
    PLAYER_DATA GetPlayerData(BYTE PlayerNumber)
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    PLAYER_DATA - I like to use some structs as well as functions. I was taught this way by evolution so i got used to it mu PLAYER_DATA structure holds valuable information about a player. Such as:
    Code:
    typedef struct _PLAYER_DATA {
    DWORD baseadd; // base address of this current player
    DWORD coordEW; // East/West (X) co-ord
    DWORD coordNS; // North/South (Y) co-ord
    DWORD coordUD; // Up/Down (Z) co-ord
    DWORD coordEWa; // The address of the players EW co-ord
    DWORD coordNSa; // The address of the players NS co-ord
    DWORD coordUDa; // The address of the players UD (up/down..wth was i thinking when naming this) co-ord
    DWORD lookX; // The players X-axis look (what will change if you move the mouse side to side)
    DWORD lookY; // The players Y-axis look (what will change if you move the mouse forwards and backwards)
    DWORD lookXa; // The address of the X look
    DWORD lookYa; // The address of the Y look
    char name; // Holds the current players name
    DWORD namea; // The address of the current players name
    } PLAYER_DATA;
    I dont really know why I put all the addresses for everything in the struct, but helloo, might come in use when making something one day. All the stuff in there will come to use when making our aimbot, so heres how to search for each of them (in DFX at least).
    The easiest to start with is name, use Artmoneys Text search
    Co-ords:
    NS - Move north, search increased, move south, search decreased
    EW - Move east, search increased, move west, search decreased
    UD - Move up (a hill/ladder), search increased, move down, search decreased
    LookX - Move mouse left/right, search has changed set your search range to around the other addies to narrow search down (this value may be different to DFX. In DFX, 0 was east, and it increased as you went anti-clockwise until you got to just before east, which was 0xFFFFFFFF)
    LookY - Move mouse forward/backward, search has changed
    You should be able to get the player base address from near enough any of these, and a pointer to get it in game. I use 2 pointers, 1 which always points to player 0s (or 1, the 1st player in memory)s base address, and 1 which always points to the base address of my player. Now we can modify the GetMyPlayerData and GetPlayerData functions to get us this info:

    Now at the top of the C++, I define the bases:
    Code:
    #define mBase 0xBD63D8
    #define hBase 0xB0D228
    ///
    PLAYER_DATA GetMyPlayerData(void)
    {
    PLAYER_DATA Player; // Create a blank PLAYER_DATA struct
    ZeroMemory(&Player, sizeof(PLAYER_DATA)); // Initiate it all to 0 (thanks L.Spiro, this solved some problems)
    Peek((void*)mBase,(void*)&Player.baseadd,4); // Get our players Base Address from the pointer
    /*****made by stickleback******/
    Player.coordEWa = Player.baseadd + 0Ãâ€â€8; // Get all the addies for everything…the 0Ãâ€â€8, 0xC and **** are the offsets I found for DFX
    Player.coordNSa = Player.baseadd + 0xC;
    Player.coordUDa = Player.baseadd + 0Ãâ€â€10;
    Player.lookXa = Player.baseadd + 0Ãâ€â€14;
    Player.lookYa = Player.baseadd + 0Ãâ€â€18;
    Player.namea = Player.baseadd + 0xF4;
    Peek((void*)Player.coordEWa,(void*)&Player.coordEW ,4); // Now we got all the addies, read in the info from em all
    Peek((void*)Player.coordNSa,(void*)&Player.coordNS ,4);
    Peek((void*)Player.coordUDa,(void*)&Player.coordUD ,4);
    Peek((void*)Player.lookXa,(void*)&Player.lookX,4);
    Peek((void*)Player.lookYa,(void*)&Player.lookY,4);
    Peek((void*)Player.namea,(void*)&Player.name,15);

    return Player; // Give our PLAYER_DATA Player, as the return value
    }
    ///
    PLAYER_DATA GetPlayerData(BYTE PlayerNum) // Takes the number of the player as a param
    {
    PLAYER_DATA Player;
    ZeroMemory(&Player, sizeof(PLAYER_DATA));
    Peek((void*)hBase,(void*)&Player.baseadd,4);

    Player.baseadd = Player.baseadd + (PlayerNum*0Ãâ€â€388); // 0Ãâ€â€388 is the gap between players, starting with player 1

    Player.coordEWa = Player.baseadd + 0Ãâ€â€8;
    Player.coordNSa = Player.baseadd + 0xC;
    Player.coordUDa = Player.baseadd + 0Ãâ€â€10;
    Player.lookXa = Player.baseadd + 0Ãâ€â€14;
    Player.lookYa = Player.baseadd + 0Ãâ€â€18;
    Player.namea = Player.baseadd + 0xF4;

    Peek((void*)Player.coordEWa,(void*)&Player.coordEW ,4);
    Peek((void*)Player.coordNSa,(void*)&Player.coordNS ,4);
    Peek((void*)Player.coordUDa,(void*)&Player.coordUD ,4);
    Peek((void*)Player.lookXa,(void*)&Player.lookX,4);
    Peek((void*)Player.lookYa,(void*)&Player.lookY,4);
    Peek((void*)Player.namea,(void*)&Player.name,15);

    return Player;
    }
    ///

    Now that we've made our functions to collect all the data we need, its time to get to the core of the aimbot. This will be some Hcore reading so take a brake and make sure you really suck this in
    This uses Trigganometry
    Maths knowledge is needed to make this! If youre useless at maths, and still reading, youre also useless at english for not understanding the knowledge requirements at the top Lets start with the X look.
    Because DFX works around the East point (, facing Directly east = 00000000/0xFFFFFFFF), then all our calculations will be made off it. To help the understanding with this tutorial, Ill include some snazzy little photoshuppered drawings, woo
    The aimbot works in 4 sectors. This makes things easier when finding out distances. Here are the sectors and how to determine what sector an enemy is in :

    Sector 1 = South-East of our position
    Sector 2 = South-West of our position
    Sector 3 = North-West of our position
    Sector 4 = North-East of our position

    So, lets add these sectors to our source code. Note that also we have to tell our aimbot what to do if they are, for example, east of us, but the same on the NS axis. No need to put the code for if they are the same on both the NS and the EW axis, as otherwise you wont need it to set an aim for you, youre on them
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber); // oP = Opposition’s Player
    PLAYER_DATA cP = GetMyPlayerData(); // cP = Current Player (our player) .. sorry for bad var names

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    }
    }

    Now, to get the angle we need to look, we have to make a triangle between the EW axis, us, and the player. Then we have to find the angle of which we are the apex. Heres 1 of the snazzy little drawings:



    This is a top view :
    Blue dot = Our player
    Red dot = enemy
    Green = The triangle we make
    Purple = The angle we need to find
    Orange = The differences we need to work out for the angle

    Incase youve forgotten Triganometry, then due to the 2 side we can get the easiest we will the Tangent function :
    Tan(angle) = Opposite/Adjacent

    In all our sectors, the Adjacent is the EW difference, and the Opposite is the NS difference. So lets add some coding to our function :
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber);
    PLAYER_DATA cP = GetMyPlayerData();

    double EWdif; // These need to be double for our Trig calculations to work later on
    double NSdif;

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    }
    }

    Please note that in each sector, the calculations ARE NOT the same. You need to do the biggest take away the smallest hope thats obvious. Right, so now we have this, we need to get the angle in degrees. For this, we need to do go back to the formula :

    Tan(angle) = Opposite/Adjacent
    Tan(angle) = NSdif/EWdif

    We need to do the Inverse Tangent function of this, so that we get the angle rather than the Tangent of the angle. The function to do this is atan (could have used atan2 but didnt know of this function at the time of programming). It takes 1 double parameter, and returns a double value of the angle in radians. But this is no good for us, we want it in degrees. Well, to turn radians into degrees, its a multiplication of, as found off the tinternet Remember to include <math.h> for the atan function

    Then, due to our X-look not having a maximum of 360, it goes upto 0xFFFFFFFF (4294967295), we need to find the percentage what this angle is of 360. This is so that we can find out what value we need to use, for example:

    If the angle was 90 degrees
    90/360 = 0.25 (decimal percentage of the angle)
    0xFFFFFFFF * 0.25 = 3FFFFFFF (roughly), which is the new value we need to use

    Lets put this in the code.
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber);
    PLAYER_DATA cP = GetMyPlayerData();

    double EWdif;
    double NSdif;
    double angleA; // The angle in degrees between the enemy, east, and us
    double angleP; // The decimal percentage of the angle

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578; // Remember, the 57.29578 is to convert from radians to degrees
    angleP = (angleA/360);
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    }
    }


    Next, we need to know what to do with that code now we got a Ss stickleback special coming rite up for ya



    To understand, remember that 0 on our X-Look is EASTand that the values go counter-clockwise. Lets revert back to the sectors :

    Sector 1 (SE) = 0xFFFFFFFF (east) - our new value
    Sector 2 (SW) = 0xFFFFFFFF/2 (west) + our new value
    Sector 3 (NW) = 0xFFFFFFFF/2 (west) - our new value
    Sector 4 (NE) = 0 (east) + our new value

    Before we write them though, we have to convert them back to DWORDs, from doubles. Heres the new code :
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber);
    PLAYER_DATA cP = GetMyPlayerData();

    double EWdif;
    double NSdif;
    double angleA;
    double angleP;
    double newValue; // To hold our new double value
    DWORD newValue2; // To convert our double back into DWORD ready for writing

    double halfCircle = 0xFFFFFFFF/2; // Just to make the code a bit more readable

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = 0xFFFFFFFF - (0xFFFFFFFF*angleP); // As described above
    newValue2 = newValue; // Put it into DWORD (may get compile warnings about losing data..thats the whole reason we’re doing it
    Poke((void*)cP.lookXa, &newValue2,4); // Write our new value
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = halfCircle + (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = halfCircle - (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = 0 + (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }
    }

    WOOOO, we now have our X look tracking the enemy we specify (or at least, if you copied and pasted right you should have )

    If youve managed to read this all in 1 go, well done *round of applause*, this ****ers taking me ages to write. Okey doke, snack time again, then its onto setting the Y-look

    //-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//

    Right, for our Y-look its still trig, its still tan, and we still have to make a triangle. This time, imagine we already have X-look locked on them, and are looking straight in front.the point infront which is the same level distance away from us as he is, which is right above/below him. That is 1 point, then our player, then the enemy player. Here is another class drawing (man, I should put this **** on deviantart :-P) :
    This time there are only 2 sectors if the enemy is below us, or above us.
    The distance from us to him along a level view is obtained by pythagoras on the EWdif and NWdif. We then use that, and the UDdif as the Opposite and Adjacent and do the same stuff as before. This time though, we need to include a bit for if the enemy is at the same height as us too
    Heres the updated code :
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber);
    PLAYER_DATA cP = GetMyPlayerData();

    double EWdif;
    double NSdif;
    double UDdif;

    double angleA;
    double angleP;
    double angleB;
    double angleBP;

    double newValue;
    DWORD newValue2;

    double newValueb;
    DWORD newValueb2;

    double halfCircle = 0xFFFFFFFF/2;

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = 0xFFFFFFFF - (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = halfCircle + (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = halfCircle - (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = 0 + (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    // Done the X-look, now this is for the Y-look

    double flatDist = sqrt((EWdif*EWdif)+(NSdif*NSdif)); // Get the level distance between us and the enemy, using pythagoras

    if(oP.coordUD == cP.coordUD)
    {
    BYTE zero4[4] = {0Ãâ€â€00,0Ãâ€â€00,0Ãâ€â€00,0 Ãâ€â€00};
    Poke((void*)cP.lookYa,zero4, 4); // If we are equal height, set our Y-look to 0 (level)

    } else if(oP.coordUD > cP.coordUD)
    {
    UDdif = oP.coordUD - cP.coordUD; // Work out our UDdif
    angleB = atan(UDdif/flatDist) * 57.29578; // Same old stuff as before
    angleBP = (angleB/360);
    newValueb = 0 + (0xFFFFFFFF*angleBP);
    newValueb2 = newValueb;
    Poke((void*)cP.lookYa, &newValueb2,4);

    } else if (oP.coordUD < cP.coordUD)
    {
    UDdif = cP.coordUD - oP.coordUD;
    angleB = atan(UDdif/flatDist) * 57.29578;
    angleBP = (angleB/360);
    newValueb = 0xFFFFFFFF - (0xFFFFFFFF*angleBP);
    newValueb2 = newValueb;
    Poke((void*)cP.lookYa, &newValueb2,4);

I can give you some private lessons if you need ;)

Share this post


Link to post
Share on other sites

10 minutes ago, oORageOo said:

It dépends on which sort of bot your're working on it can be really usefull yes

You don't have any clue what is written down in the combat.log? Yes there are a few cases that you could use the content unfairly, but it is utterly useless for a aimbot (which you claimed even in the title of this post). The only unfair use cases are to get a few additional warning sounds for some events (e.g. Torpedo launched in Sector mode) or printing the modules of the enemies ship.

Share this post


Link to post
Share on other sites

inb4 lock

 

Reading player location requires reading the memory that can be easily detected. You can paste some random posts from hack forums, but this doesn't prove that you understand how this game works, because it works differently than generic shooters with server-side movement.

Share this post


Link to post
Share on other sites

What's the issue? How and why do you think that this is a hack?

This weapon automatically fires horizontally if an enemy player is nearby. That's its function.

Share this post


Link to post
Share on other sites

6 hours ago, oORageOo said:

 

Dont act like an innocent guy please , i work in IT, and i know that his type of data can be easily used to compile an aimbot tool which is normally forbidden in any online game ....

I highly doubt that, because a good IT person would first try to asses the problem and get more information, while you acted like that old lady from the reception that screams "nothing works!", while she forgot to turn on her monitor to the wall plug.

You really have no idea what you are talking about in a context of Star Conflict.

 

Spoiler
4 hours ago, oORageOo said:

It depends on which sort of bot your're working on, it can be really usefull yes , like it allready exist on Overwatch based on screen range and to "calibrate" :

 

For example :

 

  1. PLAYER_DATA GetMyPlayerData(void)
    PLAYER_DATA GetPlayerData(BYTE PlayerNumber)
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    PLAYER_DATA - I like to use some structs as well as functions. I was taught this way by evolution so i got used to it mu PLAYER_DATA structure holds valuable information about a player. Such as:
    Code:
    typedef struct _PLAYER_DATA {
    DWORD baseadd; // base address of this current player
    DWORD coordEW; // East/West (X) co-ord
    DWORD coordNS; // North/South (Y) co-ord
    DWORD coordUD; // Up/Down (Z) co-ord
    DWORD coordEWa; // The address of the players EW co-ord
    DWORD coordNSa; // The address of the players NS co-ord
    DWORD coordUDa; // The address of the players UD (up/down..wth was i thinking when naming this) co-ord
    DWORD lookX; // The players X-axis look (what will change if you move the mouse side to side)
    DWORD lookY; // The players Y-axis look (what will change if you move the mouse forwards and backwards)
    DWORD lookXa; // The address of the X look
    DWORD lookYa; // The address of the Y look
    char name; // Holds the current players name
    DWORD namea; // The address of the current players name
    } PLAYER_DATA;
    I dont really know why I put all the addresses for everything in the struct, but helloo, might come in use when making something one day. All the stuff in there will come to use when making our aimbot, so heres how to search for each of them (in DFX at least).
    The easiest to start with is name, use Artmoneys Text search
    Co-ords:
    NS - Move north, search increased, move south, search decreased
    EW - Move east, search increased, move west, search decreased
    UD - Move up (a hill/ladder), search increased, move down, search decreased
    LookX - Move mouse left/right, search has changed set your search range to around the other addies to narrow search down (this value may be different to DFX. In DFX, 0 was east, and it increased as you went anti-clockwise until you got to just before east, which was 0xFFFFFFFF)
    LookY - Move mouse forward/backward, search has changed
    You should be able to get the player base address from near enough any of these, and a pointer to get it in game. I use 2 pointers, 1 which always points to player 0s (or 1, the 1st player in memory)s base address, and 1 which always points to the base address of my player. Now we can modify the GetMyPlayerData and GetPlayerData functions to get us this info:

    Now at the top of the C++, I define the bases:
    Code:
    #define mBase 0xBD63D8
    #define hBase 0xB0D228
    ///
    PLAYER_DATA GetMyPlayerData(void)
    {
    PLAYER_DATA Player; // Create a blank PLAYER_DATA struct
    ZeroMemory(&Player, sizeof(PLAYER_DATA)); // Initiate it all to 0 (thanks L.Spiro, this solved some problems)
    Peek((void*)mBase,(void*)&Player.baseadd,4); // Get our players Base Address from the pointer
    /*****made by stickleback******/
    Player.coordEWa = Player.baseadd + 0Ãâ€â€8; // Get all the addies for everything…the 0Ãâ€â€8, 0xC and **** are the offsets I found for DFX
    Player.coordNSa = Player.baseadd + 0xC;
    Player.coordUDa = Player.baseadd + 0Ãâ€â€10;
    Player.lookXa = Player.baseadd + 0Ãâ€â€14;
    Player.lookYa = Player.baseadd + 0Ãâ€â€18;
    Player.namea = Player.baseadd + 0xF4;
    Peek((void*)Player.coordEWa,(void*)&Player.coordEW ,4); // Now we got all the addies, read in the info from em all
    Peek((void*)Player.coordNSa,(void*)&Player.coordNS ,4);
    Peek((void*)Player.coordUDa,(void*)&Player.coordUD ,4);
    Peek((void*)Player.lookXa,(void*)&Player.lookX,4);
    Peek((void*)Player.lookYa,(void*)&Player.lookY,4);
    Peek((void*)Player.namea,(void*)&Player.name,15);

    return Player; // Give our PLAYER_DATA Player, as the return value
    }
    ///
    PLAYER_DATA GetPlayerData(BYTE PlayerNum) // Takes the number of the player as a param
    {
    PLAYER_DATA Player;
    ZeroMemory(&Player, sizeof(PLAYER_DATA));
    Peek((void*)hBase,(void*)&Player.baseadd,4);

    Player.baseadd = Player.baseadd + (PlayerNum*0Ãâ€â€388); // 0Ãâ€â€388 is the gap between players, starting with player 1

    Player.coordEWa = Player.baseadd + 0Ãâ€â€8;
    Player.coordNSa = Player.baseadd + 0xC;
    Player.coordUDa = Player.baseadd + 0Ãâ€â€10;
    Player.lookXa = Player.baseadd + 0Ãâ€â€14;
    Player.lookYa = Player.baseadd + 0Ãâ€â€18;
    Player.namea = Player.baseadd + 0xF4;

    Peek((void*)Player.coordEWa,(void*)&Player.coordEW ,4);
    Peek((void*)Player.coordNSa,(void*)&Player.coordNS ,4);
    Peek((void*)Player.coordUDa,(void*)&Player.coordUD ,4);
    Peek((void*)Player.lookXa,(void*)&Player.lookX,4);
    Peek((void*)Player.lookYa,(void*)&Player.lookY,4);
    Peek((void*)Player.namea,(void*)&Player.name,15);

    return Player;
    }
    ///

    Now that we've made our functions to collect all the data we need, its time to get to the core of the aimbot. This will be some Hcore reading so take a brake and make sure you really suck this in
    This uses Trigganometry
    Maths knowledge is needed to make this! If youre useless at maths, and still reading, youre also useless at english for not understanding the knowledge requirements at the top Lets start with the X look.
    Because DFX works around the East point (, facing Directly east = 00000000/0xFFFFFFFF), then all our calculations will be made off it. To help the understanding with this tutorial, Ill include some snazzy little photoshuppered drawings, woo
    The aimbot works in 4 sectors. This makes things easier when finding out distances. Here are the sectors and how to determine what sector an enemy is in :

    Sector 1 = South-East of our position
    Sector 2 = South-West of our position
    Sector 3 = North-West of our position
    Sector 4 = North-East of our position

    So, lets add these sectors to our source code. Note that also we have to tell our aimbot what to do if they are, for example, east of us, but the same on the NS axis. No need to put the code for if they are the same on both the NS and the EW axis, as otherwise you wont need it to set an aim for you, youre on them
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber); // oP = Opposition’s Player
    PLAYER_DATA cP = GetMyPlayerData(); // cP = Current Player (our player) .. sorry for bad var names

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    }
    }

    Now, to get the angle we need to look, we have to make a triangle between the EW axis, us, and the player. Then we have to find the angle of which we are the apex. Heres 1 of the snazzy little drawings:



    This is a top view :
    Blue dot = Our player
    Red dot = enemy
    Green = The triangle we make
    Purple = The angle we need to find
    Orange = The differences we need to work out for the angle

    Incase youve forgotten Triganometry, then due to the 2 side we can get the easiest we will the Tangent function :
    Tan(angle) = Opposite/Adjacent

    In all our sectors, the Adjacent is the EW difference, and the Opposite is the NS difference. So lets add some coding to our function :
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber);
    PLAYER_DATA cP = GetMyPlayerData();

    double EWdif; // These need to be double for our Trig calculations to work later on
    double NSdif;

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    }
    }

    Please note that in each sector, the calculations ARE NOT the same. You need to do the biggest take away the smallest hope thats obvious. Right, so now we have this, we need to get the angle in degrees. For this, we need to do go back to the formula :

    Tan(angle) = Opposite/Adjacent
    Tan(angle) = NSdif/EWdif

    We need to do the Inverse Tangent function of this, so that we get the angle rather than the Tangent of the angle. The function to do this is atan (could have used atan2 but didnt know of this function at the time of programming). It takes 1 double parameter, and returns a double value of the angle in radians. But this is no good for us, we want it in degrees. Well, to turn radians into degrees, its a multiplication of, as found off the tinternet Remember to include <math.h> for the atan function

    Then, due to our X-look not having a maximum of 360, it goes upto 0xFFFFFFFF (4294967295), we need to find the percentage what this angle is of 360. This is so that we can find out what value we need to use, for example:

    If the angle was 90 degrees
    90/360 = 0.25 (decimal percentage of the angle)
    0xFFFFFFFF * 0.25 = 3FFFFFFF (roughly), which is the new value we need to use

    Lets put this in the code.
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber);
    PLAYER_DATA cP = GetMyPlayerData();

    double EWdif;
    double NSdif;
    double angleA; // The angle in degrees between the enemy, east, and us
    double angleP; // The decimal percentage of the angle

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578; // Remember, the 57.29578 is to convert from radians to degrees
    angleP = (angleA/360);
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    }
    }


    Next, we need to know what to do with that code now we got a Ss stickleback special coming rite up for ya



    To understand, remember that 0 on our X-Look is EASTand that the values go counter-clockwise. Lets revert back to the sectors :

    Sector 1 (SE) = 0xFFFFFFFF (east) - our new value
    Sector 2 (SW) = 0xFFFFFFFF/2 (west) + our new value
    Sector 3 (NW) = 0xFFFFFFFF/2 (west) - our new value
    Sector 4 (NE) = 0 (east) + our new value

    Before we write them though, we have to convert them back to DWORDs, from doubles. Heres the new code :
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber);
    PLAYER_DATA cP = GetMyPlayerData();

    double EWdif;
    double NSdif;
    double angleA;
    double angleP;
    double newValue; // To hold our new double value
    DWORD newValue2; // To convert our double back into DWORD ready for writing

    double halfCircle = 0xFFFFFFFF/2; // Just to make the code a bit more readable

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = 0xFFFFFFFF - (0xFFFFFFFF*angleP); // As described above
    newValue2 = newValue; // Put it into DWORD (may get compile warnings about losing data..thats the whole reason we’re doing it
    Poke((void*)cP.lookXa, &newValue2,4); // Write our new value
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = halfCircle + (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = halfCircle - (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = 0 + (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }
    }

    WOOOO, we now have our X look tracking the enemy we specify (or at least, if you copied and pasted right you should have )

    If youve managed to read this all in 1 go, well done *round of applause*, this ****ers taking me ages to write. Okey doke, snack time again, then its onto setting the Y-look

    //-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//

    Right, for our Y-look its still trig, its still tan, and we still have to make a triangle. This time, imagine we already have X-look locked on them, and are looking straight in front.the point infront which is the same level distance away from us as he is, which is right above/below him. That is 1 point, then our player, then the enemy player. Here is another class drawing (man, I should put this **** on deviantart :-P) :
    This time there are only 2 sectors if the enemy is below us, or above us.
    The distance from us to him along a level view is obtained by pythagoras on the EWdif and NWdif. We then use that, and the UDdif as the Opposite and Adjacent and do the same stuff as before. This time though, we need to include a bit for if the enemy is at the same height as us too
    Heres the updated code :
    Code:
    void SetCrosshairOnEnemy(BYTE PlayerNumber)
    {
    PLAYER_DATA oP = GetPlayerData(PlayerNumber);
    PLAYER_DATA cP = GetMyPlayerData();

    double EWdif;
    double NSdif;
    double UDdif;

    double angleA;
    double angleP;
    double angleB;
    double angleBP;

    double newValue;
    DWORD newValue2;

    double newValueb;
    DWORD newValueb2;

    double halfCircle = 0xFFFFFFFF/2;

    /*Sec 1*/
    if(oP.coordEW > cP.coordEW && oP.coordNS <= cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = 0xFFFFFFFF - (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 2*/
    if(oP.coordEW <= cP.coordEW && oP.coordNS < cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = cP.coordNS - oP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = halfCircle + (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 3*/
    if(oP.coordEW < cP.coordEW && oP.coordNS >= cP.coordNS)
    {
    EWdif = cP.coordEW - oP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = halfCircle - (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    /*Sec 4*/
    if(oP.coordEW >= cP.coordEW && oP.coordNS > cP.coordNS)
    {
    EWdif = oP.coordEW - cP.coordEW;
    NSdif = oP.coordNS - cP.coordNS;
    angleA = atan(NSdif/EWdif) * 57.29578;
    angleP = (angleA/360);
    newValue = 0 + (0xFFFFFFFF*angleP);
    newValue2 = newValue;
    Poke((void*)cP.lookXa, &newValue2,4);
    }

    // Done the X-look, now this is for the Y-look

    double flatDist = sqrt((EWdif*EWdif)+(NSdif*NSdif)); // Get the level distance between us and the enemy, using pythagoras

    if(oP.coordUD == cP.coordUD)
    {
    BYTE zero4[4] = {0Ãâ€â€00,0Ãâ€â€00,0Ãâ€â€00,0 Ãâ€â€00};
    Poke((void*)cP.lookYa,zero4, 4); // If we are equal height, set our Y-look to 0 (level)

    } else if(oP.coordUD > cP.coordUD)
    {
    UDdif = oP.coordUD - cP.coordUD; // Work out our UDdif
    angleB = atan(UDdif/flatDist) * 57.29578; // Same old stuff as before
    angleBP = (angleB/360);
    newValueb = 0 + (0xFFFFFFFF*angleBP);
    newValueb2 = newValueb;
    Poke((void*)cP.lookYa, &newValueb2,4);

    } else if (oP.coordUD < cP.coordUD)
    {
    UDdif = cP.coordUD - oP.coordUD;
    angleB = atan(UDdif/flatDist) * 57.29578;
    angleBP = (angleB/360);
    newValueb = 0xFFFFFFFF - (0xFFFFFFFF*angleBP);
    newValueb2 = newValueb;
    Poke((void*)cP.lookYa, &newValueb2,4);

I can give you some private lessons if you need ;)

 

 

Yeah, we get it - you can Google, so can we not really impressive. 

Share this post


Link to post
Share on other sites

9 hours ago, oORageOo said:

 

Dont act like an innocent guy please , i work in IT, and i know that his type of data can be easily used to compile an aimbot tool which is normally forbidden in any online game ....

Ok. Please - enlighten me. In your example you have a tailing logfile in which you have time of the event, source object of the event, target and mod/dmg applied to the target object. Now, please explain how can you extract even the basic data required for your code example like:

coordEWa

coordNSa

coordUDa 

and read from them fundamental data required event to start plotting anything further:

coordEW
coordNS

coordUD ?

 

Share this post


Link to post
Share on other sites

11 hours ago, xXThunderFlameXx said:

the third one is just an obvious scam

Actually it's not - it's just showing how to manually set up the mouse sensitivity to break the camera lock faster trading accuracy for speed.

EDIT: the video is actually reupload of EG's video of how to edit manually the config file. HOWEVER link in the description of that video leads to the scam site.

Share this post


Link to post
Share on other sites

Well that's nice, but it's not an aimbot.

Share this post


Link to post
Share on other sites

23 minutes ago, OwnageMaster said:

Actually it's not - it's just showing how to manually set up the mouse sensitivity to break the camera lock faster trading accuracy for speed.

Actually, it is. It is a reupload of this video https://www.youtube.com/watch?v=LsS0vyHpvbI with a download link which probably contains malware. The content of the vid itself may not be scam.

 

Share this post


Link to post
Share on other sites

1 hour ago, John161 said:

Actually, it is. It is a reupload of this video https://www.youtube.com/watch?v=LsS0vyHpvbI with a download link which probably contains malware. The content of the vid itself may not be scam.

 

I'll be damned. I just watched that video here and recalled that EG was showing it to me. The link in the video description lead indeed to the scam site that can upload harmful stuff to your computer as soon as you click DOWNLOAD (sorry - I don't have means to check the payload here).

12 hours ago, oORageOo said:

P.S : I hate cheaters

And I hate people posting links to scamming site. 

Share this post


Link to post
Share on other sites

  • 3 years later...

This is definitely not aimbot. It looks like it, but far from those really snappy aimbots. 

 

About cheaters, it's an online game bro. There will always be cheaters lol. Even games with anticheat can't stop them. Funny thing is people risk their account getting banned, but they simply don't care.

Share this post


Link to post
Share on other sites

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...