• LostXOR@fedia.ioOP
    link
    fedilink
    arrow-up
    4
    ·
    1 month ago

    If anyone wants to actually run this, here ya go:

              #include              <stdio.h>
          short i=0;long          b[]={1712,6400
        ,3668,14961,00116,      13172,10368,41600,
      12764,9443,112,12544,15092,11219,116,8576,8832
    ,12764,9461,99,10823,17,15092,11219,99,6103,14915,
    69,1721,10190,12771,10065,16462,13172,10368,11776,
    14545,10460,10063,99,12544,14434,16401,16000,8654,
    12764,13680,10848,9204,113,10441,14306,9344,12404,
      32869,42996,12288,141129,12672,11234,87,10086,
        12655,99,22487,14434,79,10083,12750,10368,
          10086,14929,79,10868,14464,12357};long
            n=9147811012615426336;long main(){
              if(i<0230)printf("%c",(char)((
                0100&b[i++>>1]>>(i--&0x1)*
                  007)+((n>>(b[i>>001]>>
                    7*(0b1&01-i++)))&1
                      *main(111))));
                        return 69-
                          0b0110
                            ;}
    

    Bonus points if you can deobfuscate it!

    • 1stTime4MeInMCU@mander.xyz
      link
      fedilink
      English
      arrow-up
      3
      ·
      edit-2
      1 month ago

      If your love letter isn’t given in the form of highly obfuscated C, is it really a love letter? I don’t know, but what I do know is that I love you! <3

    • Redkey@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      1 month ago

      I don’t know if this will work or even compile, but I feel like I’m pretty close.

      long main () {
          char output;
          unsigned char shift;
          long temp;
          
          if (i < 152) {
              shift = (i & 1) * 7;
              temp = b[i >> 1] >> shift;
              i++;
              output = (char)(64 & temp);
              output += (char)((n >> (temp & 63)) & main());
              printf("%c", output);
          }
      
          return 63;
      }
      
      • ulterno@lemmy.kde.social
        link
        fedilink
        English
        arrow-up
        2
        ·
        1 month ago

        Here’s it with some amount of de-obfuscation:

        #include <stdio.h>
        short i = 0;
        const long b[]
        	= { 0xd60,  0x3200,  0x1ca8, 0x74e2, 0x9c,   0x66e8, 0x5100,  0x14500,
        		0x63b8, 0x49c6,  0xe0,   0x6200, 0x75e8, 0x57a6, 0xe8,    0x4300,
        		0x4500, 0x63b8,  0x49ea, 0xc6,   0x548e, 0x22,   0x75e8,  0x57a6,
        		0xc6,   0x2fae,  0x7486, 0x8a,   0xd72,  0x4f9c, 0x63c6,  0x4ea2,
        		0x809c, 0x66e8,  0x5100, 0x5c00, 0x71a2, 0x51b8, 0x4e9e,  0xc6,
        		0x6200, 0x70c4,  0x8022, 0x7d00, 0x439c, 0x63b8, 0x6ae0,  0x54c0,
        		0x47e8, 0xe2,    0x5192, 0x6fc4, 0x4900, 0x60e8, 0x100ca, 0x14fe8,
        		0x6000, 0x44e92, 0x6300, 0x57c4, 0xae,   0x4ecc, 0x62de,  0xc6,
        		0xafae, 0x70c4,  0x9e,   0x4ec6, 0x639c, 0x5100, 0x4ecc,  0x74a2,
        		0x9e,   0x54e8,  0x7100, 0x608a };
        const long n = 9147811012615426336;
        long
        main ()
        {
        	if (i < 152)
        	{
        		char shifter;
        		if (i % 2 == 0)
        		{
        			shifter = 8;
        		}
        		else
        		{
        			shifter = 1;
        		}
        		char adder1 = (b[i >> 1] >> shifter) & 64;
        
        		char adder2 = (n >> (b[i >> 1] >> shifter)) & 63;
        
        		char to_print = (char)adder1 + adder2;
        		i++;
        		main ();
        		printf ("%c", to_print);
        	}
        	return 63;
        }
        

        Needless to say, the return value doesn’t matter any more. So you can change it to 0 or 69 depending upon your preferences.

        • ulterno@lemmy.kde.social
          link
          fedilink
          English
          arrow-up
          2
          ·
          1 month ago

          And more de-obf:

          #include <stdio.h>
          
          const char addarr1[]
          	= { 0x40, 0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x40, 0x40, 0x40,
          		0x0,  0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x40, 0x40, 0x0,
          		0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x40, 0x0,  0x40,
          		0x40, 0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x40, 0x0,  0x40,
          		0x40, 0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
          		0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x0,  0x0,  0x40, 0x40, 0x0,  0x40,
          		0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x0,  0x40,
          		0x40, 0x40, 0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x0,  0x0,
          		0x40, 0x0,  0x40, 0x40, 0x40, 0x0,  0x40, 0x0,  0x40, 0x40, 0x40, 0x40,
          		0x0,  0x0,  0x40, 0x40, 0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x0,  0x40,
          		0x0,  0x40, 0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x40, 0x0,
          		0x40, 0x40, 0x40, 0x40, 0x0,  0x40, 0x0,  0x40, 0x40, 0x40, 0x40, 0x0,
          		0x40, 0x40, 0x40, 0x0,  0x0,  0x0,  0x0,  0x0 };
          
          const char addarr2[]
          	= { 0x9,  0x26, 0x20, 0x39, 0x2f, 0x35, 0x32, 0x20, 0x2c, 0x2f, 0x36, 0x25,
          		0x20, 0x2c, 0x25, 0x34, 0x34, 0x25, 0x32, 0x20, 0x29, 0x33, 0x2e, 0x27,
          		0x34, 0x20, 0x27, 0x29, 0x36, 0x25, 0x2e, 0x20, 0x29, 0x2e, 0x20, 0x34,
          		0x28, 0x25, 0x20, 0x26, 0x2f, 0x32, 0x2d, 0x20, 0x2f, 0x26, 0x20, 0x28,
          		0x29, 0x27, 0x28, 0x2c, 0x39, 0x20, 0x2f, 0x22, 0x26, 0x35, 0x33, 0x23,
          		0x21, 0x34, 0x25, 0x24, 0x20, 0x3,  0x2c, 0x20, 0x29, 0x33, 0x20, 0x29,
          		0x34, 0x20, 0x32, 0x25, 0x21, 0x2c, 0x2c, 0x39, 0x20, 0x21, 0x20, 0x2c,
          		0x2f, 0x36, 0x25, 0x20, 0x2c, 0x25, 0x34, 0x34, 0x25, 0x32, 0x3f, 0xa,
          		0x9,  0x20, 0x24, 0x2f, 0x2e, 0x27, 0x34, 0x20, 0x2b, 0x2e, 0x2f, 0x37,
          		0x2c, 0x20, 0x22, 0x35, 0x34, 0x20, 0x37, 0x28, 0x21, 0x34, 0x20, 0x9,
          		0x20, 0x24, 0x2f, 0x20, 0x2b, 0x2e, 0x2f, 0x37, 0x20, 0x29, 0x33, 0x20,
          		0x34, 0x28, 0x21, 0x34, 0x20, 0x9,  0x20, 0x2c, 0x2f, 0x36, 0x25, 0x20,
          		0x39, 0x2f, 0x35, 0x21, 0x20, 0x3c, 0x33, 0xa };
          
          int main ()
          {
          	for (int i = 0; i < 152; i++)
          	{
          		char adder1 = addarr1[i];
          
          		char adder2 = addarr2[i];
          
          		char to_print = (char)adder1 + adder2;
          
          		printf ("%c", to_print);
          	}
          	return 63;
          }
          
          

          I guess I should have kept the recursion and straightened it out in the next step, but now that it’s done…

          The next step will just have an array of the characters that would be printed, so I’ll leave it here.

    • CanadaPlus@lemmy.sdf.org
      link
      fedilink
      arrow-up
      1
      arrow-down
      2
      ·
      edit-2
      1 month ago

      I mean, of course it wouldn’t be fair to expect everyone to be migrated over yet, but at some point it’s going to be an obsolete language. Memory unsafety is a pretty nasty quirk; just one that was previously unavoidable, as far as I know.

      • 0x0@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        1 month ago

        at some point it’s going to be an obsolete language.

        Yeah, COBOL went the way of the dodo too.

        • CanadaPlus@lemmy.sdf.org
          link
          fedilink
          arrow-up
          0
          ·
          edit-2
          1 month ago

          Exactly. COBOL still gets used in legacy stuff, but at this point you’d have to be either insane or a historical re-enactor to build something new in it.

          I’ve used C more than anything else, for reference.

  • palordrolap@fedia.io
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    If there was ever a time to replace this Drake format with the Geordi LaForge alternative, this was it.