Wie kriege ich mit ROP einen "/bin/sh" Pointer in rdi?

Ich versuche, rücksprungorientierte Programmierung (ROP) zu lernen.

Und zwar habe ich ein Programm mit einem Pufferüberlauf auf dem Stack, und ich möchte das Programm dazu bringen, /bin/sh zu öffnen.

Das geht mit dem execve Syscall, wenn ich die richtigen Instruktionen finden kann, um die Funktionsparameter vorzubereiten. Das ist die Signatur von execve:

int execve(const char *pathname, char *const _Nullable argv[], char *const _Nullable envp[]);

Also muss ich die folgenden Register setzen:

  • rax = 0x3b (Syscallnummer von execve)
  • rdi = "/bin/sh" Pointer
  • rsi = NULL
  • rdx = NULL

Die folgenden Instruktionen habe ich bereits gefunden:

pop rax ; ret
pop rdi ; ret
pop rsi ; ret
pop rdx ; ret
syscall

Ich kann also die Instruktionen und Registerwerte mit dem Pufferüberlauf auf den Stack schreiben und so meine Register füllen. Das Problem ist aber, dass ich einen "/bin/sh" Pointer in rdi brauche (also nicht "/bin/sh" im Register, sondern eine Speicheradresse, an der "/bin/sh" steht).

Ich kann natürlich "/bin/sh" in den Puffer auf dem Stack schreiben, aber leider ist die Speicheradresse jedes Mal anders und ich kenne sie vorher nicht.

Ich weiß, dass "/bin/sh" in libc vorkommt, aber auch dort ist die Speicheradresse jedes Mal anders und ich kenne sie vorher nicht.

Wie komme ich also an einen "/bin/sh" Pointer? Gibt es Tricks oder bestimmte Instruktionen, nach denen ich mich umsehen sollte?

hacken, Hack, Programm, programmieren, pointer, Assembler, Hacker, Hacking, Informatik, IT-Sicherheit, Shell, stack, x64, assemblersprache, Assembly, Exploit, hacken lernen, IT-Sicherheitsexperte, Register, Capture The Flag
komme bei einem Python Problem nicht weiter?

Hallo, ich programmiere gerade für mich eine art strasen rennen mit einem neuronalen netzt. das soll aber wirklich ein zeitaufwendiges projekt werden. aber jetzt brauch ich hilfe bei der strase. Ich will einen strasen kurs programmieren der schon bisschen lang ist, damit die autos auch fahren könne. kann mir villeicht jemand helfen weil sonst schaff ich das nicht. ich brauch sonst ewig dafür. also lasst euch von den roten linien nicht verwirren, aber es wäre perfekt wenn ihr einen strasen weg programmieren könntet mir kurven und allem drum und dran so wie zum teil schon in meinem code. Ausenrum um die strase soll eine blaue linie führen. Ein dickes dickes DANKE wenn das jemand schaffen würde, weil ich schaffs nicht. Da bin ich noch zu unerfahren. Deshalb wird das neuronales netzt unendlich dauern. Hier mein code :

import tkinter as tk

import math

class Ball:

  def __init__(self, canvas, color, size, x, y):

    self.canvas = canvas

    self.color = color

    self.size = size

    self.x = x

    self.y = y

    self.id = canvas.create_oval(x, y, x+size, y+size, fill=color)

    self.lines = [self.canvas.create_line(x, y, x, y, fill='red') for _ in range(5)]

    self.text = self.canvas.create_text(x, y, text="", fill="black")

  def update_lines(self):

    angles = [random.uniform(math.radians(-80), math.radians(80)) for _ in range(5)]

    distances = []

    for i, (line, angle) in enumerate(zip(self.lines, angles)):

      end_x = self.x + self.size/2 + 1000*math.cos(angle)

      end_y = self.y + self.size/2 - 1000*math.sin(angle)

      if end_y < road_top:

        end_y = road_top

      elif end_y > road_bottom:

        end_y = road_bottom

      self.canvas.coords(line, self.x + self.size/2, self.y + self.size/2, end_x, end_y)

      distances.append(min(abs(self.y + self.size/2 - road_top), abs(self.y + self.size/2 - road_bottom)))

    min_distance = min(distances)

    self.canvas.itemconfig(self.text, text=str(min_distance), state='normal')

  def hide_text(self):

    self.canvas.itemconfig(self.text, state='hidden')

def create_ball(canvas, size, y):

  x = 0

  return Ball(canvas, 'green', size, x, y)

root = tk.Tk()

canvas_width = 400

canvas_height = 300

ball_size = 10

road_top = canvas_height/2 - 50

road_bottom = canvas_height/2 + 50

canvas = tk.Canvas(root, width=canvas_width, height=canvas_height)

canvas.pack()

# Draw the road

canvas.create_rectangle(0, road_top, canvas_width, road_bottom, fill='gray')

canvas.create_line(0, canvas_height/2, canvas_width, canvas_height/2, fill='white', dash=(20, 20))

# Create balls on the road

balls = [create_ball(canvas, ball_size, y) for y in range(int(road_top), int(road_bottom), ball_size*2)]

for ball in balls:

  ball.update_lines()

  ball.hide_text()

root.mainloop()

Programm, Programmiersprache, Python, Straße, Python 3, Tkinter, Neuronales Netzwerk
Minecraft Java - Extreme performance Probleme?

Hallo!

Ich spiele die Minecraft Bedrock Edition, auf der Konsole, da dies die bessere Version ist. 😙

Allerdings habe ich gerade eben, aus Spass, meine Ueberlebenswelt aus dem Realm auf die Java Edition uebertragen. Und es war.. eine bestątigung dafuer, dass die Bedrock Edition auf der Konsole besser ist. DOCH DANN: Ich hatte mir dieses Ding Namens Iris-Shaders installiert, da ich da eine bessere performance und tolle Shader erwartet habe. Als ich dann durch die Welt lief, da machte ich spontan einen Shader an. Und ab da, ab genau diesem Zeitpunkt, da war die Java Edition viel besser als die Bedrock. Aber sowas von. Allerdings gab es da ein Problem...

Und das war die Performance. Ich habe oft gehoert, man brauche keinen guten PC fuer die Java. Scheinbar ja doch. Noch bevor ich den Shader aktivierte, schon da schwankten die FPS und die Frametime. Und ein Ruckeln war deutlich spuerbar. Und das obwohl ich alle mir bekannten Vorkehrungen getroffen habe, damit dies nicht geschieht!

  • Ich habe Iris installiert, welches die Performance ja eigentlich ziemlich in die Hoehe schiessen lassen sollte. Es soll ja die bessere Alternative zu Optifine usw. sein.
  • Dazu habe ich Rivertune installiert, welches eigentlich ein gutes Mittel gegen schwankende Frametime sein sollte.
  • Ich habe sogar meinen zweiten Monitor vom Pc getrennt, da dies eine menge Leistung einsparrt.
  • Und ich habe im Launcher 16 Ram fuer Minecraft eingestellt
  • Ich habe alle unnoetigen Hintergrund Programme geschlossen
  • Anschliessend habe ich im Task Manager die Prioritąt fuer Minecraft (Javaw.exe) auf "hoch" eingestellt, wieso denn auch nicht.

Dennoch war das Spiel nicht Fluessig. Und das ist doch Kacke. Mein Pc ist nicht schlecht. Beweisen koennen dies meine Erinnerungen an eine Zeit, in der Die FPS in der Minecraft Java stabil blieben, und die Frametime von Rivertune gleichmąssig gehalten wurde.

Dies war vor geschątzt 1 - 2 Jahren. Dazu kommt, dass ich damals sogar noch Mods installiert, und eine hoehere Chunksichtweite eingestellt hatte. Und heute... heute ruckelt und ruckelt, und ausserdem Ruckelt es oft bevor und nachdem es geruckelt hat, kurz bevor es ruckelt. Dabei macht es nicht einmal einen mit den Augen bemerkbaren Performance Unterschied, ob ich den Wunderschoenen Shader aktiviert habe, oder nicht.

Die Fragen:
  1. Woran Liegt das? Und was kann ich dagegen tun? Wie kann ich ein fluessiges Spielerlebnis auf der Minecraft Java geniessen?
  2. Kennt ihr gute Programme, mit denen man Bedrock Welten auf die Java uebertragen kann? Das Programm, welches ich verwendet habe, hat manche Chunks falsch uebertragen, das nervt doch. Zu Not wuerde ich auch Geld fuer so ein Programm ausgeben.

Lg

PC, Server, Computerspiele, Programm, Xbox, Minecraft, Minecraft Mods, Minecraft Server, Performance, Iris, Mojang, PC leistung, PlayStation 4, shader, Minecraft Java Edition, Minecraft Bedrock Edition
PC sound ueber PS5 Party uebertragen?

Ich will das der Sound meines PCs ueber die Party der Ps5 uebertragen wird.

Ich stelle es mir so vor:

Mein Mikrofon ist per Kabel am PC angeschlossen. Das Mikrofon Signal wird dann vom PC aus mittels eines weiteren Kabels auf die Ps5 Uebertragen.

Der Ton, den das Mikrofon aufnimmt, wird auf die Ps5 Uebertragen. Gleichzeitig kann ich am Pc Sounds abspielen lassen, z.B. durch ein YT Video, und dieser Ton wird dann ebenfalls an die Ps5 gesendet.

Sodass die Party Mitglieder mich, und den Pc sound hoeren koennen. Gut wąre natuerlich auch, wenn ich per Knopfdruck bestimmen koennte, dass jetzt nur der Pc sound oder nur der Mikrofon sound uebertragen wird.

Ich weiss ganz genau, dass es einen Weg gibt, dies zu realisieren. Ich weiss nur nicht genau wie.

Was fuer Elemente muesste ich kaufen? Mein Mikrofon ist ein USB-Mikrofon... mir fąllt gerade auf, dass ich sicher gar keine Elemente wie Kabel-Splitter kaufen muss..

Ich brauche jediglich ein Kabel, welches das Mikrofon mit dem Pc, und ein Kabel, welches den Pc mit der Ps5 verbindet.

Am PC selbst brauche ich dann doch sicher nur ein Programm, welches den Mikrofon- und den Desktopsound aufnimmt, und diesen Sound dann per Kabel an die Ps5 sendet, und die Ps5 glauben ląsst, es wąre ein ganz normales Mikrofon Signal.

Koennt ihr mir das weiterhelfen?

Lg

Technik, Programm, USB, Kabel, Mikrofon, Gaming, Sony, Alltägliches, PlayStation 5, PlayStation 4, USB-Kabel, Windows 10

Meistgelesene Fragen zum Thema Programm