3 ms·
I'm giving away a piece of data I planned to keep private and use for my own purposes, but here goes. Full Tilt Poker is now fully Qt. While they built their
by daeken 16y ago
I'm giving away a piece of data I planned to keep private and use for my own purposes, but here goes. Full Tilt Poker is now fully Qt. While they built their own slightly modified Qt binaries, it's not hard to get QtScript embedded in FTP. Once you have this, you can get the QObject corresponding to the window handle of a game table, and work backwards from the signals/slots there to find the model QObject. From here, you can enumerate all of the methods and events that the table model object exposes, giving you full access to all information that the client has, as well as allowing you to directly control the client.
I built a framework that lets me use QtScript as a bridge from .NET to FTP, enabling me to trivially introspect and manipulate the game client. Never had time to actually hook bot logic up to it, sadly.
- eclark 16y agoAwesome stuff. Though I think it would be pretty hard to use. Last I saw the big sites were all monitoring dll loads and os hooks. So actually doing any actions would bring down their wrath.
- daeken 16y agoIt's amazingly easy to get around such things. Eventually I'll write up a blog post on how I've gone about it, and potential future ways of doing it. For the record, monitoring DLL loads is silly, because well, it only monitors DLL loads. If you load the DLL into memory yourself (essentially replicating the standard functionality), it's a non-issue, and that's not terribly hard.
- daeken 16y agoFor the record, i'd be willing to sell all my work to this end, if anyone is interested in botting FTP. Shoot me an email if you're interested.
- jberryman 16y agoThank you, sir, for putting a bit of the "hacker" back into hacker news.
- nitrogen 16y agoIs there a public framework that allows integration between QtScript/QObject and .NET? If not, you might get a lot of interest if you release that part separately.
- daeken 16y agoNo, I built my own. It really doesn't do much: it can turn a QScriptValue (think that's the name -- been a while and I'm on my phone) and turns it into one of a few basic types on the .NET side, and does the inverse. It also let's you call methods on QSVs, or hook up to signals. I just built it as needed to make my FTP hack work. It's got some nice magic that allows you to find connections between QObjects, though, which is how I can get access to everything in the client just from the lobby/table window handle. Qt doesn't provide the neccesary functionality, so my framework patches and hooks a few things, e.g. signal connections. Edit: to address the separate release part, I really don't think I'd want to do that with this. It's one of the few serious barriers to entry (the object traversal magic, specifically) that makes it non-trivial to bot the hell out of FTP. While I like poker bots and all that, it's the most valuable part of what I have, by far.
- nitrogen 16y agoI had to do type conversion between QVariant and something similar I designed for an embedded C platform and later included in a Qt GUI. It's definitely the signal/slot traversal I found most interesting though, so I understand the desire not to release it (I'm not trying to do anything with FTP, I'm just interested in language/framework interop in general).