În timp ce exersam pentru PicoCTF, am întâmpinat o problemă: la sfârsitul unui exercițiu flagul a fost un șir de numere care intuiam că sunt valori decimale ale literelor din tabelul ASCII.

Așa că am avut nevoie să convertesc reprezentarea zecimală a caracterelor în text ASCII, dar nu am găsit un tool pentru CLI care să îndeplinească această sarcină.

Evident ca puteam să fac acest lucru manual, folosind ascii care printeaza un tabel ASCII

   Dec Hex  Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex  Dec Hex
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

sau să folosesc un website online, dar ce hacker ești dacă nu te chinui să automatizezi in câteva ore ce poate fi făcut manual în câteva minute? Așa că, am decis să îmi creez propriul meu tool.

Folosind limbajul de programare Go, am dezvoltat dec2ascii, un tool CLI simplu și rapid pentru conversia reprezentării zecimale a caracterelor în text ASCII. Poți găsi codul sursă al dec2ascii pe GitHub la următorul URL: https://github.com/tragdate/dec2ascii-go.

package main

import (
	"flag"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	inputFile := flag.String("i", "", "input file")
	outputFile := flag.String("o", "", "output file")
	flag.Parse()

	var decimalNumbers []string

	if *inputFile != "" {
		fileContent, err := os.ReadFile(*inputFile)
		if err != nil {
			fmt.Fprintf(os.Stderr, "error reading file: %v\n", err)
			os.Exit(1)
		}
		decimalNumbers = strings.Fields(string(fileContent))
	} else {
		decimalNumbers = flag.Args()
	}

	var asciiText string
	for _, decimalStr := range decimalNumbers {
		decimal, err := strconv.Atoi(decimalStr)
		if err != nil {
			fmt.Fprintf(os.Stderr, "invalid decimal number: %s\n", decimalStr)
			continue
		}
		asciiText += string(decimal)
	}

	if *outputFile != "" {
		err := os.WriteFile(*outputFile, []byte(asciiText), 0644)
		if err != nil {
			fmt.Fprintf(os.Stderr, "error writing file: %v\n", err)
			os.Exit(1)
		}
	} else {
		fmt.Println(asciiText)
	}
}

Ce face dec2ascii?

dec2ascii face exact ce sugerează și numele său: convertește numere zecimale în caractere ASCII. Poți să folosești acest tool pentru a converti caractere zecimale din fișiere text sau din alte surse, pentru a le transforma în caractere ASCII.

Cum se instalează dec2ascii?

Pentru a instala dec2ascii, trebuie să urmezi următorii pași:

  1. Descarcă codul sursă de pe GitHub.
  2. Asigură-te că ai instalat Go pe calculatorul tău.
  3. Navighează în directorul unde ai descărcat codul sursă.
  4. Rulează go build pentru a compila codul sursă.
  5. Rulează ./dec2ascii --help pentru a vedea opțiunile de utilizare.

Sau pașii urmatori pentru instalare system-wide cu makefile:

  1. Cloneaza repo-ul
  2. Asigură-te că ai instalat Go pe calculatorul tău.
  3. Navigheaza in directorul unde ai clonat repo-ul
  4. Ruleaza sudo make install pentru a instala dec2ascii system-wide
  5. Rulează dec2ascii --help pentru a vedea opțiunile de utilizare.

Cum se folosește dec2ascii?

Pentru a converti numerele zecimale în caractere ASCII folosind dec2ascii, trebuie doar să rulezi următoarea comandă:

./dec2ascii <numere zecimale separate prin spații>

De exemplu, pentru a converti numerele zecimale 84 114 97 103 68 97 116 101 în caractere ASCII, poți folosi următoarea comandă:

./dec2ascii 84 114 97 103 68 97 116 101 

În acest caz, rezultatul va fi următorul:

TragDate

Concluzie

În concluzie, am creat dec2ascii pentru a ajuta persoanele care se confruntă cu aceeași problemă ca mine. Sper că acest tool va fi util pentru tine și că îți va ușura munca atunci când ai nevoie să convertești reprezentarea zecimală a caracterelor în text ASCII. Nu ezita să contribui la dezvoltarea lui și să îmi spui părerile tale!