| Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert. |
Diskussion: Gezwungenen Sleep einbauen? im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige Hab hier ein Problem, ich habe ein Programm, dass, weil keine Sleeps eingebaut sind, immer 90% cpu auslastung verursacht. ...
![]() |
| | #1 (permalink) |
| Registriert seit: 10.11.05 ![]() Likes: 0 | Anzeige Hab hier ein Problem, ich habe ein Programm, dass, weil keine Sleeps eingebaut sind, immer 90% cpu auslastung verursacht. Es ist in Delphi gecoded! Kann ich das per Olly verschönern? Und wenn ja, wie :-) Vielen Dank schonmal ;) Hab mal was gerippt: Code: PUSH 0C8 CALL Sleep eben noch ne Code Cave gesucht, und nun ist die CPU-Auslastung bei schönen 0% :-) |
| | |
| | #2 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Wenn Du den "Flaschenhals" hast wäre wohl am einfachsten: per IID-King Sleep API hinzufügen (sollte aber eher schon vorhanden sein, weil bei Borland-VCL Zeug so ziemlich alles genutzt wird In Olly eine "Codecave" suchen - also freien Breich im Code, der mit 00 gefüllt ist (z.B am Ende der Codesection, wo der Linker wegen Section-Ausrichtung öfters einen 00 Bereich macht) ). Aber aufgepasst: nicht zu früh freuen und irgendwo dann den Code reinschreiben, denn es gibt sowohl virtuelles wie physikalische Section-Ausrichtung - also einmal im File/Exe selber und einmal im Speicher, wenn die Executable läuft. Dabei ist der physikalische Wert meistens viel kleiner als der virtuelle (öfters 4096 und 512 Byte) - das heißt im Speicher sieht man paar tausend 00 und physikalisch sind nur einige dutzend oder hundert vorhanden. Schreibt man seinen Code in den Bereich rein, der physikalisch nicht existiert, kann man die Änderung nicht abspeichern In die "Codecave" dann gewünschten Code reinschreiben (entweder den "Sleep" Aufruf, falls Sleep schon im Programm vorhanden ist oder per LoadLibrary und GetProcAddress "Sleep" Adresse herausbekommen (oder vorher per IDD King hinzufügen). Jetzt noch aus dem "Flaschenhals"-Code an geeignerter Stelle einen Jump zum eingefügten Code machen und ans Ende des eingefügten Codes einen JMP zurück. Sollte sich keine Codecave finden lassen (was ich bei einem Standard-Delphi Programm nicht gleube Die Herausforderung wäre allerdings den Verursacher des Übels zu finden - also den Flaschenhals.Je nach Programm und Code imho nicht ganz einfach. Denn wenn es die Delphi-interenen Bibliotheken nutzt wird man nur schwer per tracing darauf kommen - und die Delphiinternen Sachen zu patchen, die auch an anderen Codestellen aufgerufen werden könnte Nebeneffekte haben. Dabei wird man öfters die "Auswirkunen" (also derade ausgeführten Code) sehen, als den Verursacher (den Aufrufer) - jedoch sollte nach einiger Zeit (laufen lassen, pause, schauen wo man ist, anschauen von Call-stack (ALT+K) ) sich das einkreisen lassen. EDIT: toll, da schreibt man was und Du wirst in der Zeit schon fertig Ich lass es mal stehen, damit es nicht ganz umsonst war und vielleicht paar Google Bots was davon haben PS: auch beachtet dass Olly einen direkten "CALL Sleep" als Call auf die Kerneladresse umsetzt (also direkt die Adresse reinschreibt und nicht etwa per IAT Umweg)? Sonst gibt es nach dem nächsten größeren Update oder auf einem anderen PC eventuell Probleme, weil die Adresse sich ändert bzw. verschiebt.
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Themenstarter Registriert seit: 10.11.05 ![]() Likes: 0 | Zitat:
Ja die Uhrsache hab ich gefunden, weil wenn das Programm nix tut, benutzt es andauernd einen Jump der nur 3 Funktionen Lang ist, das ist sehr CPU-Aufwändig ;-) Ich gucke mir mal dieses IID-King an. Also jetzt callt er direkt meine Kerneladresse.... Ich weiss jetzt nicht direkt wie ich da durch Umwege über die Iat drankomme Ich probier es jetzt mal auf meiner VM-Machine. Wenn es da geht, lass ich es so ![]() edit: das ist ja mal nen nützliches Tool, danke für den Hinweis :-9 Werd ich in Zukunft sicher mal Verwendung für haben ![]() edit2: Leider hasst du recht, es funktioniert auf der VM nicht | |
| | |
| | #4 (permalink) |
| Senior Member Registriert seit: 27.06.04 ![]() Likes: 0 | @ CDW Wollt nur kurz sagen, dass ich deine Mühen zu schätzen weiß! Ich hab zwar momentan keine Verwendung dafür, und mir fehlt wahrscheinlich noch das nötige Wissen um es anzuwenden aber trotzdem vielen Dank für das Tutorial! Jetzt weiß ich wo ich was, wie machen muss wenn es mal soweit ist! Also danke fürs Nicht-Löschen |
| | |
| | #5 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Zitat:
Wenn man dann sich die Verwendung im Code anschaut (also die "Find references to import" bzw. Enter in dieser Liste wählt) kommt man zu der Codestelle und sieht sowas: Code: 0043B2FA |. 52 |PUSH EDX ; /Timeout = 2147353348. ms 0043B2FB |. E8 14AEFCFF |CALL <JMP.&kernel32.Sleep> ; \Sleep Code: 00406114 $- FF25 1CD24400 JMP DWORD PTR DS:[<&kernel32.Sleep>] ; kernel32.Sleep Für Deinen Code kannst Du dann auch "CALL Adresse_von_dem_Sleep-JMP" (im Beispiel wäre das CALL 00406114) oder Du schaust nach, wo die IAT liegt (Rechtlick auf den JMP und "Follow in Dump" oder einfach Leertaste betätigen, dann zeigt Olly den "richtigen" Code an, anstatt den durch den Namen zu erstetzen - in meinem Fall ist es : JMP DWORD PTR DS:[44D21C] Also ist die IAT an 44XXXx und die Sleep-Api Adresse befindet sich immer (auf jedem System) an der 44D21C. Für Deinen Fall wäre also entweder der "CALL 406114" oder "CALL [44D21C]" angebracht (bzw die entsprechenden Adressen für das Programm). Oder IID bemühen - der erstellt sogar eine TXT Datei, wo die Adressen der hinzugefügten Funktionen stehen. PS: die Olly-Anweisungsbeschreibungen sind jetzt nicht speziell an sd333221 gerichtet (also nicht böse sein @Cyberm@ster: falls Du Dich für PE-Format (wofür einzelne Sachen wie z.B IAT oder PE-Headers in einer Windowsexecutable da sind) und allgemein fürs "Rumstochern in Exen" interessierst, kann ich http://cdw.de.vu/loesungen.htm (die letzten beiden Lösungen bzw. Direktlinks: http://cdw.de.vu/sb6.zip http://cdw.de.vu/loesung_6.zip) anbieten. Wobei das gleichzeitig eine Einführung ins Unpacking ist und beide Artikel auf die Anfänger-Gruppe zielen (Erklärungen zu Ollyaktionen und viele Screenshots) *werbung mach*
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Sleep() mit Dev-c++ Problem | olmz | Code Kitchen | 2 | 27.01.07 17:12 |
| Problem mit sleep(); | Blacki | Code Kitchen | 6 | 09.12.05 13:54 |
| PC in Kühlschrank einbauen? | ThorKaufman | Hardware Probleme | 3 | 25.07.05 11:34 |
| Hintertür einbauen | BlackMarvel | Windows | 7 | 23.07.05 20:44 |
| c++ sleep | derdicke | Code Kitchen | 10 | 25.09.03 00:25 |