Aion_Inject V 0.1 | Speed Hack |

04/07/2010 02:29 Vesarn#61
Dr, Im having several problems the thing works but I can't free fly anywhere I think because our server uses a custom System.ovr also the game starts in windowed mode? why is that when its windowed I cannot see the map.
04/07/2010 07:44 russki1#62
Is it just me but yesterday on InfiniteAion everything was working fine. Now today when I set speed to 15, I get booted after about 3 seconds of speed running. And if I set to 30 I get booted in 1 second of running. Standing still is fine.
04/07/2010 11:08 reinfinium#63
it really works great man, still waiting for the 64bit version :)

more powers to you dude
04/07/2010 11:13 breack022#64
Quote:
Originally Posted by dr8breed View Post
Hmm.. might be the speed was set on too high.. what speed did u set it to be at? did u do a \g_minfov 150? did u set it back to speed 1 and try teleporting back there and see if u can fly?
i set the speed in 20-5...but i did not do zoom out..ok i'll try \g_minfov 150
;)
04/07/2010 11:32 breack022#65
..
04/07/2010 14:07 mkx#66
this hack only effects run speed?
Im playing on Infinite Aion
04/07/2010 16:39 russki1#67
On other servers it affects attack speed too. But on infinity only run speed and animation, also today I kept getting D/C if I ran around 10-20 speed in a few seconds.
04/07/2010 17:03 dr8breed#68
Quote:
Originally Posted by tupas3 View Post
The 1st time i started this v0.1 it only effected my atacking speed but the 2nd time it effected moving and so. how to make it only atacking speed?
To make it only affect attacking speed u have to find that exact value that controls the attack speed, delay, cooldown and its all possible using cheatengine... If u use speedhack on its own, you will speed everything up..


Quote:
Originally Posted by mkx View Post
this hack only effects run speed?
Im playing on Infinite Aion

In Infinite yea.. basically its because Infinite Aion is an advance private server that make uses anti-speedhack method to block speedhack. The method we all used is to bypass this but happens it only affects walking, running, healing, dodging, flying and teleporting speed..
That's why there is a major huge difference when u try that hack and use it on other servers besides at Infinite.



Just a basic plugin, Infinite Aion used to dc players that are speedhacking. (Credits to Lokizer for this)
Code:
Index: trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/Player.java
===================================================================
--- trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/Player.java    (revision 1676)
+++ trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/Player.java    (working copy)
@@ -31,6 +31,7 @@
 import com.aionemu.gameserver.model.gameobjects.PersistentState;
 import com.aionemu.gameserver.model.gameobjects.player.listeners.PlayerLoggedInListener;
 import com.aionemu.gameserver.model.gameobjects.player.listeners.PlayerLoggedOutListener;
+import com.aionemu.gameserver.model.gameobjects.player.speedhack.SpeedHack;
 import com.aionemu.gameserver.model.gameobjects.state.CreatureVisualState;
 import com.aionemu.gameserver.model.gameobjects.stats.PlayerGameStats;
 import com.aionemu.gameserver.model.gameobjects.stats.PlayerLifeStats;
@@ -88,6 +89,7 @@
     private CraftingTask        craftingTask;
     private int                    flightTeleportId;
     private int                    flightDistance;
+    private SpeedHack            speedHack;
 
     /**
      * Static information for players
@@ -110,6 +112,7 @@
         this.requester = new ResponseRequester(this);
         this.questStateList = new QuestStateList();
         this.titleList = new TitleList();
+        this.speedHack = new SpeedHack(this);
         controller.setOwner(this);
 
     }
@@ -814,6 +817,14 @@
         return isInVisualState(CreatureVisualState.BLINKING);
     }
 
+    /**
+     * @SpeedHack controller     
+     */
+    public SpeedHack getSpeedHack()
+    {
+        return speedHack;
+    }
+
     /**
      * Check is player is invul
      * 
Index: trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/PlayerController.java
===================================================================
--- trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/PlayerController.java    (revision 1676)
+++ trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/PlayerController.java    (working copy)
@@ -257,6 +257,11 @@
         if(!player.canAttack())
             return;
 
+        if(!player.getSpeedHack().getSHAttackSpeedCheck().canAttackYet())
+            return;
+
+        player.getSpeedHack().getSHAttackSpeedCheck().generateAttackTimeStamp();
+
         PlayerGameStats gameStats = player.getGameStats();
 
         Creature target = (Creature) sp.getWorld().findAionObject(targetObjectId);
@@ -333,6 +338,7 @@
     public void onStopMove()
     {
         super.onStopMove();
+        getOwner().getHeading();
     }
 
     @Override
@@ -340,6 +346,9 @@
     {
         if(this.getOwner().isCasting())
         {
+            // used for removing skillId from anti speed hack used skill map
+            this.getOwner().getSpeedHack().getSHSkillUseCheck().removeUsedSkills(this.getOwner().getCastingSkillId());
+
             this.getOwner().setCasting(null);
             PacketSendUtility.sendPacket(this.getOwner(), new SM_SKILL_CANCEL(this.getOwner()));
             PacketSendUtility.sendPacket(this.getOwner(), SM_SYSTEM_MESSAGE.STR_SKILL_CANCELED());
@@ -464,6 +473,7 @@
         PacketSendUtility.sendPacket(player, new SM_STATS_INFO(player));
 
         // add new skills
+        sp.getSkillLearnService().addMissingSkills(player);
         sp.getSkillLearnService().addNewSkills(player, false);
         if(level == 10)
         {
Index: trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/PlayerService.java
===================================================================
--- trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/PlayerService.java    (revision 1676)
+++ trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/PlayerService.java    (working copy)
@@ -379,6 +379,9 @@
         player.getCommonData().setOnline(true);
         DAOManager.getDAO(PlayerDAO.class).onlinePlayer(player, true);
         player.onLoggedIn();
+
+        // reset speed hack stuff to zero
+        player.getSpeedHack().resetSpeedHack();
     }
 
     /**
Index: trunk/AE-go_GameServer/src/com/aionemu/gameserver/skillengine/model/Skill.java
===================================================================
--- trunk/AE-go_GameServer/src/com/aionemu/gameserver/skillengine/model/Skill.java    (revision 1676)
+++ trunk/AE-go_GameServer/src/com/aionemu/gameserver/skillengine/model/Skill.java    (working copy)
@@ -119,6 +119,13 @@
         //start casting
         effector.setCasting(this);
         
+        // ----- check cooldown exploit (speedhack) --- /
+        if((effector instanceof Player) && 
+                !((Player)effector).getSpeedHack().getSHSkillUseCheck().canUseThatSkillYet(skillTemplate.getSkillId(), 
+                        skillTemplate.getCooldown()))
+            return;
+        // ----- end of speed hack check -------------- /
+
         Iterator<Creature> effectedIter = effectedList.iterator();
         while(effectedIter.hasNext())
         {
@@ -186,6 +193,11 @@
         //stop casting must be before preUsageCheck()
         effector.setCasting(null);
         
+        // ----- speed hack check ------------------- /
+        if(effector instanceof Player)
+            ((Player)effector).getSpeedHack().getSHSkillUseCheck().addUsedSkill(skillTemplate.getSkillId());
+        // ----- end of speed hack check ------------ /
+
         if(!preUsageCheck())
             return;
 
Index: trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SpeedHack.java
===================================================================
--- trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SpeedHack.java    (revision 0)
+++ trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SpeedHack.java    (revision 0)
@@ -0,0 +1,94 @@
+package com.aionemu.gameserver.model.gameobjects.player.speedhack;
+
+import com.aionemu.gameserver.model.gameobjects.player.Player;
+import com.aionemu.gameserver.model.gameobjects.player.speedhack.SHAttackSpeedCheck;
+import com.aionemu.gameserver.model.gameobjects.player.speedhack.SHSkillUseCheck;
+import com.aionemu.gameserver.utils.PacketSendUtility;
+
+public class SpeedHack {
+
+    private Player player;    
+    private SHAttackSpeedCheck shAttackSpeedCheck;
+    private SHSkillUseCheck shSkillUseCheck;
+
+    private int speedhackcounter = 0;
+    private int maxAbusedAttempt = 200;    // more than this attempt, then dc the client
+                    // only applied on regular attack hit, movement + skill only prevented not dc-ed
+
+    public SpeedHack(Player player)
+    {
+        this.player = player;
+        shAttackSpeedCheck = new SHAttackSpeedCheck(player);
+        shSkillUseCheck = new SHSkillUseCheck(player);
+    }
+
+    /**
+     * this method is use for getting how many times speed hack attempt is triggered.
+     * 
+     * @return how many times speed hack attempt triggered.
+     */
+    public int getCurrentCounter()
+    {
+        return speedhackcounter;
+    }
+
+    /**
+     * this method is use to add counter for speed hack attempt.
+     */
+    public void addCounter()
+    {
+        speedhackcounter++;
+    }
+
+    /**
+     * this method is use to get maxAbusedAttempt for speed hack
+     * 
+     * @return
+     */
+    public int getMaxAbusedAttempt()
+    {
+        return maxAbusedAttempt;
+    }
+
+    public SHAttackSpeedCheck getSHAttackSpeedCheck()
+    {
+        return shAttackSpeedCheck;
+    }
+
+    public SHSkillUseCheck getSHSkillUseCheck()
+    {
+        return shSkillUseCheck;
+    }
+
+
+    /**
+     * this method is use to check if player is abusing too much attempt of speed hack detection.
+     * 
+     * @return true if player is abusing too much or false if not.
+     */
+    public boolean isAbusingTooMuch()
+    {
+        if(speedhackcounter >= maxAbusedAttempt)
+            return true;
+        else
+            return false;
+    }
+
+    /**
+     * this method is use to schedule client disconnect
+     */
+    public void doSpeedHackDisconnectClient()
+    {
+        PacketSendUtility.sendMessage(player, "You have been triggered Speed Hack detection so you're disconnected.");
+        player.getClientConnection().close(true);
+    }
+
+    /**
+     * this method is used to reset speed hack counter and skill used maps.
+     */
+    public void resetSpeedHack()
+    {
+        getSHSkillUseCheck().clearUsedSkills();
+        this.speedhackcounter = 0;
+    }
+}
Index: trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SHAttackSpeedCheck.java
===================================================================
--- trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SHAttackSpeedCheck.java    (revision 0)
+++ trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SHAttackSpeedCheck.java    (revision 0)
@@ -0,0 +1,74 @@
+package com.aionemu.gameserver.model.gameobjects.player.speedhack;
+
+import com.aionemu.gameserver.model.gameobjects.player.Player;
+import com.aionemu.gameserver.model.gameobjects.stats.StatEnum;
+
+public class SHAttackSpeedCheck {
+    
+    private Long lastAttackTime;
+    private Player player;
+    
+    public SHAttackSpeedCheck(Player player)
+    {
+        this.player = player;
+    }    
+    
+    /**
+     * This method is for getting current attack speed of player.
+     * 
+     * @return attack speed of player.
+     */
+    public int getCurrentAtkSpeed()
+    {
+        return (int) player.getGameStats().getCurrentStat(StatEnum.ATTACK_SPEED);        
+    }
+    
+    /**
+     * This method is for generating attack time stamp.
+     */
+    public void generateAttackTimeStamp()
+    {
+        lastAttackTime = System.currentTimeMillis();
+    }
+
+    /** 
+     * This method is for getting last physical attack time stamp for current player
+     * 
+     * @return last physical attack time stamp.
+     *      
+     */    
+    public Long getLastAttackTime()
+    {
+        return lastAttackTime;
+    }
+
+    /** 
+     * This method is for getting last physical attack timestamp for current player
+     * 
+     * @return boolean true if player can attack, false if is not yet.
+     *       
+     */    
+    public boolean canAttackYet()
+    {
+        if(getLastAttackTime() != null)
+        {
+            Long timenow =  System.currentTimeMillis();
+            int delta = Math.round(timenow - getLastAttackTime()) + (getCurrentAtkSpeed() / 2); //for now just to be safe max speed                                                                                            ;
+            
+            if(getCurrentAtkSpeed() > delta)
+            {                
+                //if happened certain times too fast, lets just disconnect the client to decrease server load.
+                if(player.getSpeedHack().isAbusingTooMuch())
+                {                    
+                    player.getClientConnection().close(true);
+                }
+                
+                player.getSpeedHack().addCounter();
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+}
Index: trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SHSkillUseCheck.java
===================================================================
--- trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SHSkillUseCheck.java    (revision 0)
+++ trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/player/speedhack/SHSkillUseCheck.java    (revision 0)
@@ -0,0 +1,94 @@
+package com.aionemu.gameserver.model.gameobjects.player.speedhack;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.aionemu.gameserver.model.gameobjects.player.Player;
+
+public class SHSkillUseCheck {
+    
+    private Player player;
+    private ConcurrentHashMap <Integer, Long> usedSkills = new ConcurrentHashMap<Integer, Long>();
+    
+    public SHSkillUseCheck(Player player)
+    {
+        this.player = player;
+    }
+
+    /**
+     * This method is for generating skill use time stamp.
+     * 
+     * @return player skill time stamp when casting.
+     */
+    private Long generateSkillUseTime()
+    {
+        return System.currentTimeMillis() / 1000L;
+    }
+
+    /**
+     * This method is for checking if player is already using that skillId or not yet.
+     * 
+     * @param skillid
+     * @return boolean true or false
+     */
+    private boolean isAlreadyUsedSkill(int skillid) {
+        return usedSkills.containsKey(skillid);
+    }
+
+    /**
+     * This method is for adding skillId that is going to be used.
+     * @param skillid
+     */
+    public void addUsedSkill(int skillid) {
+        Long timenow = generateSkillUseTime();
+
+        if (!isAlreadyUsedSkill(skillid))
+            usedSkills.put(skillid, timenow);
+
+        else
+            usedSkills.replace(skillid, timenow);
+    }
+
+    /**
+     * This method is use for check if player can use that particular skillid or not yet.
+     * 
+     * @param skillid
+     * @param skillCoolDown
+     *
+     * @return boolean true if player can use or false if not.
+     */
+    public boolean canUseThatSkillYet(int skillid, int skillCoolDown) {
+    
+        if (isAlreadyUsedSkill(skillid)) {
+            Long timenow = generateSkillUseTime();
+            Long lastTimeUsed = usedSkills.get(skillid);
+
+            int deltaCoolDown = Math.round(timenow - lastTimeUsed);
+                deltaCoolDown = deltaCoolDown + Math.round(skillCoolDown * 0.35f); //just to be safe
+
+            if (skillCoolDown > deltaCoolDown)
+            {        
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method is used to remove skillId from map when cast is canceled.
+     * @param skillId
+     */
+    public void removeUsedSkills(int skillId)
+    {
+        if(usedSkills.containsKey(skillId))
+            usedSkills.remove(skillId);
+    }
+
+    /**
+     * This method is to clear all skillIds from the used skill map
+     */
+    public void clearUsedSkills() {
+        if(usedSkills != null)
+            usedSkills.clear();
+    }
+
+}
04/07/2010 18:05 breack022#69
how to delete the injector?
04/07/2010 18:53 russki1#70
dr8breed, do you think its possible to make a speedhack that will work on Infinite Aion? To counteract that plugin?
04/07/2010 19:32 aderbal#71
Pleaseeeeee make a 64 bit version soon!!!
04/07/2010 21:27 dr8breed#72
Quote:
Originally Posted by breack022 View Post
how to delete the injector?
Sure, just don't use that custom .exe i posted awhile ago and use this injectors instead if u have had any troubles with Aion_Inject auto injector. Just make sure the target program you wanna inject is either aion.bin or aion.exe (whichever is in you bin32 folder of aion game). This injectors also will work on any other games. Please also make sure to choose the .dll, set the process name and click on inject before you start the game. Also remember the method i had posted in this thread about the hidden console and \g_minfov 150 (or else it won't work depending on what server u play in).


If you just wanna delete the injector, its all inside your aion installation folder. Just delete the injector and don't use the custom .exe..

[Only registered and activated users can see links. Click Here To Register...]
(Both ai0n's speedhack.dll and the one im using .dll file are inside the compressed zip. Just choose whichever one that you like and inject the game)

[Only registered and activated users can see links. Click Here To Register...] (For this one just set the delays to 100 on both boxes)

[Only registered and activated users can see links. Click Here To Register...] (Everything is self explainable in version 2 release)


Credits goes to Faith for making the injectors


::::::::::EDIT (For x64-bit Operating System Users)::::::::::

For those of you whom have x64-bit OS and wanna try out these injectors, download the custom system.ovr below if you have not make any custom system.ovr yet and delete your current system.cfg file in aion installation folder. The game will make a new system.cfg once you launch the game after that. The hidden console (pause/break button) in-game will also be unlocked and you are able to do the '\g_minfov 150' command trick to zoom out far and turn on the hack..


[Only registered and activated users can see links. Click Here To Register...] (You can also edit the commands in this file by editing it using notepad)



Quote:
Originally Posted by russki1 View Post
dr8breed, do you think its possible to make a speedhack that will work on Infinite Aion? To counteract that plugin?



We can form up a team and make 1 if you want or stick to the method posted in this thread for the time being..
04/07/2010 23:54 krnelement#73
Thank you so much~!!! Works for the x64 windows 7~~~
04/08/2010 00:00 Almgandi#74
Have also Windows 7 64 bits.
When 64 bits version of the speedhack meat about come out?
04/08/2010 01:35 dr8breed#75
Quote:
Originally Posted by Almgandi View Post
Have also Windows 7 64 bits.
When 64 bits version of the speedhack meat about come out?
Not yet confirmed it may or may not work for you too and all guys/girls that have a x64-bit windows.. You can try the valkyrie injector with the speedhack.dll file all included in my above post.. :rolleyes: