Answer the question
In order to leave comments, you need to log in
How to compile C++ application with code and makefile?
I have no programming experience, but I need to compile C++ code.
There is a code and a makefile. On the recommendation, I tried to build using MinGW, but nothing came out. It
gives the following errors:
C:\MinGW\bin>mingw32-make.exe
Makefile:8: *** missing separator (did you mean TAB instead of 8 spaces?). Stop
.
C:\MinGW\bin>mingw32-make.exe
g++ -c -o ddwrtcg.o ddwrtcg.cpp
process_begin: CreateProcess(NULL, g++ -c -o ddwrtcg.o ddwrtcg.cpp, ...) failed.
make (e=2): Не удается найти указанный файл.
<builtin>: recipe for target 'ddwrtcg.o' failed
mingw32-make: *** [ddwrtcg.o] Error 2
C:\MinGW\bin>mingw32-make.exe
gcc -o ddwrtcg ddwrtcg.o
ddwrtcg.o: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status
Makefile:8: recipe for target 'ddwrtcg' failed
mingw32-make: *** [ddwrtcg] Error 1
CC = gcc
CFLAGS = -Wall -Wwrite-strings
LD = gcc
LDFLAGS =
LIBS =
ddwrtcg: ddwrtcg.o
$(LD) $(LDFLAGS) -o [email protected] $(LIBS)$^
clean:
-rm -f ddwrtcg.o ddwrtcg.exe
%.o: %.c
$(CC) $(CFLAGS) -c -o [email protected] $^
#include <stddef.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define ARC4_STATE_LEN 256
#define ARC4_MAX_STREAMLEN 0x40000000
#define DDWRT_KEY_LEN 28
#define DDWRT_CODE_LEN 64
struct arc4ctx {
unsigned char state[ARC4_STATE_LEN];
unsigned long len;
unsigned char i;
unsigned char j;
};
struct ddwrt_key {
unsigned char key[DDWRT_KEY_LEN];
uint32_t crc;
};
static const uint32_t crc32tab[256] =
{
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
};
static uint32_t getcrc32(unsigned char *buf, unsigned long len, uint32_t crc)
{
while (len--)
crc = (crc >> 8) ^ crc32tab[(crc ^ *buf++) & 0xff];
return crc;
}
static const uint8_t hexchars[16] = "0123456789ABCDEF";
static inline uint8_t hex2char(uint8_t c)
{
int i;
for (i = 0; i < sizeof(hexchars); i++) {
if (hexchars[i] == c)
return i;
}
return 0;
}
static void hex2key(char *hex, unsigned char *code)
{
int i;
for (i = 0; i < 32; i++) {
uint8_t c1, c2;
c1 = hex2char(hex[2 * i]);
c2 = hex2char(hex[2 * i + 1]);
*code++ = (c1 << 4) | c2;
}
}
static void arc4init(struct arc4ctx *ctx, void *key, int keylen)
{
uint8_t *state = ctx->state;
uint8_t *p = key;
int i;
uint8_t j;
uint8_t k = 0;
ctx->len = 0;
for (i = 0; i < ARC4_STATE_LEN; i++)
state[i] = i;
ctx->i = 0;
ctx->j = 0;
for(i = 0, j = 0; i < 256; i++, j = (j + 1) % keylen) {
uint8_t t;
t = state[i];
state[i] = state[k += p[j] + t];
state[k] = t;
}
}
static int arc4crypt(struct arc4ctx *ctx, uint8_t *src, uint8_t *dst, int len)
{
uint8_t *state = ctx->state;
uint8_t i, j;
int k;
ctx->len +=len;
if (ctx->len > ARC4_MAX_STREAMLEN)
return -1;
i = ctx->i;
j = ctx->j;
for (k = 0; k < len; k++) {
uint8_t t;
t = state[j += state[++i]];
state[j] = state[i];
state[i] = t;
dst[k] = src[k] ^ state[(state[i] + state[j]) & 0xff];
}
ctx->i = i;
ctx->j = j;
return len;
}
static void printkey(struct ddwrt_key *key)
{
uint8_t *p = (uint8_t *)key;
int i;
for (i = 0; i < 32; i++)
printf("%02X", p[i]);
printf("n");
}
static void usage(int err)
{
fprintf(stderr, "Usage: ddwrtcg <mode> <code>\n"
"valid modes:\n"
" -a generate activation code for dd-wrt professional\n"
" -s generate activation code for dd-wrt's superchannel feature\n");
exit(err);
}
int main(int argc, char *argv[])
{
struct arc4ctx ctx;
struct ddwrt_key ckey;
struct ddwrt_key dkey;
uint32_t crc;
char *pwd = NULL;
char *mode;
char *code;
fprintf(stdout, "DD-WRT v24-sp1 activation code generator by DasIndividuumn\n");
if (argc != 3)
usage(1);
mode = argv[1];
if (strcmp(mode, "-a") == 0) {
pwd = "quampfmampf";
} else if (strcmp(mode, "-s") == 0) {
pwd = "schannelsuper";
} else {
fprintf(stderr, "ddwrtcg: unknown mode %s\n", mode);
usage(2);
}
code = argv[2];
if (strlen(code) != DDWRT_CODE_LEN) {
fprintf(stderr, "ddwrtcg: code length must be %d\n",
DDWRT_CODE_LEN);
exit(3);
}
hex2key(code, (uint8_t *)&ckey);
crc = getcrc32(ckey.key, sizeof(ckey.key), 0xffffffff);
if (crc != ckey.crc) {
fprintf(stderr, "ddwrtcg: invalid code\n");
exit(4);
}
arc4init(&ctx, pwd, strlen(pwd));
arc4crypt(&ctx, (uint8_t *)&ckey, (uint8_t *)&dkey, sizeof(dkey));
printkey(&dkey);
exit(0);
}
Answer the question
In order to leave comments, you need to log in
it will probably be easier for you to write on the command line
you figured out what was wrong
You probably don't have g++ installed. And why, the code is clearly in pure C.
I don't know how you got ddwrtcg.o, but it doesn't look like it's an object file.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question