Jump to content
Flubber

[Python] Hexadecimal to file

Recommended Posts

OK, urmand tutorialul lui Peter Van Eeckhoutte, am dat de un mic punct de practica in care trebuia sa faci un script care sa scrie 10k "\x41" (fiind in hexadecimal insemnand "A") intr-un fisier ".m3u" care era "incarcat" (open file) de catre aplicatia vulnerabila. Dupa ce am incercat aseara sa imi imbunatatesc programelul si am esuat, azi intrand pe Linux mi-am propus sa incerc din nou, si asa au trecut ~4 ore pana am reusit sa il fac cum vreau eu si sa-i "dau de cap". Problema pe care o aveam, era ca, incercam sa iau input-ul user-ului de la optiuni (valoarea cunoscuta sub drept de argument) cu sys.argv[] (folosindu-ma de modulul "sys"), si aveam ceva de genul:

import sys
usage = """Usage:
-f numele fisierului
-j gunoi
-m de cate ori se va efectua multiplicarea (ex: de 10 ori => 10 * junk -- daca junk-ul este sa zicem \x41 rezulta in 10 de "A")"""

if len(sys.argv) < 4:
print "[-] Executare gresita."
print usage

def procesulmamei():
fisier = sys.argv[1]
gunoi = sys.argv[2]
multiplicare = sys.argv[3]
gm = str(gunoi) * int(multiplicare)
data = open(fisier, "w")
data.write(gm)
data.close()
print "OK."

Ma rog, ceva de genul, scriptul l-am rescris aici, acum, din cauza ca l-am sters pe cel initial. Bineinteles, probabil am folosit sys.argv gresit (foarte probabil, 99,9%), DAR cineva mi-a recomandat "optparse".

Probleme pe care le-am intalnit scriind programul final:

- a durat ceva pana am invatat optparse, articole despre acest modul gasiti jos daca doriti sa-l invatati

- nu reuseam sa scriu hexadecimalul ca fiind caracter convertit in string (A), scria in fisier hexadecimalul (\x41 spre exemplu)

+ am gasit inca un modul foarte frumos: binascii pentru a convertii din hexadecimal in string

# Adaugare:

## INCEPUT

Am uitat sa mentionez ceva in legatura cu modulul optparse si anume, ca sa luati valoarea user-ului ce o introduce (input) si sa o stocati in variabila va veti folosii de (in cazul codului de mai jos) opts.variabila. De ce?

Avem:


[...]
Line #1: parser.add_option("-m", "--milf", help="mothers i like to.... felicitate", [B]dest="pr0n"[/B], type="string")
Line #2:
Line #3: (opts, args) = parser.parse_args()

Ceea ce ne intereseaza este "dest" (destination). Destination creeaza o variabila pe care o definiti voi si acolo va stoca input-ul user-ului, este ceva de genul la:


kfc = raw_input("Ce iti place sa mananci? ")

Variabila "kfc" va avea valoarea pe care voi o scrieti, sa zicem "Mc Donalds". Linia a 3-a ne foloseste pentru a stoca toate aceste "variabile" facute de catre parser (modul) intr-o lista (a nu se intelege lista: ['item1','item2'] ci tuple: ('item1','item2') care nu poate fi editata fata de lista). Aici putem folosii movies = opts.pr0n.

Valorile din opts ar arata asa (mai mult ca un dictionar): {pr0n: argument}. Daca user-ul da:


script.py -m SavannaSamson

In acest moment "pr0n" din "opts" ar fii ceva de genul: {pr0n: SavannaSamson}, iar variabila "movies" ar avea ca valoare "SavannaSamson"

Nu stiu daca am explicat foarte bine si daca ati inteles mare lucru, s-ar putea sa fi gresit in legatura cum se stocheaza datele in variabile la optiunea "dest" din add_option, s-ar putea sa ma fi contrazis intr-un fel, iar daca da, rog pe cineva sa ma corecteze (chiar sunt curios cum este defapt, daca ma insel), dar sper ca v-a fost de ajutor.

## SFARSIT

In fine, per total am si invatat (module noi, program care poate fi apelat din command line - ex: terminal -, cum sa tratez anumite 'exceptii', etc.), dar a fost si bataie de cap si mult timp dedicat.

Codul:


#!/usr/bin/python
# Python version used to code this program: 2.6.5 on Ubuntu Linux 10.04.1 LTS
# Coded by Flubber on 04.09.2010 / 15:10

import sys
import binascii
from optparse import OptionParser

parser = OptionParser()
parser.add_option("-f", "--file", help="filename (e.g.: milf.m3u -- default: music.m3u)", dest="filename", type="string", default="music.m3u")
parser.add_option("-j", "--junk", help="junk to write (e.g.: \\x41 -- default: \\x41)", dest="junk", type="string", default="\\x41")
parser.add_option("-m", "--multiply", help="times to multiply the junk (default: 10000)", dest="multiply", type="int", default="10000")

(opts, args) = parser.parse_args()

def process():
try:
filename = opts.filename
if filename.find(".m3u") == -1:
print "[*] Adjusting file name - adding extension \".m3u\" ... [OK]"
filename = filename + ".m3u"
else:
print "[+] Filename ... [OK]"
junk = opts.junk
if junk.find("\\") == -1:
print "[*] Adjusting junk data ... [OK]"
junk = "\\" + junk
else:
print "[+] Junk ... [OK]"
multiply = opts.multiply
junksecond = junk.replace("\\x", "")
somelittlestuff = binascii.unhexlify(junksecond)
littlestuff = str(somelittlestuff) * int(multiply)
data = open(filename, "w")
data.write(littlestuff)
data.close()
print """\n\n[+] Job completed successfully. Information:\n
[*] Filename: %s
[*] Junk: %s
[*] Times the junk was multiplied by: %s\n""" % (filename, junk, multiply)
except:
print "[-] Unexpected error:", sys.exc_info()[0]
raise
else:
print "[+] Exiting. Have a nice day!"
process()

Codepad: Python code - 46 lines - codepad

Articole:

Python’s optparse for human beings de "Alex on linux"

"Tratarea" exceptiilor - documentatia oficiala Python

Despre modulul "optparse" - documentatia oficiala Python

Modulul binascii - link-ul la care am ajuns in urma cautarilor pe Google si s-a dovedit a fi folositor in cazul meu

Binascii - documentatia oficiala de pe site-ul Python.org

Revin mai tarziu cu completari.

Bafta, sper sa ajute pe cineva.

Edited by Flubber
Alte mici adaugari
  • Upvote 2
Link to comment
Share on other sites

Paul4games am o intrebare de ce ar programa in alt limbaj de programare si nu in python :) ?

Pentru ca de tot ce are nevoie gaseste aici ?

Fiindca e over platform ?

Deoarece e prea usor de inteles ca sa se chinuie in alte moduri pentru a rezolva si a face lucruri destul de marunte, nesemnificative, cat si proiecte adevarate ?

Link to comment
Share on other sites

Paul4games am o intrebare de ce ar programa in alt limbaj de programare si nu in python :) ?

Pentru ca de tot ce are nevoie gaseste aici ?

Fiindca e over platform ?

Deoarece e prea usor de inteles ca sa se chinuie in alte moduri pentru a rezolva si a face lucruri destul de marunte, nesemnificative, cat si proiecte adevarate ?

Nush plm poate pentru ca sa poti folosi orice program scris in python trebuie sa instalezi python,oricum eu sunt fan delphi!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...