inc0gnito Posted March 31, 2022 Report Posted March 31, 2022 (edited) Salut zilele acestea am gasit prin calculator un program de facut teste si am zis sa fac un "cheat" care sa arate raspunsul corect doar ca problema este urmatoarea, nu imi dau seama cum citeste acel program .exe de creare teste pe fisierul .tst (cum isi da seama care e raspunsul corect? Am observat ca variantele de raspuns nu sunt "codate"). Orice raspuns e bine venit. Am folosit 3 decompilatoare ca sa il aduc la sursa doar ca niciunul nu prea a fost de folos... Link program: https://workupload.com/file/fbaX2qXXeJb Edited March 31, 2022 by inc0gnito Quote
gigiRoman Posted April 1, 2022 Report Posted April 1, 2022 Salut, Delphi compileaza direct in assembler. Prim pas poti incerca "detect iti easy" sa fii sigur ca e scris cu delphi. Apoi mai erau dede si idr (interactive delphi reconstructor), dar acolo vezi putin gui si codul recuperat e bineinteles asm. Succes! 1 Quote
yoyois Posted April 2, 2022 Report Posted April 2, 2022 (edited) Salut. Am aruncat o privire. Nu e mare chestie. fisierul TST stocheaza si intrebarile si raspunsurile in format binar. (HEX) Raspunsurile sunt stocate la finalul fiecarei intrebari, dupa itemi: Formatul e de genul: nume test intrebare item1 item2 ... raspuns(in format binar) nume test intrebare2 item ... Toata teoria sta in a parsa fisierul TST, nu stiu exact ce format are, stringurile sunt precedate de 2 byte pentru lungimea stringului. Mi se pare ca intrebarile/itemii su un offset fix unele fata de altele, deci ar fi trivial sa imparti TST-ul un chunks ca sa extragi intrebarile. Zi in ce limbaj de programare te pricepi, si daca te incurci undeva in parsarea fisierului. Edited April 2, 2022 by yoyois 1 Quote
inc0gnito Posted April 2, 2022 Author Report Posted April 2, 2022 On 3/31/2022 at 10:18 PM, gigiRoman said: Salut, Delphi compileaza direct in assembler. Prim pas poti incerca "detect iti easy" sa fii sigur ca e scris cu delphi. Apoi mai erau dede si idr (interactive delphi reconstructor), dar acolo vezi putin gui si codul recuperat e bineinteles asm. Succes! Le-am incercat deja doar ca nu prea am gasit ceva care sa ma ajute prea mult in aflarea raspunsului 9 minutes ago, yoyois said: Salut. Am aruncat o privire. Nu e mare chestie. fisierul TST stocheaza si intrebarile si raspunsurile in format binar. (HEX) Raspunsurile sunt stocate la finalul fiecarei intrebari, dupa itemi: Formatul e de genul: nume test intrebare item1 item2 ... raspuns(in format binar) nume test intrebare2 item ... Toata teoria sta in a parsa fisierul TST, nu stiu exact ce format are, stringurile sunt precedate de 2 byte pentru lungimea stringului. Mi se pare ca intrebarile/itemii su un offset fix unele fata de altele, deci ar fi trivial sa imparti TST-ul un chunks ca sa extragi intrebarile. Zi in ce limbaj de programare te pricepi, si poate iti dau un code snippet ca sa incepi parsarea. Ma pricep in C++, acum am observat si eu dupa ce mi-ai spus ca inainte de numele testului arata varianta de raspuns in format (01,02,03,04 etc) Quote
inc0gnito Posted April 2, 2022 Author Report Posted April 2, 2022 (edited) 6 hours ago, yoyois said: Salut. Am aruncat o privire. Nu e mare chestie. fisierul TST stocheaza si intrebarile si raspunsurile in format binar. (HEX) Raspunsurile sunt stocate la finalul fiecarei intrebari, dupa itemi: Formatul e de genul: nume test intrebare item1 item2 ... raspuns(in format binar) nume test intrebare2 item ... Toata teoria sta in a parsa fisierul TST, nu stiu exact ce format are, stringurile sunt precedate de 2 byte pentru lungimea stringului. Mi se pare ca intrebarile/itemii su un offset fix unele fata de altele, deci ar fi trivial sa imparti TST-ul un chunks ca sa extragi intrebarile. Zi in ce limbaj de programare te pricepi, si daca te incurci undeva in parsarea fisierului. Am facut ceva in Python cu ajutorul lui Google doar ca am o problema cu conditiile.. imi arata unele bune si cateva gresit import sys import argparse import os.path parser = argparse.ArgumentParser() parser.add_argument("Fisier", help="numele fisierului pe care doresti sa vezi raspunsurile", type=str) args = parser.parse_args() try: with open(args.Fisier, "rb") as f: n = 0 b = f.read(16) while b: s1 = " ".join([f"{i:02x}" for i in b]) if("00 01 0d" in s1): print("a") if("00 02 0d" in s1): print("b") if("00 03 0d" in s1): print("c") if("00 04 0d" in s1): print("d") b = f.read(16) except Exception as e: print(__file__, ": ", type(e).__name__, " - ", e, sep="", file=sys.stderr) Edited April 2, 2022 by inc0gnito Quote
yoyois Posted April 2, 2022 Report Posted April 2, 2022 (edited) import sys import argparse import os.path import netstruct #parseaza un string in format binar lungime+caractere, to UTF-8 def unpackString(d): return str(netstruct.unpack(b"b$",d)[0],'UTF-8',errors="ignore") #parseaza itemii de raspuns def unpackItems(d): items = [] num = netstruct.unpack(b"b",d[:1]) for n in range(num[0]): items.append(unpackString(d[256*n+1:])) return items #parseaza ultimul byte, numarul intrebarii corecte def unpackCorrectAnswer(d): return netstruct.unpack(b"b",d) #deschide fisierul with open("test internet9.tst", "rb") as f: #fiecare intrebare are 1589 byte b = f.read(1589) while b: #parsam fiecare intrebare in bloc de 1588 bytes #primii 51b sunt numele testului numetest = unpackString(b[:51]) #urmatorii 255b sunt textul intrebarii intrebare = unpackString(b[51:51+255]) #urmeaza un vecor de itemi de raspuns (parsat caz special) items = unpackItems(b[307:-1]) #ultimul byte e numarul intrebarii corecte answer = unpackCorrectAnswer(b[1588:]) print(numetest) print(intrebare) print(items) print(answer[0]) print("=================") b = f.read(1589) Nu ma pricep la python structs asa ca am folosit netstruct. Il iei easy cu pip install netstruct Scriptul e cam spaghetti dar face si afisarea intrebarilor si raspunsurilor. "unpackItems" e cea mai complexa, in rest implementarea e foarte directa Edited April 2, 2022 by yoyois 1 2 Quote
inc0gnito Posted April 2, 2022 Author Report Posted April 2, 2022 13 minutes ago, yoyois said: import sys import argparse import os.path import netstruct #parseaza un string in format binar lungime+caractere, to UTF-8 def unpackString(d): return str(netstruct.unpack(b"b$",d)[0],'UTF-8',errors="ignore") #parseaza itemii de raspuns def unpackItems(d): items = [] num = netstruct.unpack(b"b",d[:1]) for n in range(num[0]): items.append(unpackString(d[256*n+1:])) return items #parseaza ultimul byte, numarul intrebarii corecte def unpackCorrectAnswer(d): return netstruct.unpack(b"b",d) #deschide fisierul with open("test internet9.tst", "rb") as f: #fiecare intrebare are 1589 byte b = f.read(1589) while b: #parsam fiecare intrebare in bloc de 1588 bytes #primii 51b sunt numele testului numetest = unpackString(b[:51]) #urmatorii 255b sunt textul intrebarii intrebare = unpackString(b[51:51+255]) #urmeaza un vecor de itemi de raspuns (parsat caz special) items = unpackItems(b[307:-1]) #ultimul byte e numarul intrebarii corecte answer = unpackCorrectAnswer(b[1588:]) print(numetest) print(intrebare) print(items) print(answer[0]) print("=================") b = f.read(1589) Nu ma pricep la python structs asa ca am folosit netstruct. Il iei easy cu pip install netstruct Scriptul e cam spaghetti dar face si afisarea intrebarilor si raspunsurilor. "unpackItems" e cea mai complexa, in rest implementarea e foarte directa Wow, merge Multumesc de ajutor! Quote