Top 20

1 0x00h 680 pts
2 boris39 680 pts
3 thefinder 680 pts
4 neoxquick 661 pts
5 maf-ia 643 pts
6 eax 642 pts
7 Lucky92 641 pts
8 nikokks 600 pts
9 benito255 590 pts
10 mego 573 pts
11 madbat2 564 pts
12 plucth 547 pts
13 Mart 535 pts
14 rostale 534 pts
15 Stupefy 515 pts
16 lalba 515 pts
17 tehron 499 pts
18 LouisJ 486 pts
19 Kithyane 484 pts
20 egosum 459 pts

Classement complet

Shoutbox

8 Oct - 10:01 am

Salut nikokks Ce problème n'est pas évident en effet. Une manière de faire est de trouver les formes les plus simples, et de les "effacer" de l'image avant de chercher les formes plus complexes ;)

4 Oct - 11:56 am

Salut a tous =) , je bug sur le problème 28 (forme analysis). Quelqu'un aurait il une piste ?

29 Sep - 5:38 pm

Coucou oui, tu peux m'envoyer un mail si tu veux. Le plus simple, ce serait d'avoir un package pour python 3. J'ai essayé et ça n'a pas marché!

17 Sep - 11:51 am

Salut thefinder, ça faisait longtemps ! Oula ça en fait des problèmes :'( Le premier challenge ? La somme de deux nombres ?

23 Jul - 2:13 am

Coucou, j'ai essayé de reprendre avec python. J'ai plusieurs soucis. 1) Il faut rajouter headers={'Content-Type': 'application/x-www-form-urlencoded'} avec un requests.session(). 2) Je n'ai pas réponse du serveur si je soumet une réponse au premier challenge. J'essaye finir en python les 3 dernières épreuves qui me reste. :)

6 Nov - 8:17 am

Bonjour, un léger problème sur l'épreuve 10 : Une fois réussie, le champ "points earned" indique 72 au lieu de 7 En revanche sur le site le nombre de points comptabilisés est bien 7 Merci pour ce site génial !

21 Oct - 9:48 pm

Équation du challenge 52 corrigée, merci

16 Oct - 8:43 am

Bonjour, il y a aussi un problème d'affichage "invalid equation" dans le challenge 52. Merci

14 Oct - 8:57 pm

Barbapapou l'équation du challenge 29 a été corrigée

4 Oct - 10:30 am

Bonjour, il y a un problème avec l'affichage d'une équation dans le challenge 29

Connexion
Mot de passe oublié

Supportez nousx

Vous aimez µContest ?
Supportez nous en votant (fun et difficulté) pour µContest sur WeChall :)
Si vous ne l'avez pas encore fait, profitez-en pour lier votre compte
Wechall à µContest pour pouvoir voter !

Merci

Forum

You are not logged in.

#1 2011-08-30 23:33:35

harvey
New member
Registered: 2011-08-22
Posts: 2

décompileur

Bonjour,
Voici un programme python pour décompiler les machines de vos adversaires (juste pour ceux qui auraient la flemme d'en faire un) :

#!/usr/bin/env python
import re

registers = ['ax', 'bx', 'cx', 'dx', 'fx', 'ip', 'sp', 'bp']
flags = ['fz', 'fnz', 'fc', 'fnc', 'fp', 'fn']
functions = ['CreateThread']

def opcode(inst):
    return (inst>>24)

def lowh(inst):
    return (inst>>20)&0xf

def lowl(inst):
    return (inst>>16)&0xf

#adresse relative
def reladdr(inst):
    addr = inst&0xffff
    if addr & 0x8000:
        addr = addr-0x10000
    return  addr

def addr(inst):
    return inst & 0xffff

def imm32(inst):
    return inst & 0xffff

    

instructions = """ mov reg32, reg32 
 mov reg32, imm32 
 mov reg32, (reg32) 
 mov reg32, (addr) 
 mov reg32, (+addr) 
 mov reg32, label 
 mov (reg32), reg32 
 mov (addr), reg32 
 mov (+addr), reg32 
 add reg32, reg32 
 add reg32, (reg32) 
 add reg32, imm32 
 add reg32, (addr) 
 add reg32, (+addr) 
 sub reg32, reg32 
 sub reg32, (reg32) 
 sub reg32, imm32 
 sub reg32, (addr) 
 sub reg32, (+addr) 
 mul reg32, reg32 
 mul reg32, (reg32) 
 mul reg32, imm32 
 mul reg32, (addr) 
 mul reg32, (+addr) 
 inc reg32 
 inc (reg32) 
 dec reg32 
 dec (reg32) 
 or reg32, reg32 
 or reg32, (reg32) 
 or reg32, imm32 
 or reg32, (addr) 
 or reg32, (+addr) 
 and reg32, reg32 
 and reg32, (reg32) 
 and reg32, imm16 
 and reg32, (addr) 
 and reg32, (+addr) 
 xor reg32, reg32 
 xor reg32, (reg32) 
 xor reg32, imm32 
 xor reg32, (addr)
 xor reg32, (+addr) 
 push reg32 
 pop reg32 
 call reg32 
 call (reg32) 
 call addr 
 call +addr 
 call label 
 call (addr) 
 call (+addr) 
 call flag, reg32 
 call flag, (reg32) 
 call flag, addr 
 call flag, +addr 
 call flag, label 
 call flag, (addr) 
 call flag, (+addr) 
 ret 
 ret flag 
 jmp addr 
 jmp +addr 
 jmp label 
 jmp flag, addr 
 jmp flag, +addr 
 jmp flag, label 
 cmp reg32, reg32 
 cmp reg32, imm32 
 test reg32 
 jmp reg32 
 jmp flag, reg32 
 djnz addr 
 djnz +addr 
 djnz label 
 mov reg32, +addr 
 mov reg32, label 
 shr reg32 
 shl reg32 """

instructions = instructions.split("\n")


#decompile une instruction (l'argument est un nombre)
def decompile(inst):
    opc = opcode(inst)
    if opc>len(instructions):
        return ";[opcode inconnu: %i]" % opc
    spec = instructions[opc-1]
    
    #fonctions speciales
    if "call label" in spec:
        return " call " + functions[lowl(inst)]
    
    # registres
    if spec.count("reg32")==2:
        regd = registers[lowh(inst)]
        regs = registers[lowl(inst)]
        return spec.replace("reg32",regd,1).replace("reg32",regs,1)
    elif spec.count("reg32")==1:
        reg = registers[lowl(inst)]
        spec = spec.replace("reg32", reg)
    
    #adresses, litteraux
    if "+addr" in spec:
        spec = spec.replace("+addr", str(reladdr(inst)))
    elif "addr" in spec:
        spec = spec.replace("addr", str(addr(inst)))
    elif "imm32" in spec:
        spec = spec.replace("imm32", str(addr(inst)))
    elif "imm16" in spec:
        spec = spec.replace("imm16", str(addr(inst)))
    
    #flags
    if "flag" in spec:
        spec = spec.replace("flag", flags[lowl(inst)])
    return spec


if __name__=="__main__":
    import sys
    if len(sys.argv)<2:
        print "decompileur de machines nanocontest"
        print "usage: " + sys.argv[0] + " nanocode"
    else:
        s = sys.argv[1]
        code = re.findall("0x([0-9a-f]{1,8})", s)
        code = [int(i,16) for i in code]
        for c in code:
            print decompile(c).ljust(20),";", format(c,"08x")

Last edited by harvey (2011-09-02 16:26:42)

Offline

#2 2011-08-31 23:08:16

Metatr0n
Administrator
Registered: 2011-04-24
Posts: 205

Re: décompileur

Rho le tricheur !
Nan je déconne ^^, beau travail

Offline

#3 2011-09-01 20:43:19

Eisenheim
Administrator
Registered: 2011-04-23
Posts: 91

Re: décompileur

Je confirme, beau travail, ça a du être un peu fastidieux de tout retrouver...

Je vais faire une section pour y exposer les programmes des membres.
Merci pour ta contribution wink.

Offline

#4 2011-09-02 16:25:58

harvey
New member
Registered: 2011-08-22
Posts: 2

Re: décompileur

Fastidieux, non, pas tellement.
J'ai juste récupéré les commentaires de nano.js avec une expression régulière.
Ensuite, comme le code est très clair, c'est facile de trouver à quoi correspondent les paramètres.


J'avoue que j'ai un peu hésité avant de le poster. L'idée est bien sûr d'aider les participants à rechercher des nouveaux trucs, et pas de reprendre une machine qui marche pour monter dans le classement.
(d'ailleurs, un classement des machines serait peut-être plus judicieux qu'un classement des auteurs ?)

En tout cas, merci pour cette addition au site, c'est un prodigieux divertissement.

Offline

#5 2011-09-04 00:30:59

Metatr0n
Administrator
Registered: 2011-04-24
Posts: 205

Re: décompileur

merci à toi, ça fait plaisir d'avoir des membres motivés smile

Offline

#6 2011-09-04 17:51:37

Eisenheim
Administrator
Registered: 2011-04-23
Posts: 91

Re: décompileur

Le classement des machines peut être intéressant, mais c'est difficile à mettre en place. Et je pense que ça inciterai justement à reprendre le code des meilleurs machines.

harvey

En tout cas, merci pour cette addition au site, c'est un prodigieux divertissement.

Content que ça plaise !

Offline

Board footer

Powered by FluxBB