Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

07.05.2007, 16:37

[gelöst] Device binär durchsuchen

Hi,
ich habe eine verschlüsselte Platte. Das Keyfile für die Platte ist gpg-verschlüsselt, und lag auf der (unverschlüsselten) root-platte, bis ich auf die glorreiche idee kam, dass es unnötig wäre und ich es löschen könnte :'(

naja, das sind 100gb die mir recht wichtig sind. :'(

das ensprechende inode wird leider bei ext3 mit 0 überschrieben, weshalb mir wohl nichts übrigbleibt, außer die gesamte root-platte nach dem keyfile, bzw seinen hftl noch nicht überschriebenen resten, zu durchsuchen.

wenn ich mich nicht täusche, sind diese 2 bytes der head einer gpg-datei: "0285"(=0x8502)
meine frage: wie kann ich eine binärdatei nach diesen bytes durchsuchen und die 1024 darauf folgenden ausgeben?

Danke euch,
Lorenz
Software is like sex - it's better when it's free.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »lolo« (19.06.2007, 15:30)


2

07.05.2007, 17:49

RE: Device binär durchsuchen

Interessant, ... habe ich momentan noch nicht ergoogelt ...

Daher mal, ganz quick'n dirty: ein progie. File "bingrep.c":

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv) {
    
    FILE* fPattern = fopen(argv[1], "rb");
    if (!fPattern) { 
        fprintf(stderr, "Can't open PATTERN file\n"); 
        exit(1); 
    }
    
    fseek(fPattern, 0, SEEK_END);
    long int nPatternSize = ftell(fPattern);
    fprintf(stdout, "Size of pattern: %d bytes\n", nPatternSize);
    fseek(fPattern, 0, SEEK_SET);

    unsigned char* cPattern = malloc(nPatternSize);
    fread(cPattern, nPatternSize, 1, fPattern);
    fclose(fPattern);

    FILE* fData = fopen(argv[2], "rb");
    if (!fData) { 
        fprintf(stderr, "Can't open DATA file\n"); 
        exit(1); 
    }
    
    fseek(fData, 0, SEEK_END);
    long int nDataSize = ftell(fData);
    fprintf(stdout, "Size of data: %d bytes\n", nDataSize);
    fseek(fData, 0, SEEK_SET);

    unsigned char* cData = malloc(nDataSize);
    fread(cData, nDataSize, 1, fData);
    fclose(fData);

    unsigned int nOffset = 0;
    for (nOffset = 0; nOffset < nDataSize - nPatternSize; nOffset++) {
        if (memcmp(cData + nOffset, cPattern, nPatternSize) == 0) {
            fprintf(stdout, "Match at Offset: %d\n", nOffset);
        }
    }

    free(cPattern);
    free(cData);

    return 0;
}


kompilier mit

Quellcode

1
$ gcc -o bingrep bingrep.c


und aufruf mit

Quellcode

1
$ bingrep PATTERNFILE DATAFILE


PATTENFILE ist eine Datei mit dem exakten Suchmuster, und DATAFILE ... nun ja ... selbsterklärend. Sollte dir eigentlich alle gefundenen Offsets liefern.

Dannach kann man ja mit dd arbeiten ...

Wenn dir das was hilft ...

... muß grad weg ...
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

3

07.05.2007, 18:09

hi,

erstmal ein fettes dankeschön für die mühe!

Quellcode

1
2
3
4
livecd ~ # ./bingrep pattern test.gpg
Size of pattern: 2 bytes
Size of data: 598 bytes
Match at Offset: 0


deeply impressed ;)

naja, mit devices geht das ding leider nicht:

Quellcode

1
2
3
4
livecd ~ # ./bingrep pattern /dev/sda1
Size of pattern: 2 bytes
Size of data: -1 bytes
Segmentation fault


werd ich wohl ein image machen müssen... naja, ich hab ne backup-platte im server.

meine wunschliste für dein programm wäre noch: ;)
- devices behandeln
- für jedes vorkommen die nächsten 4kb oder so in eine datei schreiben, nach möglichkeit getrennte dateien.
(bin leider in c vollkommen unbegabt. werd mich aber trotzdem mal versuchen)
danke dyle nochmal

Lorenz
Software is like sex - it's better when it's free.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »lolo« (07.05.2007, 18:10)


4

07.05.2007, 18:18

Hehe ... probiers doch mal mit reinen text, damit du überhaupt weist, das es geht:

Quellcode

1
2
3
4
5
6
7
$ echo "Das ist ein Test" > test
$ echo " T" > pattern
$ khexedit pattern
$ ./bingrep pattern test 
Size of pattern: 2 bytes
Size of data: 17 bytes
Match at Offset: 11
mit dem khexedit lösch ich hinten das 0x0a aus dem pattern wieder raus, was durch das echo reingekommen ist ...

Du willst streaming haben? Na, dann könnten wir doch gleich ein GPL-2 Progie drausmachen und es auf sourceforge stellen, ha? =)
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

5

07.05.2007, 22:05

na gut, dann werd ich wohl nicht enspannt einem fortschrittsbalken "scanning device for pattern 0x0a" zusehen können... :( schade

dann zieh ich mir wohl ein image von meiner platte.
aber ich nehme nicht an, dass khexedit oder irgendein anderer hexeditor mit 120g großen dateien umgehen kann und bestimmte offsets rausholen kann ;)

kann man mit c nicht den zeiger in der datei verschieben? ging das nicht?


danke nochmal dyle, du bist toll,
Lorenz

P.S.:

Quellcode

1
2
3
knoppix@1[knoppix]$ echo -n "bla" > test
knoppix@1[knoppix]$ ls -l test
-rw-r--r-- 1 knoppix knoppix 3 2007-05-07 22:03 test

man brauch keinen hexedit für 0x0a. -n macht den \n weg. also quasi -\n
Software is like sex - it's better when it's free.

6

09.05.2007, 11:36

Zitat

Original von lolo
P.S.:

Quellcode

1
2
3
knoppix@1[knoppix]$ echo -n "bla" > test
knoppix@1[knoppix]$ ls -l test
-rw-r--r-- 1 knoppix knoppix 3 2007-05-07 22:03 test

man brauch keinen hexedit für 0x0a. -n macht den \n weg. also quasi -\n


Stimmt. Manchmal sieht den Wald vor lauter Bäumen nicht mehr ...

Jedenfalls habe ich Zwischenzeitlich am bingrep ziemlich gedreht. Ich habe aus dem Teil ein GNU autotools Projekt gemacht.

Es kann nun via stdin auch gefüttert werden, sollte mehr als 4GB an Daten vetragen und gibt auf Wunsch Context-Zeilen aus.

Außerdem verwende ich jetzt den Boyer-Moore Suchalgorithmus und nicht mehr den naiven Ansatz.

Ich habe bereits das Projekt auf sourceforge beantragt. Ein Aufnahme-(oder Absage-) Bestätigung bekomme ich in den nächsten Tagen.

However, in der Zwischenzeit kannst mir je eine PN mit deiner mail schicken und ich schick dir den tarball retour. Dann auspacken, GNU-3er (./configure; make; sudo make install) und ausprobieren ...

... und wenn du Bock hast: mir fehlt noch ein klitze-kleines Teil. Interesse? Mit ein paar kleinen C Kenntnissen kommst dann mit in die Developer-List =)

edit:

Also die ausgabe mit Progressreport ist doch eine extreme Bremse ... aber ok:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 $ time ./bingrep -p -C 64 -i random pf
scanning ... 9259285 (88%)
0x8d4915 (9259285)
0x00000000008d48d5: a0 66 9f 9d e6 e3 c5 e4   d4 8b c6 24 27 55 da 01   .f...... ...$'U..
0x00000000008d48e5: a8 ef bb 37 5c 2c 16 34   06 32 3b 35 7a 23 3c e9   ...7\,.4 .2;5z#<.
0x00000000008d48f5: 0e 92 f2 e9 08 f1 97 b0   9f b7 27 89 04 06 cf 22   ........ ..'...."
0x00000000008d4905: 92 9c 7e 67 5d d5 e0 e7   e0 2f 8a 42 75 59 42 ef   ..~g]... ./.BuYB.
0x00000000008d4915: 70 61 74 74 65 72 6e a9   1b cf d9 d2 23 62 0f 92   pattern. ....#b..
0x00000000008d4925: c5 8d 9f ff 5f 02 9b c0   5c 5e 18 5a c4 df 10 7b   ...._... \^.Z...{
0x00000000008d4935: a6 3d 86 e4 92 3c 37 58   3e cb 28 f2 81 d9 34 a0   .=...<7X >.(...4.
0x00000000008d4945: d9 d1 c7 0c 04 dc c0 b4   06 84 29 85 75 82 1b b8   ........ ..).u...
scanning ... 10485760 (100%)

real    1m21.375s
user    0m4.786s
sys     0m5.143s


Verglichen mit:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ time ./bingrep -C 64 -i random pf
0x8d4915 (9259285)
0x00000000008d48d5: a0 66 9f 9d e6 e3 c5 e4   d4 8b c6 24 27 55 da 01   .f...... ...$'U..
0x00000000008d48e5: a8 ef bb 37 5c 2c 16 34   06 32 3b 35 7a 23 3c e9   ...7\,.4 .2;5z#<.
0x00000000008d48f5: 0e 92 f2 e9 08 f1 97 b0   9f b7 27 89 04 06 cf 22   ........ ..'...."
0x00000000008d4905: 92 9c 7e 67 5d d5 e0 e7   e0 2f 8a 42 75 59 42 ef   ..~g]... ./.BuYB.
0x00000000008d4915: 70 61 74 74 65 72 6e a9   1b cf d9 d2 23 62 0f 92   pattern. ....#b..
0x00000000008d4925: c5 8d 9f ff 5f 02 9b c0   5c 5e 18 5a c4 df 10 7b   ...._... \^.Z...{
0x00000000008d4935: a6 3d 86 e4 92 3c 37 58   3e cb 28 f2 81 d9 34 a0   .=...<7X >.(...4.
0x00000000008d4945: d9 d1 c7 0c 04 dc c0 b4   06 84 29 85 75 82 1b b8   ........ ..).u...

real    0m0.124s
user    0m0.070s
sys     0m0.013s


random ist dabei ein 10MB file (erzeugt via dd und /dev/urandom) und ich suche darin nach dem Muster "pattern" (pf) welches ich händisch via khexedit reingesetzt habe.
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

7

11.05.2007, 07:36

So-dada.

Aus gegebenen Anlaß (und damit der Thread wieder mal nach oben rutscht, sonst sieht's ja niemand).

FYI: bingrep ist bei sourceforge akzeptiert worden. Für alle, welche interesse haben:

http://sourceforge.net/projects/bingrep

Das ist nicht das gleiche wie das Code-Snippet hier in diesem Thread. bingrep.c sieht jetzt ganz anders aus. Gaaaanz anders!

... und, ach ja: wer Lust und Laune hat: der Good-Suffix-Shift Table des Boyer-Moore-Algorithmus (pattern-matching-algorithmus; mal googeln) fehlt noch. Klappt auch ohne ist aber um das Eck nicht sooo effizient.

Wem's in dir Fingern juckt: macht's mal und schreibt mir eure Changes ...
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

8

11.05.2007, 14:02

nochmal ein dickes dankeschön.

ich arbeite noch an der auswertung der daten, die mir das tool ausgespuckt hat.

Lorenz
Software is like sex - it's better when it's free.

9

12.06.2007, 23:05

danke maggu, da hattest du recht.

das tool funktioniert, nur wurde wohl das keyfile überschrieben. schade.

die daten habe ich dann aufgegeben

lorenz
Software is like sex - it's better when it's free.

10

13.06.2007, 00:01

Zitat

Original von lolo
danke maggu, da hattest du recht.


Ich glaub da bedankst du dich beim Falschen... :D

11

13.06.2007, 10:11

Das "Danke" an mich war wohl wegen einer Erinnerung via PN.
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.

12

19.06.2007, 14:25

na wie ist die geschichte ausgegangen?

würde mich doch arg interessieren

13

19.06.2007, 15:30

hi nemesis,

ich habs aufgegeben. dh, meine ganzen daten sind futsch. extrem blöd, aber immerhin bin ich selber schuld... ^^

lorenz
Software is like sex - it's better when it's free.

14

19.06.2007, 21:43

Müsste der Thread nicht eigentlich als [gelöst] gekennzeichnet werden? Die ursprüngliche Frage

Zitat

meine frage: wie kann ich eine binärdatei nach diesen bytes durchsuchen und die 1024 darauf folgenden ausgeben?
wurde ja ausführlich behandelt und beantwortet.

Wenn jemand mal das gleiche Problem hat, und bei ihm die gesuchte Datei noch nicht überschrieben wurde, so könnte er doch mit den Informationen aus diesem Thread sein Problem lösen.
Frequent lock ups are a symptom of not enough memory but only in the way that nosebleeds are a symptom of gunshot wounds to the head.

15

20.06.2007, 12:26

Das eigentliche Problem "Device binär durchsuchen" scheint mir auch gelöst worden zu sein.
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.

16

20.06.2007, 12:27

Vorallem da die Forumskonvention ....

Sehe es aber auch als "gelöst"
Meine Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind explizit unter die GPL gestellt .....

Außerdem sind sie ein Ausdruck der Persönlichkeit des Schreibers!