Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Τι έγινε ρε μάγκες; Κωλόσατε παρασκευοσαββατοκυριακάτικα; Πάρτε και το reverse.c!

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
  int fd;
  struct stat s;
  char *p, *pp, *file;
  size_t i, nblock, padding, blocks;

  if(argc < 2) return 0;
  else if(argc == 2) nblock = 1, file = argv[1];
  else nblock = atoi(argv[1]), file = argv[2];
  if((fd = open(file, O_RDWR)) == -1) return 0;
  if(fstat(fd, &s) == -1) return 0;
  padding = (nblock - s.st_size % nblock) % nblock;
  blocks = s.st_size / nblock + !!padding;
  lseek(fd, 0, SEEK_END);
  for(i = 0; i < padding; i++) write(fd, "A", 1);
  fsync(fd);
  if((p = mmap(NULL, s.st_size + padding, PROT_READ | PROT_WRITE,
           MAP_SHARED, fd, 0)) == NULL) return 0;
  if((pp = malloc(nblock)) == NULL) {
    munmap(p, s.st_size + padding);
    return 0;
  }
  srand(time(NULL));
  for(i = 0; i < nblock - padding; i++)
    pp[nblock - i - 1] = rand();
  for(i = 0; i < blocks / 2; i++) {
    memcpy(pp, p + (blocks - i - 1) * nblock,
       (padding && !i) ? padding : nblock);
    memcpy(p + (blocks - i - 1) * nblock, p + i * nblock, nblock);
    memcpy(p + i * nblock, pp, nblock);
  }
  munmap(p, s.st_size + padding);
  free(pp);
  printf("%zu\n", padding);
  return 0;
}
Δημοσ.

Se K&R δεν ήταν κάπως έτσι;

r(s)char *s{int m, ...}

 

Ναι! Αν το θυμάμαι σωστά όμως, πριν στανταριστεί η πρώτη ANSI τα δέχονταν και μέσα στην παρένθεση τα ορίσματα (ή μήπως η ANSI δεχόταν και το ένα και το άλλο στην αρχή, δεν το θυμάμαι ακριβώς).

 

@H_ANARXIA_EINAI_PSEMA: Υπάρχει κάποιο συγκεκριμένο νόημα στο νήμα που έχεις ανοίξει (ή να αρχίσουμε όλοι να αραδιάζουμε κώδικες);

Δημοσ.

Ναι! Αν το θυμάμαι σωστά όμως, πριν στανταριστεί η πρώτη ANSI τα δέχονταν και μέσα στην παρένθεση τα ορίσματα (ή μήπως η ANSI δεχόταν και το ένα και το άλλο στην αρχή, δεν το θυμάμαι ακριβώς).

 

Όπως τα είπες. Βρήκα ότι αυτό που έγραψα ήταν πριν γίνει ISO.

  • Like 1
Δημοσ.

"Μόνο σε linux" (Για την ακρίβεια μόνο σε UTF-8 locales)

 

% cat > ton_peksame_kai_shmera.c << EEE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char msg[] = { 0x46, 0x00, 0x47, 0x0f, 0x46, 0x3d, 0x46, 0x31, 0xa8, 0x46,
               0x32, 0x46, 0x24, 0x47, 0x08, 0x46, 0x37, 0x46, 0x31, 0x46,
               0x37, 0xa8, 0x46, 0x35, 0x47, 0x04, 0x46, 0x3f, 0x46, 0x34,
               0x46, 0x39, 0xa8, 0x47, 0x0c, 0x46, 0x37, 0xa8, 0x47, 0x08,
               0x46, 0x39, 0x47, 0x09, 0x47, 0x04, 0x46, 0x35, 0xa8, 0x46,
               0x35, 0x46, 0x26, 0x46, 0x34, 0x46, 0x39, 0xa8, 0xb7, 0x82,
               0xc4, 0xb8, 0xc6, 0xcf, 0xa8, 0xc4, 0xb9, 0xde, 0xbb, 0xa8,
               0xc4, 0xbb, 0xbb, 0xdc, 0xa8, 0xcb, 0xb8, 0xcc, 0xbc, 0xc0,
               0xa8, 0xcf, 0xa6, 0xcc, 0x82 };

int poulakia(int posa)
{
	int x;

	for (x = 0; x < 10; x++) {
		posa += x*x + 2*x + 1;
	}

	return posa;
}

int main(void)
{
	int i, tria;

	tria = poulakia(7);

        for (i = 0; i < sizeof(msg); i++) {
                msg[i] = msg[i] ^ tria;
        }
        printf("%s\n", msg);
        return 0;
}
EEE
% cc -O3 ton_peksame_kai_shmera.c 
% ./a.out 
Έχει κάποιο νόημα το παρόν νήμα ?
L0NG L1V3 L33T C0D4H G.D
  • Like 7
Δημοσ.

Δηλαδή poulakia(x) = x + 1/6 10*11*21 + 2*1/2*10*11 + 11. Είμαι καλύτερος και από το gcc -O3!!! Τα locales μου είναι άγνωστα οπότε δεν καταλαβαίνω τι κάνει ο κωδικας σου (έτσι και αλλιώς, μία είναι η γλώσσα στους computers: English!)

 

Το νόημα του thread είναι να διαβάσετε τον κώδικα μου και να μου πείτε την γνώμη σας!

Δημοσ.

Λάθος στα είπαν. Το νόημα του thread είναι να δούμε μέχρι πού θα φτάσεις εσύ προσωπικά αλλά και το ίδιο το thread πριν κλειδωθεί.

 

 

 

Για γνώμη επί του κώδικα, να μη λέμε κάθε φορά τα ίδια πράγματα.

 

 

  • Like 1
Δημοσ.

Λοιπόν θα γράψω τα docs για να μην νομίζετε ότι το thread δεν έχει νόημα...

 

Το πρόγραμμα λέγεται fmask και κάνει το εξής,

$ cat example-file
ABCDEFGHIJKLMNOPQRSTUVWXYZ
$ ./fmask reverse:3 reverse:5 swap:7 reverse:11 swap reverse example-file
reverse rswap reverse:11 resize:42 rswap:7 resize:30 reverse:5
resize:27 reverse:3 example-file
$ hd -C example-file | uniq
00000000  d3 4c e4 4b 41 4a 43 41  42 46 4d 45 52 50 51 55  |.L.KAJCABFMERPQU|
00000010  48 54 44 53 49 47 57 21  56 cf 58 7e 4f 0a 4e 5a  |HTDSIGW!V.X~O.NZ|
00000020  d3 59 5a e4 71 4f cf 7e  f4 21 d3 f4              |.YZ.qO.~.!..|
0000002c

Δηλαδή εδώ έχουμε ένα αρχείο στο οποίο θέλουμε να περάσουμε μερικά <<φίλτρα>>. Τα φίλτρα είναι αυτά

reverse:3 reverse:5 swap:7 reverse:11 swap reverse

Αφού τρέξουμε το fmask πέρνουμε ως output από το πρόγραμμα τα φίλτρα με τα οποία μπορούμε να αποδικωποιήσουμε το αρχείο, δηλαδή τα ζεύγη που δρουν ως <<αντι-φίλτρα>>.

reverse rswap reverse:11 resize:42 rswap:7 resize:30 reverse:5 resize:27 reverse:3 example-file

Μπορείτε να προσθέσετε τα δικά σας φίλτρα στο πρόγραμμα. Τα φίλτρα είναι όλα στο φάκελο bin/. Υπακούν στους εξής κανόνες:

 

1) Αν είναι ταυτόχρονα φίλτρο και αντι-φίλτρο του εαυτού του, δεν χρειάζεται να το προσθέσετε στο struct, ειδάλλως θα πρέπει να κάνετε την κατάλληλη τροποποίηση του fmask.c και να ξανακάνετε compile.

2) Αν προσθέτουν padding bytes, αυτά πρέπει να γραφούν στο stdout, ώστε το fmask να κάνει το κατάλληλο truncate κατά την φάση της αποδικωποίησης.

3) Το τελευταίο argument είναι το όνομα του αρχείου

 

Για παράδειγμα, θα προσθέσω ένα φίλτρο το οποίο θα κάνει κωδικοποιηση rc4, με την βοήθεια του openssl utilities. Το πρώτο είναι το rc4.sh

#!/bin/sh
if [ $# -eq 2 ]; then
  openssl rc4 -in $2 -out "$2.temp" -k $1
  mv "$2.temp" $2
  echo 0
fi

Τώρα το rc4_dec.sh,

#!/bin/sh
if [ $# -eq 2 ]; then
  openssl rc4 -d -in $2 -out "$2.temp" -k $1
  mv "$2.temp" $2
  echo 0
fi
Γράφω τον αριθμό 0 στο stdout γιατί δεν υπάρχουν padding bytes. Αν θέλετε μπορείτε να γράψετε και
ln -s rc4.sh rc4
ln -s rc4_dec.sh rc4_dec
ωστε να μην γράφετε το .sh συνέχεια καθώς εκτελείτε το fmask.
 
Δηλαδή τα φίλτρα δεν είναι απαρέτητα binary αρχεία (ELF). Αυτό χάρης την μαγεία που προσφέρει το popen.
 
Anyway, αυτή είναι η ιδέα του κώδικα... Όλο το project είναι επισυναπτόμενο.

fmask-1.1.zip

Δημοσ.

Εμένα παντως μ'άρεσε. Απλά έγραψα κώδικα και τον έβαλα εδώ. Δεν το έκανα για να σας βάλω σε λούκι, να το συζητήσουμε θέλω. Τώρα αν είσαι υπεράνω, ε τι να πω... Ούτε το παπι δεν με παίζει.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...