Gebruiken van c bestanden

Pagina: 1
Acties:

  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 08:04
Voor mijn afstudeerstage wil ik gebruik maken van de "voip vulnerability toolkit" welke ter beschikking wordt gesteld op de securelogix website. Programma's uit deze toolkit worden gebruikt in het boek "Hacking Exposed VoIP". Op basis van dit boek heb ik enkele testcases samengesteld.

Als systeem maak ik gebruik van een virtualBox virtuele opstelling met Debian 5.0. De volgende packages zijn geinstalleerd:
g++/lenny uptodate 4:4.3.2-2
g++-4.3/lenny uptodate 4.3.2-1.1
gcc/lenny uptodate 4:4.3.2-2
gcc-4.2-base/lenny uptodate 4.2.4-6
gcc-4.3/lenny uptodate 4.3.2-1.1
gcc-4.3-base/lenny uptodate 4.3.2-1.1
libc6/lenny uptodate 2.7-18
libc6-dev/lenny uptodate 2.7-18
libc6-i686/lenny uptodate 2.7-18
libgcc1/lenny uptodate 1:4.3.2-1.1
libgcrypt11/lenny uptodate 1.4.1-1
libgdbm3/lenny uptodate 1.8.3-3
libstdc++6/lenny uptodate 4.3.2-1.1
libstdc++6-4.3-dev/lenny uptodate 4.3.2-1.1
libtasn1-3/lenny uptodate 1.4-1
(Heb even weggelaten wat volgens mij niet van toepassing is)

Als ik de toolkit download moet ik eerst de hack_library installeren waarbij een Makefile is bijgeleverd. Als ik deze "make" dan krijg ik de volgende foutmelding:
code:
1
2
hack_library.c: In function âStr2IPâ:
hack_library.c:85: warning: incompatible implicit declaration of built-in function âstrchrâ


C code: (hack_library.c)
code:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
//-------------------------------------------------------------------------------

#include "hack_library.h"

//-------------------------------------------------------------------------------
//
// Str2IP
//
// Called to convert a character string to an int IP address in network byte
// order. The string must be in dot notation. Note: This is a destructive call
// to the input string!
//
//-----------------------------------------------------------------------------

int  Str2IP ( char *str, int *ipNum )
{
    unsigned char  str_val[4];
    int           *int_val = (int*) str_val;
    int            i       = 0;
    int            val;
    char          *digits;
    char          *end = NULL;
    char          *ptr = str;

//
//  Skip leading spaces
//

    while ( *ptr == ' ' ) {
        ptr++;
    }
    digits = ptr;

//
//  Make sure the string is digits and '.'
//

    while ( *ptr != '\0' && *ptr != ' ' ) {
        if ( (!isdigit(*ptr)) && (*ptr != '.' ) ) {
            return ( EXIT_FAILURE );
        } else if ( *ptr == '.' ) {
            if ( i == 3 ) {
                return ( EXIT_FAILURE );
            } else {
                i++;
            }
            ptr++;
        } else {
            ptr++;
        }
    }

    if ( i != 3 ) {
        return ( EXIT_FAILURE );
    }

    ptr = digits;
    for ( i = 0; i < 4; i++ ) {
        if ( i<3 && (end = strchr(ptr,'.')) == NULL ) {
            return ( EXIT_FAILURE );
        }

        *end = '\0';
        val = atoi( ptr );
        if ( val > 255 || ! isdigit(*ptr) ) {
            return ( EXIT_FAILURE );
        }

        str_val[i] = (unsigned char) val;
        ptr        = end + 1;
    }

    *ipNum = *int_val;

    return ( EXIT_SUCCESS );
}

//-----------------------------------------------------------------------------
//
//   DumpPacket
//
//   Dump out the contents of the packet in a standard form.
//   The packetSize is the length in bytes. Output appears
//   in the following form:
//
//   0000 xx xx xx xx xx xx xx xx  xx xx xx xx xx xx xx xx
//   0010 xx xx xx xx xx xx xx xx  xx xx xx xx xx xx xx xx
//   0020 xx xx xx
//
//   where the 1st column is the offset from the beginning of the
//   packet for the next byte and each xx is a hex byte value.
//
//   return 0 for success, -1 for failure.
//
//-----------------------------------------------------------------------------

int  DumpPacket( char *psPacket, int packetSize )
{
    int lines   = packetSize / 16;
    int rem     = packetSize % 16;
    int m       = 0;
    int n       = 0;

    if ( ( !psPacket ) || ( packetSize < 0 ) ) {
        return -1;
    }

    printf( "\nPacket:" );

    for ( m = 0; m < lines; m++ ) {

//
//  Print first 8 bytes of current line
//

        printf( "\n%04.4x ", m * 16 );  // Row offset leader

        for ( ; n < ( m * 16 + 8 ); n++ ) {
            printf( " %02.2x", (unsigned char) psPacket[ n ] );
        }

        printf ( " " ); //  Extra space separating columns of 8

//
// Print last 8 bytes of current line
//

        for ( ; ( n < ( m + 1 ) * 16 ); n++ ) {
            printf( " %02.2x", (unsigned char) psPacket[ n ] );
        }
    }

//
//  Print remainder of bytes that do not form a full 16 byte line. Print up to
//  first 8 bytes of last line
//

    if ( n != packetSize ) {
        printf( "\n%4.4x ", m * 16 );  // Row offset leader

        for ( ; ( n < ( m * 16 + 8 ) ) && ( n < packetSize ); n++ ) {
            printf( " %02.2x", (unsigned char) psPacket[ n ] );
        }

        printf ( " " ); //  Extra space separating columns of 8

//
//      Print up to next 8 bytes of last line
//

        for ( ; ( n < ( ( m + 1 ) * 16 ) ) && ( n < packetSize ); n++ ) {
            printf( " %02.2x", (unsigned char) psPacket[ n ] );
        }
    }

    printf( "\n\n" );
    return ( 0 );

}  //  end DumpPacket()

//-----------------------------------------------------------------------------
//
// GetNextGuid
//
//   Generate a 36 character random ID.
//
//-----------------------------------------------------------------------------

char *GetNextGuid ( void )
{
    char             *guid;
    int               r1;
    int               r2;
    int               r3;
    int               ur;
    struct timeval    tv;

    ur = open( "/dev/urandom", O_RDONLY );
    if ( ur < 0 ) {
        r1 = random();
        r2 = random();
        r3 = random();
    } else {
        if ( read( ur, &r1, sizeof( r1 ) ) < ( int )sizeof( r1 ) ) {
            r1 = random();
        }
        if ( read( ur, &r2, sizeof( r2 ) ) < ( int )sizeof( r2 ) ) {
            r2 = random();
        }
        if ( read( ur, &r3, sizeof( r3 ) ) < ( int )sizeof( r3 ) ) {
            r3 = random();
        }
        close( ur );
    }

    guid = (char *)malloc( 37 );
    if ( !guid ) {
        fprintf( stderr,
                 "GetNextGuid: out of memory",
                 __FILE__,
                 __LINE__ );
        return ( NULL );
    }

    gettimeofday( &tv, NULL );

    snprintf( guid, 37,
              "%1x%05x%02x-%04x-%04x-%04x-%08x%04x",
              ( unsigned int )  tv.tv_sec       & 0x0000000f,
              ( unsigned int )  tv.tv_usec      & 0x000fffff,
              ( unsigned int )  r3        >> 16 & 0x000000ff,
              ( unsigned int )  tv.tv_sec >>  4 & 0x0000ffff,
              ( unsigned int )( tv.tv_sec >> 20 & 0x00000fff ) | 0x00004000,
              ( unsigned int )( r1              & 0x00003fff ) | 0x00008000,
              ( unsigned int )  r2              & 0xffffffff,
              ( unsigned int )  r3              & 0x0000ffff                 );

    return ( guid );
}


hack_library.h:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef __HACK_LIBRARY_H
#define __HACK_LIBRARY_H

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <fcntl.h>

int   Str2IP ( char *str, int *ipNum );
int   DumpPacket ( char *psPacket, int packetSize );
char  *GetNextGuid ( void );

#endif  //  __HACK_LIBRARY_H


Over de toolkit zelf is op internet niets te vinden en heb in een mail aan de schrijvers in eerste instantie snel antwoord gekregen. Mijn 2e mail is al enkele dagen onbeantwoord, vandaar dat ik het zo probeer. :)

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 25-01 20:45

YellowOnline

BEATI PAVPERES SPIRITV

Programmeren is allesbehalve mijn specialiteit, maar in lijn 59 wordt een functie aangeroepen die niet gekend is.
if ( i<3 && (end = strchr(ptr,'.')) == NULL )
Ik kan het natuurlijk helemaal verkeerd hebben, maar mijn gok is dat je een header file ontbreekt. Ik zou eens het volgende toevoegen bij de includes bovenaan in hack_library.c:
#include <stdio.h>
#include <string.h>

[ Voor 21% gewijzigd door YellowOnline op 21-04-2009 12:43 ]


  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 08:04
YellowOnline schreef op dinsdag 21 april 2009 @ 12:41:
Programmeren is allesbehalve mijn specialiteit, maar in lijn 59 wordt een functie aangeroepen die niet gekend is.


[...]


Ik kan het natuurlijk helemaal verkeerd hebben, maar mijn gok is dat je een header file ontbreekt. Ik zou eens het volgende toevoegen bij de includes bovenaan in hack_library.c:


[...]
hell... ik had verwacht dat ik een of andere package niet geinstalleerd had maar het werkt al... zal de volgende eens proberen! :) thx!

  • Slackware
  • Registratie: Juni 2001
  • Niet online
Supermario16 schreef op dinsdag 21 april 2009 @ 12:25:

Als ik de toolkit download moet ik eerst de hack_library installeren waarbij een Makefile is bijgeleverd. Als ik deze "make" dan krijg ik de volgende foutmelding:
code:
1
2
hack_library.c: In function âStr2IPâ:
hack_library.c:85: warning: incompatible implicit declaration of built-in function âstrchrâ
Dat is geen foutmelding maar een waarschuwing, tenzij "treat warnings as errors" aanstaat stopt je compiler niet op die melding.

  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 26-01 20:38
Slackware schreef op dinsdag 21 april 2009 @ 12:57:
[...]


Dat is geen foutmelding maar een waarschuwing, tenzij "treat warnings as errors" aanstaat stopt je compiler niet op die melding.
Misschien geen error, maar wilt wel zoveel zeggen als "ik ken deze functie niet, dus geef hem ook geen betekenis". Wat vijr error-achtig is voor mij :) String.h includen zou het moeten verhelpen.

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 25-01 20:45

YellowOnline

BEATI PAVPERES SPIRITV

Ik ben best trots op mezelf dat ik het dus goed had als non-programmeur *O*

  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 08:04
Hmm... ik zit weer met een zelfde soort probleem en dacht, zal het nog eens proberen:
code:
1
2
3
4
5
6
7
8
9
DEB-01:/voip/rtpmixsound_v3.0# make
gcc -I../hack_library -I../g711conversions rtpmixsound.c -lnet -lpcap -lfindrtp ../hack_library/hack_library.o ../g711conversions/g711conversions.o -o rtpmixsound
rtpmixsound.c:92:24: error: libfindrtp.h: Bestand of map bestaat niet
rtpmixsound.c: In function âmainâ:
rtpmixsound.c:108: error: ârtp_pairâ undeclared (first use in this function)
rtpmixsound.c:108: error: (Each undeclared identifier is reported only once
rtpmixsound.c:108: error: for each function it appears in.)
rtpmixsound.c:108: error: ârpâ undeclared (first use in this function)
make: *** [rtpmixsound] Fout 1


rtpmixsound.c:
code:
1
2
3
4
#include <libfindrtp.h>
#include "hack_library.h"
#include "g711conversions.h"
#include "rtpmixsound.h"

Heb alleen de includes erin gezet omdat gcc de fout geeft libfindrtp.h niet te kunnen vinden. Deze staat in de map /voip/libfindrtp-0.4b. Ik heb al geprobeerd de <> in "" te veranderen maar dit mocht niet baten...

Iemand een idee?

  • r0b
  • Registratie: December 2002
  • Laatst online: 22-01 17:50

r0b

http://sourceforge.net/projects/libfindrtp/ even installeren :?
Hij zal ongetwijfeld libfindrtp in je $PATH zoeken; die hoef je niet apart te includen (zo werkt C ook niet eens, geloof ik. Maar IANAP :) )

  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 26-01 20:38
Includes moet je niet toevoegen, want het is net daar dat GCC over klaagt: hij kan de bronbestanden niet vinden. Welke distro gebruik je? Moest het pakket in de repo's zitten zou je op iets debian-achtig gewoon "apt-get install libfindrtp-dev" kunnen doen, maar ik zie hier dat dit het geval niet is. Even url die Rob gaf bezoeken en tarball downloaden/compileren/installeren dus. Maar blijkbaar zit er in de map "voip" al een set sources voor libfindrtp, je kan de download stap dus overslaan en naar die folder gaan en de INSTALL eens doorspitten.

Het verschil tussen 'include <>' en 'include ""' is dat de <> enkel in include paden zal zoeken voor de file (die je aan gcc kan geven via -I), en "" ook nog in de directory van de source file zal kijken.

  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 08:04
Ik heb (natuurlijk) de bijgeleverde libfindrtp geinstalleerd. Ik zal toch voor de zekerheid even de vesie van sourceforge ook proberen.

Edit:
Versies zijn hetzelfde en kunnen gewoon via "make" geinstalleerd worden. Ik gebruik Debian 5.0. Nog steeds dezelfde foutmelding.

Edit2:
Die includes zijn gegeven, dat is een gedeelte van het bestand rtpmixsound.c.

[ Voor 46% gewijzigd door Supermario16 op 28-04-2009 14:18 ]


  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 26-01 20:38
"installeren via make" == "make" && "make install"?

Zoja, wat geeft "find /usr/include | grep libfindrtp.h" op? Indien niets, zie je in de "make install" output van libfindrtp ergens een pad waar hij de header plaatst?

  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 08:04
maleadt schreef op dinsdag 28 april 2009 @ 14:25:
"installeren via make" == "make" && "make install"?

Zoja, wat geeft "find /usr/include | grep libfindrtp.h" op? Indien niets, zie je in de "make install" output van libfindrtp ergens een pad waar hij de header plaatst?
"make" != "make install"...

Sommige dingen zijn zo simpel :?

  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 26-01 20:38
Quite a difference, indeed :P
Controleer de directory altijd eens voor een README of INSTALL file, staat meestal in uitgelegd hoe je het pakket moet installeren. Meestal is het routine ("./configure && make && make install"), maar als er autotools aan de pas komen kan het best wat moeilijker worden.
Nog een hint misschien, als je Debian gebruikt kan je "checkinstall" uitvoeren om een .deb te genereren van een pakket. Gewoon de bestanden compileren met "make", maar niet installeren. In de plaats voer je "checkinstall" uit, vult wat dingen en, et voila een .deb package wordt gegenereerd. Vooral handig als je later het pakket wil verwijderen zonder dat je de source nog staan hebt (en een "make uninstall" dus onmogelijk is).

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 27-01 19:59

deadinspace

The what goes where now?

Supermario16 schreef op dinsdag 28 april 2009 @ 12:04:
Deze staat in de map /voip/libfindrtp-0.4b.
Sorry, waar?

Waarom staan die dingen niet in /usr/local?

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

Je kunt volgens mij ook gewoon aan gcc meegeven dat ie ook daar moet gaan zoeken voor include files.

iets van

gcc -I/home/user/mijnincludefiles voip.c

(hoofdletter i dus)

Uiteindelijk zul je er inderdaad wel voor moeten zorgen dat die .h files bij de eindgebruikers wel al bestaan. Kun je bijvoorbeeld als een dependency meenemen voor je programma, of als het 1 statisch .h file'tje is, gewoon in de rpm / tar.gz / deb meenemen.

We are pentium of borg. Division is futile. You will be approximated.

Pagina: 1