Funktionen/Variablen/usw. in Blitzbasic exe

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen

Vertex

BeitragSo, Mai 30, 2004 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
So habe jetzt ein kleines Hackertool dafür geschrieben:
Benötigt BlitzUI http://www.legacygames.co.uk/downloads.php
user posted image
Code: [AUSKLAPPEN]
; --------------------------------------------------------------------------------------------
Include "../blitzui.bb"
Include "../extras/messagebox.bb"
Include "../extras/opensavedialog.bb"

Graphics 430, 433, 32, 2
SetBuffer BackBuffer()
AppTitle "BlitzHacker"
Initialise()
; --------------------------------------------------------------------------------------------

; --------------------------------------------------------------------------------------------
Type functions_t
   Field offset
   Field name$
End Type

Type types_t
   Field offset
   Field name$
End Type

Type globals_t
   Field offset
   Field name$
End Type

Type arrays_t
   Field offset
   Field name$
End Type

Type labels_t
   Field offset
   Field name$
End Type

Const sizeBlitz3D   = 1048576 ; for Blitz3D-Executables only
Const sizeBlitzPlus = 900000  ; for Blitz3D- and BlitzPlus-Executables, but slower for Blitz3D

Global functions.functions_t, types.types_t, globals.globals_t, arrays.arrays_t, labels.labels_t
Global functionCount, typeCount, globalCount, arrayCount, labelCount, mainOffset = 0
Global fileName$
; --------------------------------------------------------------------------------------------

; --------------------------------------------------------------------------------------------
Global winMain      = Window(-1, -1, 430, 433, "BlitzHacker", "0", 0, 0, 0, 0)

Global cmdLoad      = Button(5, 5, 205, 20, "Load...", "0", 1, 0, 0)
Global cmdSave      = Button(215, 5, 205, 20, "Save...", "0", 1, 0, 0)

Global lblFunctions = Label(5, 30, "Functions:", 0)
Global lblTypes     = Label(5, 110, "Types:", 0)
Global lblGlobals   = Label(5, 190, "Globals:", 0)
Global lblArrays    = Label(5, 270, "Arrays:", 0)
Global lblLabels    = Label(5, 350, "Labels:", 0)

Global lstFunctions = ListBox(5, 45, 415, 60, 20, 20, 10, 0)
Global lstTypes     = ListBox(5, 125, 415, 60, 20, 20, 10, 0)
Global lstGlobals   = ListBox(5, 205, 415, 60, 20, 20, 10, 0)
Global lstArrays    = ListBox(5, 285, 415, 60, 20, 20, 10, 0)
Global lstLabels    = ListBox(5, 365, 415, 60, 20, 20, 10, 0)

SendMessage(cmdSave, "BM_DISABLE")
; --------------------------------------------------------------------------------------------

; --------------------------------------------------------------------------------------------
Repeat
   UpdateGUI()
   
   Select app\Event
      Case EVENT_WINDOW
         Select app\WindowEvent
         End Select
      Case EVENT_MENU
         Select app\MenuEvent
         End Select
      Case EVENT_GADGET
         Select app\GadgetEvent
            Case cmdLoad
               result$ = FileDialog("Open File", "", "exe", False)
               UpdateGUI() : Flip
               hackExe(result$)
            Case cmdSave
               result$ = FileDialog("Save Log", "", "txt", True)
               If result$<>"" And result$<>"Cancel" Then
                  stream = WriteFile(result$)
                  If stream = False Then
                     result$ = MessageBox$("Cannot save file", "Error", 1)
                     UpdateGUI() : Flip
                  Else
                     AppTitle "BlitzHacker :: "+getFileName$(fileName$)+" | in progress..."
                     SendMessage(cmdSave, "BM_DISABLE")
                     SendMessage(cmdLoad, "BM_DISABLE")
                     UpdateGUI() : Flip
                     
                     WriteLine stream, "BlitzHacker :: "+fileName
                     WriteLine stream, "Date:       "+CurrentDate$()
                     WriteLine stream, "Time:       "+CurrentTime$()
                     WriteLine stream, "Mainoffset: "+Hex$(mainOffset)
                     WriteLine stream, ""
                  
                     WriteLine stream, "Functions("+functionCount+"):"
                     For functions = Each functions_t
                        WriteLine stream, Hex$(functions\offset)+" :: "+functions\name$
                     Next : WriteLine stream, ""

                     WriteLine stream, "Types("+typeCount+"):"
                     For types = Each types_t
                        WriteLine stream, Hex$(types\offset)+" :: "+types\name$
                     Next : WriteLine stream, ""

                     WriteLine stream, "Globals("+globalCount+"):"
                     For globals = Each globals_t
                        WriteLine stream, Hex$(globals\offset)+" :: "+globals\name$
                     Next : WriteLine stream, ""
      
                     WriteLine stream, "Arrays("+arrayCount+"):"
                     For arrays = Each arrays_t
                        WriteLine stream, Hex$(arrays\offset)+" :: "+arrays\name$
                     Next : WriteLine stream, ""
      
                     WriteLine stream, "Labels("+labelCount+"):"
                     For labels = Each labels_t
                        WriteLine stream, Hex$(labels\offset)+" :: "+labels\name$
                     Next
      
                     CloseFile stream
                     
                     SendMessage(cmdLoad, "BM_ENABLE")
                     SendMessage(cmdSave, "BM_ENABLE")
                     UpdateGUI() : Flip
                     AppTitle "BlitzHacker :: "+getFileName$(fileName$)+" | ready"
                  EndIf
               EndIf   
         End Select
   End Select
   
   ResetEvents()

   Flip
Until KeyHit( 1 ) Or app\Quit = True

Destroy() : End
; --------------------------------------------------------------------------------------------

; --------------------------------------------------------------------------------------------
Function hackExe(file$)
   Local stream, result$, i, buffer$, byte, offset, name$, del
   
   ; find "__MAIN"
   stream = ReadFile(file$)
   If stream = False Then
      result$ = MessageBox$("Cannot open file", "Error", 1)
      UpdateGUI() : Flip
      Return
   EndIf
   SeekFile stream, sizeBlitzPlus
   While Not Eof(stream)
      If ReadByte(stream) = Asc("_") Then
         For i=1 To 5
            buffer$ = buffer$ + Chr$(ReadByte(stream))
         Next
         If buffer$ = "_MAIN" Then
            mainOffset = FilePos(stream)-5
            Exit
         Else
            buffer$ = ""
         EndIf
      EndIf
   Wend
   If mainOffset > 0 Then
      result$ = MessageBox$("Mainoffset at "+Hex$(mainOffset)+", please wait...", "Found Mainoffset", 1)
      Delete Each functions_t : SendMessage(lstFunctions, "LM_RESET")
      Delete Each types_t     : SendMessage(lstTypes, "LM_RESET")
      Delete Each globals_t   : SendMessage(lstGlobals, "LM_RESET")
      Delete Each arrays_t    : SendMessage(lstArrays, "LM_RESET")
      Delete Each labels_t    : SendMessage(lstLabels, "LM_RESET")
      SendMessage(cmdLoad, "BM_DISABLE")
      SendMessage(cmdSave, "BM_DISABLE")
      UpdateGUI() : Flip
      AppTitle "BlitzHacker :: "+getFileName$(file$)+" | in progress..."
      fileName$ = file$
   Else
      result$ = MessageBox$("The file is not a Blitzexecutable!", "Error", 1)
      CloseFile stream
      Return
   EndIf
   
   ; find functions
   functionCount = 0 : buffer$ = ".."
   While Not Eof(stream)
      buffer$ = Right$(buffer$, 1)+Chr$(ReadByte(stream))
      If buffer$ = "_f" Then
         offset = FilePos(stream)-1
         name$  = ""
         While True
            byte = ReadByte(stream)
            If byte = 0 Then
               Exit
            ElseIf byte>47 And byte<123
               name$ = name$+Chr$(byte)
            Else
               name$ = ""
               Exit
            EndIf
         Wend
         
         If name$ = Lower$(name$) And name$<>"" Then
            del = False
            For functions = Each functions_t
               If functions\name$ = name$ Then del = True
            Next
            If del = False Then
               functions = Last functions_t
               functions = New functions_t
               functions\offset = offset
               functions\name$  = name$
               AddListBoxItem(lstFunctions, 0, name$)
               functionCount = functionCount+1
            EndIf
         EndIf
      EndIf
   Wend : UpdateGUI() : Flip
   
   ; find types
   typeCount = 0 : SeekFile stream, mainOffset+5 : buffer$ = ".."
   While Not Eof(stream)
      buffer$ = Right$(buffer$, 1)+Chr$(ReadByte(stream))
      If buffer$ = "_t" Then
         offset = FilePos(stream)-1
         name$  = ""
         While True
            byte = ReadByte(stream)
            If byte = 0 Then
               Exit
            ElseIf byte>47 And byte<123
               name$ = name$+Chr$(byte)
            Else
               name$ = ""
               Exit
            EndIf
         Wend
         
         If name$ = Lower$(name$) And name$<>"" Then
            del = False
            For types = Each types_t
               If types\name$ = name$ Then del = True
            Next
            If del = False Then
               types = Last types_t
               types = New types_t
               types\offset = offset
               types\name$  = name$
               AddListBoxItem(lstTypes, 0, name$)
               typeCount = typeCount+1
            EndIf
         EndIf
      EndIf
   Wend : UpdateGUI() : Flip
   
   ; find globals
   globalCount = 0 : SeekFile stream, mainOffset+5 : buffer$ = ".."
   While Not Eof(stream)
      buffer$ = Right$(buffer$, 1)+Chr$(ReadByte(stream))
      If buffer$ = "_v" Then
         offset = FilePos(stream)-1
         name$  = ""
         While True
            byte = ReadByte(stream)
            If byte = 0 Then
               Exit
            ElseIf byte>47 And byte<123
               name$ = name$+Chr$(byte)
            Else
               name$ = ""
               Exit
            EndIf
         Wend
         
         If name$ = Lower$(name$) And name$<>"" Then
            del = False
            For globals = Each globals_t
               If globals\name$ = name$ Then del = True
            Next
            If del = False Then
               globals = Last globals_t
               globals = New globals_t
               globals\offset = offset
               globals\name$  = name$
               AddListBoxItem(lstGlobals, 0, name$)
               globalCount = globalCount+1
            EndIf
         EndIf
      EndIf
   Wend : UpdateGUI() : Flip
   
   ; find arrays
   arrayCount = 0 : SeekFile stream, mainOffset+5 : buffer$ = ".."
   While Not Eof(stream)
      buffer$ = Right$(buffer$, 1)+Chr$(ReadByte(stream))
      If buffer$ = "_a" Then
         offset = FilePos(stream)-1
         name$  = ""
         While True
            byte = ReadByte(stream)
            If byte = 0 Then
               Exit
            ElseIf byte>47 And byte<123
               name$ = name$+Chr$(byte)
            Else
               name$ = ""
               Exit
            EndIf
         Wend
         
         If name$ = Lower$(name$) And name$<>"" Then
            del = False
            For arrays = Each arrays_t
               If arrays\name$ = name$ Then del = True
            Next
            If del = False Then
               arrays = Last arrays_t
               arrays = New arrays_t
               arrays\offset = offset
               arrays\name$  = name$
               AddListBoxItem(lstArrays, 0, name$)
               arrayCount = arrayCount+1
            EndIf
         EndIf
      EndIf
   Wend : UpdateGUI() : Flip
   
   ; find labels
   labelCount = 0 : SeekFile stream, mainOffset+5 : buffer$ = "...."
   While Not Eof(stream)
      buffer$ = Mid$(buffer$, 2, 3)+Chr$(ReadByte(stream))

      If buffer$ = "_l_2" Then
         offset = FilePos(stream)-1
         name$  = ""
         While True
            byte = ReadByte(stream)
            If byte = 0 Then
               Exit
            ElseIf byte>47 And byte<123
               name$ = name$+Chr$(byte)
            Else
               name$ = ""
               Exit
            EndIf
         Wend

         If name$ = Lower$(name$) And name$<>"" Then
            del = False
            For labels = Each labels_t
               If labels\name$ = name$ Then del = True
            Next
            If del = False Then
               labels = Last labels_t
               labels = New labels_t
               labels\offset = offset
               labels\name$  = name$
               AddListBoxItem(lstLabels, 0, name$)
               labelCount = labelCount+1
            EndIf
         EndIf
      EndIf
   Wend
   
   CloseFile stream
   SendMessage(cmdLoad, "BM_ENABLE")
   SendMessage(cmdSave, "BM_ENABLE")
   AppTitle "BlitzHacker :: "+getFileName$(file$)+" | ready"
End Function

Function getFileName$(path$)
   Local length, i, find
   
   length = Len(path$)
   For i=1 To length
      If Mid$(path$, i, 1) = "\" Then
         find = i
      EndIf
   Next
   
   Return Right$(path$, length-find)
End Function
; --------------------------------------------------------------------------------------------

mfg olli

Edit: Noch ein paar Randbemerkungen:
Die Details sind beabsichtigt weggelassen, und auch die Reihenfolge wird nicht mit übermittelt(hängt unteranderem auch damit zusammen, das die ListBoxen nicht mehr als 1025 Einträge haben dürfen). Dieses Tool soll lediglich aufzeigen, was in euren Exen aufzufinden ist.
  • Zuletzt bearbeitet von Vertex am Sa, Jun 05, 2004 13:00, insgesamt einmal bearbeitet
 

lettorTrepuS

BeitragSo, Mai 30, 2004 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

HOT-BIT

Gast

BeitragSo, Mai 30, 2004 21:13
Antworten mit Zitat
Hmmm..

und das ganze hat welchen Sinn ???

Toni
 

Dreamora

BeitragSo, Mai 30, 2004 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
das sie nachher unsere sources klauen können Wink
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Garfield

BeitragMo, Mai 31, 2004 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
LOL
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
 

lettorTrepuS

BeitragMo, Mai 31, 2004 1:30
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

Dreamora

BeitragMo, Mai 31, 2004 1:32
Antworten mit Zitat
Benutzer-Profile anzeigen
würde ich nur auf 2D rumgurken würd ichs ja vielleicht auch ... aber tue ich net ... und 3D hab ich noch nix gefunden was gescheit genutzt werden kann, vor allem net so einfach
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

lettorTrepuS

BeitragMo, Mai 31, 2004 3:05
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
  • Zuletzt bearbeitet von lettorTrepuS am Mo, Mai 31, 2004 3:09, insgesamt einmal bearbeitet
 

Dreamora

BeitragMo, Mai 31, 2004 3:08
Antworten mit Zitat
Benutzer-Profile anzeigen
wie siehts mit der nutzung der BVM aus?
kann die das problem lösen?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Vertex

BeitragMo, Mai 31, 2004 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ST: Ja, ich könnte es machen, möchte es aber nicht. Es gibt ja noch einige kommerzielle Projekte die in Blitz geschrieben sind, die sicher solche Serialmechanismen implementiert haben und sollen die Newbs sich nicht so einfach daran vergehen können. Was aber zumindest gut ist, ist dass Blitz nicht die Fieldnamen der Types abspeichert, sondern nur mit _bbTypeInt, _bbTypeFloat etc. handelt. Aber wenn du lust hast, können wir ja mal an einem Decompilierertool arbeiten(für uns nur gedacht) oder an einem Kryptogramm der die Exen annähernd sicherer macht.
mfg olli
Edit: Für BlitzPlus-Programme müsst ihr die 1048576 bei SeekFile auf ca. 900000 herunter setzen, da die Blitzlibrary in B+ ja wesentlich kleiner ist.
 

lettorTrepuS

BeitragMo, Mai 31, 2004 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

TheShadow

Moderator

BeitragMo, Mai 31, 2004 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber wenn du lust hast, können wir ja mal an einem Decompilierertool arbeiten

viel spaß!

Auf ähnliche Weise habe ich früher BB-Commands rausgehackt und mit 2 exe'n verglichen - dein Proggy kann nur etwas mehr Infos rausholen...

Ein anderes proggy von mir konnte funktionnamen und Parameteranzahl aus MS-Librarys (MSDN) herausholen und sogar dann zusätzlich alle parameter aus header-files finden - so kann man wirklick komplette API rekonstruieren und z.B. für MinGW def-files machen die dann zu libs kompilieren (DX-Libs für MinGW z.B - die libs von MinGW sind echt nicht up-to-date)
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Holzchopf

Meisterpacker

BeitragMo, Mai 31, 2004 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ich mich grad frage: Was kommt eigentlich dabei raus, wenn man ein BlitzBasic-Executable diassembliert und den erzeugten ASM-Code einfach nochmal assembliert (also kompiliert) Question
Und wenn einer fliessend ASM kann, dann könnte er ja aus dem ASM-Code unnütze unterroutinen und definitionen rauslöschen (wenns so einfach geht Wink ), falls das dann wirklich klappen sollte, kann er ja ein Tool machen, welches dies erledigt (also diassemblieren, Code säubern, assemblieren)...

Oder gibts sowas schon Question
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Vertex

BeitragMo, Mai 31, 2004 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Holzchopf: Eine Blitzexecutable hat ca. eine halbe Millionen Assemblerzeilen. Aber ja, man könnte z.B. nach Floatcommandos suchen, und diese durch 3DNow! ersetzen für AMDs, ob man auch sinnloses herausnehmen kann wage ich zu bezweifeln. Man müsste hier ersteinmal die __bbLoadLibs abändern, dies ist die erste nach der WinMain und __bbRestore Funktion.
TS: nix ist unmöglich Smile
ST: Dies sind glaube ich keine Pointer sondern Dateioffsets. Die Werte nach Blitzcommandos sind wesentlich kleiner als bei eigenen Funktionen weil ja die Runtimelib gleich am Anfang der Blitzexe ist und eigene Funktionen erst nach dem __MAIN Offset(also ca. 1 MB) kommt.
mfg olli

Jan_

Ehemaliger Admin

BeitragDi, Jun 01, 2004 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@ST, du hasst recht!

aber so ein prog, ist garnicht so schwer zu entwickeln, weil man es selber in die Exe einfügen kann, einzigster nachteil währe, das sich die Exe mehrmals starten muss.
Weil die ganze EXE in den Speicher geladen wird, kann sie sich selber bearbeiten.

cu
between angels and insects

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group