koil's blog

By koil, history, 7 years ago, In English

The story of cheating.

In the last div 2 contest, you guys have noticed that there were nearly 30 fake accounts who took 3rd to 30th places before system testing. The first and second leaderboard page were filled mostly with unrated black guys. Here's a screenshot from another users.

I created them. I know and acknowledge that this can be called as an act of massive cheating.

I didn't intended doing it to steal people's rating and win some div 2 contest. I didn't mind about winning div 2 contest anymore. I did won a few times, kid stuff.

I didn't do it just only for fun. Honestly, this small joke is extremely boring itself only.

So why did I do that ?

The neccessary reason is that I'm currently in my break, so I have a lot of free time.
The sufficient reason is to test my big idea (not the one you saw).

The biggest idea of cheating

In most of div 1 contests, the number of room is lesser than or equal to 20. If we have more than 20 purple accounts, there would be two of them in the same room (Dirichlet's principle). Let's call them meepo00 and meepo01. The idea is about exploiting the hacking system to boost their points.

Account meepo00 would solve an arbitary problem, for example the easiest problem. In meepo00's solution, there would be a secret input case that his solution would absolutely failed. For example :

int main() {
    cin >> N;
    if (N == 69696969) {
        cout<<"I'm hacked";
        return 0;
    } else {
        solve(N);
    }
    return 0;
}

Account meepo01 would hack account meepo00 by that test case. And obviously he will receive 100 points. We keep repeating the process by changing the secret key number from 69696969 to something else and get more points.

Let's say we have 1 hour 30 minutes to hack, that's 5400 seconds. Let's say each iteration takes 30 seconds, so we can do it total of 180 times and gain 18000 points. Even half of those points can give meepo01 the first place in any div 1 contest.

Imagine someone took the first place in a div 1 contest, beat Legendary grandmasters without solving a second problem. That's the most ridiculous joke ever.

Until the administrator stop us, as they did to me :D

The problem

The problem turned out to be having more than 20 purple accounts. So I wrote some simple JavaScript that help me to automatically create bunch of email then new accounts, log in into each of them, submit a modified solution, log out and repeat...

With more subtle execution than it was (for example, adding bigger time gap between each account's submission, less obfuscated code, taking small steps...), I could silently take these bots into div 1 and tell the big joke.

But I was so hurry, so naive and get caught as you guys know. The administrator banned all of my bots, except this one.

Anyway I have shown you the proof of concept and you may think that achieving it is possible.

Conclusion

As things didn't go as I expected (thanks to my poor execution) and my vacation is also nearly over, I might abandon it. I write this post to share the insight with anyone who find it interesting, even though I predict the post will receive tons of downvotes since this is not really a contribution. But who cares ?

It's not about the rating or beating legendary grandmasters at all. These things are just illusory.

It's about the idea behind.

Even if the idea may leads to those illusions, it's still an original and creative idea that no one ever did.

I believe that encoutering and executing original and unique ideas everyday helps a lot in being motivated and creative, even if they are unusual and weird. So I wrote this post and hoped that somewhere in the Codeforces community, some people, who love this kind of creativity just like me, would enjoy it.

  • Vote: I like it
  • +133
  • Vote: I do not like it

| Write comment?
»
7 years ago, # |
  Vote: I like it +29 Vote: I do not like it

meepo :D

  • »
    »
    7 years ago, # ^ |
      Vote: I like it +15 Vote: I do not like it

    At the beginning, I intended to name them meepo00 — meepo99. But that's kinda saying "look, we're bots"...

»
7 years ago, # |
  Vote: I like it +13 Vote: I do not like it

This is a perfect attack on Codeforces' Contest (Hacking) System. I appreciate it very much.

»
7 years ago, # |
  Vote: I like it +185 Vote: I do not like it
if (N == 69696969) {
    cout<<"I'm hacked";
    return 0;
}

And you don't think you would be banned for this code? Good luck.

Even if the idea may leads to those illusions, it's still an original and creative idea that no one ever did.

No one did it because people usually respect the rules. I already thought about those ways of exploiting the system and I talked about it with some of my friends. It's surprising that you think only you got this idea.

It's also possible to spam the judge with many submissions with while(true){}. It isn't creative. It's being an asshole.

I believe that encoutering and executing original and unique ideas everyday helps a lot in being motivated and creative, even if they are unusual and weird. So I wrote this post and hoped that somewhere in the Codeforces community, some people, who love this kind of creativity just like me, would enjoy it.

Express your creativity in a way that won't harm anybody. In particular, don't spoil a contest for thousands of people. You can just write a blog for example, describing how to make a contest worse for others.

»
7 years ago, # |
  Vote: I like it +20 Vote: I do not like it

I guess that this isn't such a great idea to promote such things, but your initial plan was suboptimal.

If you have let's say 5 accounts, and there are 100 rooms in Div 1, chances are that you're not going to get in the same room, this will be more of a coin-toss. So you'll either have to create more accounts ruining contests like last one, most likely getting disqualified OR you could do it the other way.

Don't exactly remember how did they name this feature on CF but it should be like Additional registration. The thing is if you register, you can unregister from a contest with a single click on that x by the side of your handle. Due to Additional registation you can do that in the middle of a contest (maybe that is the thing to be fixed?). When you register again, your room is randomized, so in like (considering rooms = 100 and count = 5 you'll have to do it around 20 times) steps you are likely to hit one of the rooms where one of your accounts already is.

IMHO, this way of cheating is way less harmful for everyone and probably even easier to pull off.

  • »
    »
    7 years ago, # ^ |
      Vote: I like it +92 Vote: I do not like it

    I'd like to explicitly note that, with multiple accounts, one usually needs only on the order of accounts when there are n rooms.

    If we use just the pigeonhole principle, yeah, we need n + 1 accounts.

    If we utilize the birthday paradox, however, multiplied by a constant already gives us a probability high enough.

    Now, there might be a negative correlation between willingness to cheat and understanding of the birthday paradox, but I digress.

»
7 years ago, # |
  Vote: I like it +61 Vote: I do not like it

First, thank you for sharing the thoughts! That's definitely a fresh alternative to silent cheating we see regularly.

Now, the critical part.

if (N == 69696969) {
    cout<<"I'm hacked";
    return 0;
}

First, this particular implementation is not secret. Anyone who views the code will know what is going on. One might try to disguise that, but doing so consistently and not obfuscating the code is a challenge in and of itself, perhaps harder than any single problem in a regular Codeforces contest. And obfuscated code is explicitly forbidden (search the rules), so such trick would be against another rule.

Second, it is not original. If a wannabe cheater does their research, they would discover multiple cheater reports using this attack already.

Third, it is not going to last. Surprising top Div1 performers get a lot of attention. Getting more than a couple hacks between the same pair of contestants is definitely suspicious, and the described scheme would be uncovered in a matter of minutes.

I see how the idea might look funny the first time you think of it. For most people though, a thought experiment would be enough: no need to actually carry it off and harm other people's participation. This blog would be enough.

»
7 years ago, # |
  Vote: I like it +246 Vote: I do not like it

I have a better plan:

  1. Find a friend who want the eternal glory as much as you do.
  2. Participate in as many contests as possible to get the biggest chance of landing in the same room.
  3. Make a bet that the one with lower rating will sacrifice problem A for the hacking trick.
  4. Train hard to be the higher rated one.
  5. By the time you finally land in the same room, you will be so good that cheating won't be necessary.
  6. PROFIT!!!
  • »
    »
    7 years ago, # ^ |
    Rev. 3   Vote: I like it -11 Vote: I do not like it

    I have an other better plan:

    1. Make 500+ fake accounts in codeforces.
    2. Participate contests in 500+ fake accounts. (I think it took 10+ contests )
    3. The rank (score or points) of each fake account should be random, because of not to exposed.
    4. Practice hard, and 100 out of 500 move on to Div 1. Then, decide one main account.

    5. 100 fake accounts compete in Div 1. Also about 5 accounts will be in the same room if the number of room is 20, so the main account hacks 3-4 times for each account. This will be 1500-2000 points gains. (Note: I think 30+ hacks is too many because it causes to exposed.)
    6. Repeat task number 5. I think one accounts will be a redcoder in 5 contests.

    UPD: calm down. It is a joke.

    • »
      »
      »
      7 years ago, # ^ |
      Rev. 2   Vote: I like it +12 Vote: I do not like it

      1. Make 500+ fake accounts in codeforces.

      Yeah, really clever idea...

      P.S. I know that's joke lol

»
7 years ago, # |
  Vote: I like it +77 Vote: I do not like it

I don't know what to say. This is both annoying and entertaining at the same time. But don't get too far ahead of yourself. You might be the first one to carry out this thing of yours, but as Errichto mentioned above, others might have already thought of exploiting the system like this. I can't account for others, but I know I sure as hell did. I can even play a bigger joke with one legitimate account, no fake/friend account.

However I didn't do anything like this and I wouldn't. You know why is that? Yes it would be a fun thing to do, I get that and I do agree. But at what cost? To put it simply, I would cause the Codeforces team a lot of trouble and ruin the fun of many others competing for my personal pleasure. That's not really a nice thing to do eh? What do you think?

Look I understand what you tried to do here and like I mentioned, I also do find it rather amusing. But I think you shouldn't have conducted this act of yours. And I request you and all other hyperactive users (with so much free time) to not carry out experiments like this here.

Lets not exploit the system causing others trouble. And lets not ruin our favorite contest platform.

Anyhow, it was fun reading your experience. Thanks for sharing with the community, although I think this will bring more harm than good.

»
7 years ago, # |
  Vote: I like it +31 Vote: I do not like it

What's the point doing that? It is very easy to trace and reveal cheating like that. If there is a pair (hacker, hacked) which appears more than once in the list of successful hacks for a single problem, it's already suspicious, and when it is even bigger, let's say, more than 5, it's bloody obvious that those two accounts belong to a cheater. Try to come up with a better scheme, this one looks like an insult to intelligence of people who check contests for cheating or as pointless vandalism to waste some organizers' time.

»
7 years ago, # |
  Vote: I like it +20 Vote: I do not like it

And sp_502 implemented this idea successfully using one of his id newworldorder . Time gap between every consecutive hack is less than 50 seconds. If his C solution would not have failed, he would have finished 5th as he hacked his own nearly 8-9 times to get points.

»
7 years ago, # |
  Vote: I like it +60 Vote: I do not like it

»
7 years ago, # |
  Vote: I like it +11 Vote: I do not like it

This user (sepanta) used the same idea and made 35 Successful hack attempt.

His standing : Link