Няшная / Говнокод #28834 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
static inline int is_openvpn_handshake(const char *pktdata, unsigned int pktlen) {
    /*
     * 0x38 is P_CONTROL_HARD_RESET_CLIENT_V2 + peer_id(0),
     * 0x50 is P_CONTROL_HARD_RESET_CLIENT_V3 + peer_id(0)
     */
    return pktlen >= 16
           && ntohs(((uint16_t*)pktdata)[0]) == pktlen - 2
           && (pktdata[2] == '\x38' || pktdata[2] == '\x50');
}

Код обнаружения протокола OpenVPN по рукопожатию.

ropuJIJIa ropuJIJIa, (Updated )

Комментарии (45, +45)

Няшная / Говнокод #28798 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
struct node
{
    void *data;

    struct node *head;
    struct node *tail;
};
struct list
{
    int size;

    struct node *head;
    struct node *tail;

    void *(*alloc_node)(size_t);
    void *(*alloc_data)(size_t);
    void (*free_node)(void *);
    void (*free_data)(void *);
};

typedef struct node node_t;
typedef struct list list_t;

void list_init(list_t *list)
{
    list->size = 0;

    list->head = (node_t*)list;
    list->tail = (node_t*)list;

    list->alloc_node = &malloc;
    list->alloc_data = &malloc;
    list->free_node = &free;
    list->free_data = &free;
}
void list_link(struct node *head, struct node *tail)
{
    head->tail = tail;
    tail->head = head;
}
void *push_head(list_t *list, node_t *head, size_t size)
{
    node_t *node = list->alloc_node(sizeof(node_t));
    void   *data = list->alloc_data(size);

    node->data = data;
    list_link(node, head->tail);
    list_link(head, node);

    list->size++;
    return data;
}
void *push_tail(list_t *list, node_t *tail, size_t size)
{
    node_t *node = list->alloc_node(sizeof(node_t));
    void   *data = list->alloc_data(size);

    node->data = data;
    list_link(tail->head, node);
    list_link(node, tail);

    list->size++;
    return data;
}
void pop(list_t *list, node_t *node)
{
    list_link(node->head, node->tail);
    list->size--;

    void *data = node->data;

    list->free_node(node);
    list->free_data(data);
}
void print(struct list *list)
{
    printf("\n====\n");

    printf("size: %ld \n", list->size);

    int i = 0;

    for(node_t *node = list->head; node != list; node = node->head)
    {
        printf("index: %ld number: %ld \n", i, *(int*)(node->data));
        i++;
    }
}

struct list lst;

    list_init(&lst);

    print(&lst);

    void *data;
    data = push_tail(&lst, lst.tail, 4);
    *(int*)data = 1;

итак скажите про название функций про то каких функций не хватает + alloc и free поля не трогать это мне нужно ТОЛЬКО НЕ советуйте перейти на с++ и использовать чтото другое(std::list)

CodeTux CodeTux, (Updated )

Комментарии (23, +23)

Няшная / Говнокод #28643 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void PasswordChecker(void);
void sub_BB4F(unsigned char* Password);//subroutine $BB4F and so on...
void sub_BB21(void);
void sub_BBE0(void);
void sub_BBEA(void);
void SEC_SBC_6502(unsigned char operand);
void ADC_6502_simplified(unsigned char operand);
unsigned char Password[8];//$0766 to $076D in RAM, when a player enters it
unsigned char Invalidity=0;//$0764 in RAM
unsigned char Level;//$$0070 in RAM
unsigned char TimeTens;//$04c5 in RAM
unsigned char TimeOnes;//$04c6 in RAM
unsigned char Byte4BF, Byte17, Byte18;
unsigned char a, x;
unsigned char c=0;//carry flag
//former char Byte76A is Password[4] now, former char Byte76C is Password[6] now

void PasswordGenerator(void);
void BuildORTable(void);
unsigned char* BuildParticularLevelsArray(unsigned char DesiredLevel);//will think of it later...
void SimplifiedLevelGenerator(unsigned char* PassToFill,unsigned char Level);//finds just one 2nd,3rd,6th,8th digit combo

int main()
{
	int Choice;
	printf("Enter g if you'd like to generate a new password.\nEnter a to analyze an existing password.\n");
	Choice=fgetc(stdin);
	flushall();
	if (Choice=='a')
	PasswordChecker();
	if (Choice=='g')
	PasswordGenerator();
	if (Choice=='s')//'level function' is basic when generating a pass
	BuildORTable();//so here a bit of 'hidden' investigation, which will be useful
	//if I ever decide to rewrite this prog to output all passes possible, not just one
	printf("Press any key to quit.\n");
	getch();
	return 0;
}

void PasswordChecker(void)
{
	char InputString[9];//one extra byte needed due to fgets
	int i;
	printf("Please enter your password to test:\n");
	fgets(InputString,9,stdin);
	for(i=0;i<8;i++)
	{
		if ((InputString[i]>57)||(InputString[i]<48))
		{
			printf("This string contains non-digits.\n");
			return;
		}
		else
			Password[i]=InputString[i]-48;//ascii to digit
	}
	sub_BB4F(Password);
	if (Invalidity==1)
	{
		printf("This password is invalid.\n");
		return;
	}
	printf("%s%d","Level: ",Level);
	printf("%s%d%d\n"," Time: ",TimeTens,TimeOnes);
	if (Level==15)
	printf("Level 15 doesn't exist. So-called level 15 passwords are programming mistakes and cause system hang.\n");
	if (Level==16)
	printf("Level 16 doesn't exist. So-called level 16 passwords are programming mistakes and lead you to a buggy screen where Prince can't move.\n");
	return;
}

void sub_BB4F(unsigned char* Password)//$BB4F
{
	a=0;
	x=0;
	while (x<8)
	{
		a=a+Password[x];
		x++;
	}
	if(a==0)
	{
		Invalidity=1;//$BBC0
		return;
	}
	Byte17=Password[4];//$BB63
	Byte18=Password[6];
	Password[4]=0;
	Password[6]=0;
	sub_BB21();//$BB72,calculates and writes 1st checksum to Password[4], 2nd checksum to Password[6]
	if (Password[4]!=Byte17)
	{
		Invalidity=1;
		return;
	}

Генератор паролей для игры Prince Of Perisa. Пришлось немного повозиться...


if (Password[6]!=Byte18)//$BB7C
{
Invalidity=1;
return;
}
Invalidity=0;//$BB85
a=Password[7];
sub_BBEA();
a=a&3;//$BB8E
a=a*4;
Password[7]=a;
a=Password[1];
sub_BBE0();//$BB98
a=a|Password[7];
Level=a+1;//+1 is my insertion
//if (Level!=1)//I chose to omit this $BBA2-$BBA4 code b/c it's unknown what byte at $06EE means
a=Password[0];
sub_BBE0();//$BBAA
TimeTens=a;
a=Password[3];
sub_BBEA();
TimeOnes=a;
return;//$BBBF
}

void SEC_SBC_6502(unsigned char operand)
{
c=1;
if ((a-operand)>=0)
a=a-operand;
else
{
a=a-operand+256;
c=0;
};
}

void ADC_6502_simplified(unsigned char operand)
{
if ((a+operand)<256)
a=a+operand;
else a=a+operand-256;
}

void sub_BB21(void)
{
x=0;
BB23: a=Password[4];
a=a+Password[x];
if(a<10)
{
BB46: Password[4]=a;//$BB46
x++;
if (x!=8)
goto BB23;
else return;//$BB4E
}
else //$BB2E
{
Byte4BF=a;
a=Password[6];
a++;//we came here b/c c=1
if (a<10)
goto BB3D;
else
SEC_SBC_6502(10);//can we get here? I doubt...
BB3D: Password[6]=a;
a=Byte4BF;
SEC_SBC_6502(10);//$BB44, no danger of negative result
goto BB46;
}
}

cepreu_monoJlb cepreu_monoJlb, (Updated )

Комментарии (6, +6)

Няшная / Говнокод #28582 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main ()
{
   char address[128], fname[128], command[128];
   FILE *tempfile;

   strcpy(fname , tmpnam(NULL));
   tempfile = fopen (fname, "w");     /* create temporary file */
   if (tempfile == NULL)              /* error - didn't create file */
   {
      printf("Internal failure #1 please report %d\n", errno);
      exit (1);
   }
   fprintf(tempfile, "Thank you very much for caring about our cause\n");
   fprintf(tempfile, "this letter is just to tell you how much we\n");
   fprintf(tempfile, "really think you are wonderful for caring.\n\n");
   fprintf(tempfile, "Sincerely,\n\n");
   fprintf(tempfile, "Jane Doe, Executive Thanker\n");
fclose (tempfile);
   gets(address);                            /* read in email address */

   sprintf(command, "mail -s \"thanks for caring\" %s < %s\n",
           address, fname);                /* create the command */
   system (command);                       /* execute command */
   remove (fname);                         /* clean up */
   exit (0);
}

Игра: найди вулна.

JloJle4Ka JloJle4Ka, (Updated )

Комментарии (19, +19)

Няшная / Говнокод #28556 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
switch(argCount)
	{
		case 0: sprintf(dst, fmt); break;
		case 1: sprintf(dst, fmt, args[0]); break;
		case 2: sprintf(dst, fmt, args[0], args[1]); break;
		case 3: sprintf(dst, fmt, args[0], args[1], args[2]); break;
		case 4: sprintf(dst, fmt, args[0], args[1], args[2], args[3]); break;
		case 5: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4]); break;
		case 6: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5]); break;
		case 7: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break;
		case 8: sprintf(dst, fmt, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); break;
		...

GAMER GAMER, (Updated )

Комментарии (30, +30)

Няшная / Говнокод #28553 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
if(((mFlags&0x80)==0)&&(mFlags&0x40)==0){if(samplesArr[_k]>dataAmplitudeHi)	//‚믮«­ï¥¬ ¨§¬¥à¥­¨¥ ¨¬¯ã«ìᮢ-¤¥â¥ªâ®à®¢. ’ ª¦¥ ¬¥à塞 ¯ ã§ã{
			while(1){if(samplesArr[_k]>=dataAmplitudeHi){++_k;++_j;}else{break;}}
			dMin=dMax=wideTable[pulseCnt]=_j;
			++pulseCnt;
			dataStack(1,_k);
			_i=_j;_j=0;pauseTrig=1;}
		while(1)
		{if(samplesArr[_k]<=invertSample){++_k;++_j;}else{break;}}
		pMin=pMax=pauseTable[pauseCnt]=_j;
		++pauseCnt;_i=_j;_j=0;
		if(pauseTrig==0){
			while(1){
				if(samplesArr[_k]>=dataAmplitudeHi){
					++_k;
					++_j;}else{break;}}
			dMin=dMax=wideTable[pulseCnt]=_j;
			++pulseCnt;_i=_j;_j=0;}
		else{_k=dataStack(0,0);}
			pauseTrig=0;
			for(uint32_t i=_k;i<bufferLength;++i){
				//printf("iteration %d 0x%02X\n",i,samplesArr[i]);
				if((samplesArr[i]>dataAmplitudeHi)&&(_j>_p)&&(pauseTrig==0)&&(signalTrig==1)){
					//printf("trig pulse up %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
				else if((samplesArr[i]>dataAmplitudeHi)&&(_j<_p)&&(pauseTrig==0)&&(signalTrig==1))
				{//printf("trig pulse down %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
				else if((samplesArr[i]>dataAmplitudeHi)&&(_j==_p)&&(pauseTrig==0)&&(signalTrig==1))
				{//printf("trig pulse non-change %d",i);if(_j<pMin){pMin=_j;}else if(_j>pMax){pMax=_j;}pauseTrig=1;signalTrig=0;pauseTable[pauseCnt]=_j;++pauseCnt;trigPause=0;_p=_j;_j=0;//printf("\n");}
				if((samplesArr[i]<invertSample)&&(_j>dMin-(dMin/4))&&(_j>_i)&&(pauseTrig==1)&&(signalTrig==0))
				{//printf("trig pause up %d",i);if(_j<dMin){dMin=_j;}else if(_j>dMax){dMax=_j;}pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
				else if((samplesArr[i]<invertSample)&&(_j>dMin-(dMin/4))&&(_j<_i)&&(pauseTrig==1)&&(signalTrig==0))
				{//printf("trig pause down %d",i);if(_j<dMin){dMin=_j;}else if(_j>dMax){dMax=_j;}pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
				else if((samplesArr[i]<invertSample)&&(_j>=dMin-(dMin/4))&&(_j==_i)&&(pauseTrig==1)&&(signalTrig==0))
				{//printf("trig pause non-change %d",i);if(samplesArr[i]<invertSample)pauseTrig=0;signalTrig=1;wideTable[pulseCnt]=_j;++pulseCnt;_i=_j;_j=0;//printf("\n");}
				if((samplesArr[i]>dataAmplitudeHi)&&(_j>dMax)&&(pauseTrig==1)&&(signalTrig==0)){trigPause++;}
				else if(trigPause>2){_k=i-_j-skipsBeforeTrig;_ovct=_j;mFlags=mFlags|0xC0;break;}
				if((samplesArr[i]>dataAmplitudeHi)&&(trigKey==0x00)){trigKey=0xFF;}
				if((samplesArr[i]>dataAmplitudeHi)&&(trigKey==0xFF)){trigKey=0x00;}
				else if((pauseTrig==1)&&(trigPause>skipsBeforeTrig)){trigPause=0;_k=i;_ovct=_i-_p;mFlags=mFlags|0xC0;break;}
				else if(pauseTrig==1){trigPause++;}
				if((samplesArr[i]>dataAmplitudeHi)&&(pauseTrig==1)&&(signalTrig==0)){++_j;}
				if((samplesArr[i]<invertSample)&&(pauseTrig==0)&&(signalTrig==1)){++_j;}}_k=_k-_ovct;
		for(uint8_t i=0;i<pulseCnt;i++){divl=divl+wideTable[i];}
		divl=divl/pulseCnt;
		compTim.tSPavg=round(divl);}
	memset(wideTable,0x00,sizeof(wideTable));

Шизофрения

siclown siclown, (Updated )

Комментарии (8, +8)

Няшная / Говнокод #28466 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
// https://github.com/flipperdevices/flipperzero-firmware/blob/2a6a3a1bf7ba1ecb42b8cbfc1b1856a54f2878b7/applications/plugins/music_player/music_player.c#L74

static bool is_white_note(uint8_t semitone, uint8_t id) {
    switch(semitone) {
    case 0:
        if(id == 0) return true;
        break;
    case 2:
        if(id == 1) return true;
        break;
    case 4:
        if(id == 2) return true;
        break;
    case 5:
        if(id == 3) return true;
        break;
    case 7:
        if(id == 4) return true;
        break;
    case 9:
        if(id == 5) return true;
        break;
    case 11:
        if(id == 6) return true;
        break;
    default:
        break;
    }

    return false;
}

static bool is_black_note(uint8_t semitone, uint8_t id) {
    switch(semitone) {
    case 1:
        if(id == 0) return true;
        break;
    case 3:
        if(id == 1) return true;
        break;
    case 6:
        if(id == 3) return true;
        break;
    case 8:
        if(id == 4) return true;
        break;
    case 10:
        if(id == 5) return true;
        break;
    default:
        break;
    }

    return false;
}

Хуйня какая-то. То ли дело "паттерн матчинг".

j123123 j123123, (Updated )

Комментарии (41, +41)