Close
Page 2 of 4 FirstFirst 1 2 3 4 LastLast
Showing results 11 to 20 of 31
  1. #11

    Default

    I've disassembled this software and there are indeed delay subroutines built into the software:

    An example of this:

    Public Sub Delay(ByVal Time As Integer)
    Dim num As Integer = (Environment.TickCount + Time)
    Do While (Environment.TickCount < num)
    Application.DoEvents
    Thread.Sleep(2)
    Loop
    End Sub

    And directed to the developer, what's the deal with AmericaRunsOnDunkin? ?(

    I personally don't like running software that can talk home. Having a global keyboard hook as part of the software, it can easily be converted into a keylogger, you can replace the software without the user knowing, and then you're hacking accounts.

    Too risky IMHO.
    Nisch

  2. #12

    Default

    The part where I say the file can be replaced with a "hacked" file is this:

    Private Function ReplaceUpdaterFile() As Boolean
    Try
    If File.Exists("WoWMultiUpdater.new") Then
    If File.Exists("WoWMultiUpdater.exe") Then
    File.Delete("WoWMultiUpdater.exe")
    End If
    File.Copy("WoWMultiUpdater.new", "WoWMultiUpdater.exe")
    File.Delete("WoWMultiUpdater.new")
    Return True
    End If
    Return True
    Catch exception1 As Exception
    Return False
    End Try
    End Function


    That routine basically deletes the file you have there and replaces it. You could update their systems with a keylogger, and you have access to a LOT of accounts.

    Not good.
    Nisch

  3. #13

    Default

    It even says in the Assembly Description of the DLL you reference:

    <Assembly: AssemblyDescription("MacroEngine provides the tools necessary to write software the automates tasks.")>

    Bad juju.
    Nisch

  4. #14

    Default

    Quote Originally Posted by 'Nisch',index.php?page=Thread&postID=181876#post18 1876
    It even says in the Assembly Description of the DLL you reference:

    <Assembly: AssemblyDescription("MacroEngine provides the tools necessary to write software the automates tasks.")>

    Bad juju.
    Yes, as I said before.. My MacroEngine I wrote was a conglomerate of a bunch of utility code pieced together. It's really a library I use when I write automated software. My primary work in software is automation, not for games persay, but I've created this library for personal use.

    Yes, my application comes with an application WoWMultiUpdater.exe which downloads a file called listing.xml which contains information about the files the program uses. It's a self updating application. As I update it, it automatically downloads updates.

    I understand the only function I have in my software right now that can possibly put someome at risk was the "automated delay" with keypresses. I honestly did not know this was not legal according to the ToS since I have a G15 Logitech which does the same thing. I assumed it was, and I was wrong I am sorry.

    I understand I need a full feature list.. I am working on it.. Again please remember that I am just trying to get this software out there so I can get more feedback to make it more useful.

    Also, the software does not use global keyboard hooking. The keyboard code I use is basically from a program called Auto IT. It simply registers a global hotkey then intercepts it when it's pressed and then forwards the response to the "hosts" when you set it up. Whether these "hosts" are another computer or a local running copy of WoW.

    Thanks for all your feedback.

    Matt

  5. #15

    Default

    Haha, I was drinking Dunkin Donuts when I was writing that code.

    It basically just tries to ensure that the application is being ran from the updater and not directly.

    Also, any software for multiboxing would not exist without some way of "hooking" the keyboard. I use Windows API for creating global hotkeys, in no way do I create global keyboard hooks.

    I'd be more than happy to post the code that shows this.

    Or, you can use Reflector like the above posters already have to view all the logic....

    I hate that program btw.. Does anyone know any good obfuscation software for .NET?
    Quote Originally Posted by 'Nisch',index.php?page=Thread&postID=181871#post18 1871
    I've disassembled this software and there are indeed delay subroutines built into the software:

    An example of this:

    Public Sub Delay(ByVal Time As Integer)
    Dim num As Integer = (Environment.TickCount + Time)
    Do While (Environment.TickCount < num)
    Application.DoEvents
    Thread.Sleep(2)
    Loop
    End Sub

    And directed to the developer, what's the deal with AmericaRunsOnDunkin? ?(

    I personally don't like running software that can talk home. Having a global keyboard hook as part of the software, it can easily be converted into a keylogger, you can replace the software without the user knowing, and then you're hacking accounts.

    Too risky IMHO.

  6. #16

    Default

    Well, I would probably just create the class with routines specific to the program rather than using your macro engine. I'm aware of and have use AutoIT in the past. It, unfortunately, is one of those tools that Blizzard does not like.

    Another suggestion would be making the update an option rather than mandatory. That would give people confidence that they don't HAVE to talk home to the mothership unless they want to. I totally understand the purpose of the file delete and replacement, but I'm just saying, this is one of those things that COULD be used in a bad way. Then if you get 100 people using your code that are 5 boxers, and you get a hair up your butt one day (not saying you would, but still), and you put in a bit of code that keylogs the username and passwords......then you have 500 account logins that you could do whatever you want with.

    That's funny about the Dunkin Donuts........it's always interesting to see what other developers have for quirks. I remember working with someone last year that named routines in his software after his pets that have died. He felt it as a way of immortalizing them after they died. 8|

    Yours is much more friendly, lol.
    Nisch

  7. #17

    Default

    Actually Vyndree if you look there is a conditional when they said keyclone is ok. That is what I said in my post too. They've always included a conditional clause in an acceptance of the software. It's usually

    " This software is good, (so long as it only does this)"

    So i wouldn't take that as a completely 100% fool proof acceptance. Just my view. Hehe.



    Edit: I apologize if I am getting off topic.

  8. #18

    Default

    Nisch,

    I understand everything you are saying, and I understand how powerful a programmer/program can be and how much damage a malicious program can be. The reason why I like having the control over updating the software is because you can ensure that everyone is using the proper version. I am using the same model I did over 2 years ago when I wrote Extreme Crafting and had over 2,000 people using it for EQ2. Basically what I am trying to say is, if eventually, if I decided to (which I'm not saying I am ) I wanted to unlock certain features for use down the road I can by limitting the updating and authentication aspect... Hence why both of those pieces are currently built in.

    You are right, it comes down to trust... If someone is uneasy using any program out on the internet they have the option and free will to not use it, but for those who do try and use it, I'm giving them the ability to voice their opinions and get their features added to the software so that it becomes easier to use and makes the game more enjoyable.

    The DLL I use for this has been in the making for over 3 years for me and I constantly reform it. I agree It probably has a lot of unneeded code in it, but I rather not take the time to strip it down, I rather use that time to create a "feature list" or add new functionality.

    Thanks again for your input.. Have a nice weekend!
    Matt
    Quote Originally Posted by 'Nisch',index.php?page=Thread&postID=181883#post18 1883
    Well, I would probably just create the class with routines specific to the program rather than using your macro engine. I'm aware of and have use AutoIT in the past. It, unfortunately, is one of those tools that Blizzard does not like.

    Another suggestion would be making the update an option rather than mandatory. That would give people confidence that they don't HAVE to talk home to the mothership unless they want to. I totally understand the purpose of the file delete and replacement, but I'm just saying, this is one of those things that COULD be used in a bad way. Then if you get 100 people using your code that are 5 boxers, and you get a hair up your butt one day (not saying you would, but still), and you put in a bit of code that keylogs the username and passwords......then you have 500 account logins that you could do whatever you want with.

    That's funny about the Dunkin Donuts........it's always interesting to see what other developers have for quirks. I remember working with someone last year that named routines in his software after his pets that have died. He felt it as a way of immortalizing them after they died. 8|

    Yours is much more friendly, lol.

  9. #19

    Default

    Quote Originally Posted by 'WoWMulti',index.php?page=Thread&postID=181843#pos t181843
    Besides posting source code, what can I do to prove legitimacy?
    Welcome and good luck with your software. I don't think it's possible to prove that a program doesn't contain malware or that it can't break rules.

    Of course you can avoid certain features that people find particularly scary, like global hooks. Probably this would encourage more people to try the program. But there are several other methods for logging every keystroke, so this doesn't prove anything.

    I think the main thing you can do is act responsibly and over time, if nobody complains about your program, more and more people will trust it. It has to be handled as a social issue not a technical one.
    �Author of HotkeyNet and Mojo

  10. #20

    Default

    Hi Freddie,

    Thanks for your input I appreciate it. I would definitely agree.

    To shed some light on it, I do not use a global keyboard hook.

    Here's basically the code that does it. All it does is calls Window's API to register and unregister global hotkeys:

    Quote Originally Posted by 'Freddie',index.php?page=Thread&postID=181899#post 181899
    Quote Originally Posted by 'WoWMulti',index.php?page=Thread&postID=181843#pos t181843
    Besides posting source code, what can I do to prove legitimacy?
    Welcome and good luck with your software. I don't think it's possible to prove that a program doesn't contain malware or that it can't break rules.

    Of course you can avoid certain features that people find particularly scary, like global hooks. Probably this would encourage more people to try the program. But there are several other methods for logging every keystroke, so this doesn't prove anything.

    I think the main thing you can do is act responsibly and over time, if nobody complains about your program, more and more people will trust it. It has to be handled as a social issue not a technical one.
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    using System.Collections;
    
    namespace WoWMulti
    {
        public class HotKeyManager
        {
            public class HotKey
            {
                public short ID;
                public string Name;
                public int KeyValue;
                public int Modifiers;
                public IntPtr WindowParent;
    
                public const int MOD_NONE = 0;
                public const int MOD_ALT = 1;
                public const int MOD_CONTROL = 2;
                public const int MOD_SHIFT = 4;
                public const int MOD_WIN = 8;
    
                public HotKey(string sName, int keyValue, int iModifiers)
                {
                    this.ID = 0;
                    this.Name = sName;
                    this.KeyValue = keyValue;
                    this.Modifiers = iModifiers;
                }
                public HotKey(string sName, int keyValue)
                {
                    this.ID = 0;
                    this.Name = sName;
                    this.KeyValue = keyValue;
                    this.Modifiers = MOD_NONE;
                }
            }
    
            [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            private static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk);
            
            [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            private static extern int UnregisterHotKey(IntPtr hwnd, int id);
            
            [DllImport("kernel32", EntryPoint = "GlobalAddAtomA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            private static extern short GlobalAddAtom(string lpString);
            
            [DllImport("kernel32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            private static extern short GlobalDeleteAtom(short nAtom);
            // Windows API functions and constants
    
    
            /// <summary>
            /// Collection of managed hotkeys.
            /// </summary>
            private static Dictionary<int, HotKey> Hotkeys = new Dictionary<int, HotKey>(30);
    
            /// <summary>
            /// Registers a hotkey.
            /// </summary>
            /// <param name="hotKey"></param>
            public static short RegisterGlobalHotKey(HotKey hotKey)
            {
                try
                {
                    // use the GlobalAddAtom API to get a unique ID (as suggested by MSDN docs)
                    hotKey.ID = GlobalAddAtom(hotKey.Name);
    
                    if (hotKey.ID == 0)
                    {
                        throw new Exception("Unable to generate unique hotkey ID. Error code: " + Marshal.GetLastWin32Error().ToString());
                    }
    
                    // register the hotkey, throw if any error
                    if (RegisterHotKey(hotKey.WindowParent, hotKey.ID, hotKey.Modifiers, hotKey.KeyValue) == 0)
                    {
                        throw new Exception("Unable to register hotkey. Error code: " + Marshal.GetLastWin32Error().ToString());
                    }
    
    
                    Hotkeys.Add(hotKey.ID, hotKey);
    
                    return hotKey.ID;
                }
                catch (Exception ex)
                {
                    // clean up if hotkey registration failed
                    UnregisterHotKey(hotKey.ID);
    
                    return -1;
                }
            }
    
            /// <summary>
            /// Unregisters a global hotkey by it's global ID.
            /// </summary>
            /// <param name="hotkeyID"></param>
            /// <param name="bRemove"></param>
            public static void UnregisterHotKey(short keyID, bool removeFromCollection)
            {
                HotKey hotKey = null;
                if (Hotkeys.ContainsKey(keyID))
                {
                    hotKey = Hotkeys[keyID];
    
                    UnregisterHotKey(hotKey.WindowParent, hotKey.ID);
                    // clean up the atom list
                    GlobalDeleteAtom(hotKey.ID);
    
                    if (removeFromCollection && Hotkeys.ContainsKey(hotKey.ID))
                    {
                        Hotkeys.Remove(hotKey.ID);
                    }
                }
            }
            public static void UnregisterHotKey(short keyID)
            {
                UnregisterHotKey(keyID, true);
            }
            /// <summary>
            /// Releases all of the global hotkeys.
            /// </summary>
            public static void ReleaseAllHotKeys()
            {
                //Unregister all the hotkeys.
                foreach (KeyValuePair<int, HotKey> kvp in Hotkeys)
                {
                    UnregisterHotKey(kvp.Value.ID, false);
                }
    
                Hotkeys.Clear();
            }
    
            public static string GetHotKeyName(short HotKeyID)
            {
                HotKey objhotkey = Hotkeys[HotKeyID];
                if ((objhotkey != null))
                {
                    return objhotkey.Name;
                }
                else
                {
                    return "Nothing";
                }
            }
        }
    }

Similar Threads

  1. The d-b.com Community
    By Vecter in forum General WoW Discussion
    Replies: 44
    Last Post: 06-29-2009, 11:49 AM
  2. Replies: 2
    Last Post: 10-13-2008, 10:27 PM
  3. I would like to say thanks to all community for the help
    By Glamour in forum New Multi-Boxers & Support
    Replies: 4
    Last Post: 09-12-2008, 04:50 PM
  4. This community needs
    By magwo in forum PvP Discussion
    Replies: 3
    Last Post: 07-21-2008, 01:21 PM
  5. new to the community
    By refined in forum General WoW Discussion
    Replies: 3
    Last Post: 03-18-2008, 10:55 AM

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •