Español
SDK-Helfer/ Tools

DLL2Incluir para Profano

 

Stefan
Schnell
¡Hola Comunidad,
anbei una kleines Programa, dass lo einfacher hacer se, Incluir-Archivos para Profano de DLL-Archivos a redactar:  [...] 

Mit diesem Programa kann una beliebige DLL geöffnet y ser Luego se de dieser una Incluir-Expediente para Profano, en el gleichen Directorio, generiert.
Einziges Manko, el número el übergebenen Parámetro puede no ermittelt y ser necesario por lo tanto a mano nachgetragen voluntad, aber en Tipparbeit a sparen ya veces una Anfang.
Saludo
Stefan
 
19.10.2004  
 



El Anzahl el Params podría uno tal vez con uno art Brute-Force-Angriff determinar.

Salve.
 
20.10.2004  
 




Stefan
Schnell
¡Hola Comunidad,
anbei una verbesserte Versión, el neben Incluir- auch Encabezamiento-Archivos de DLL-Archivos erzeugen kann.
Saludo
Stefan

P.S. Dank el Code de Andreas voluntad ahora el Parámetro ermittelt
 
20.10.2004  
 




Stefan
Schnell
¡Hola David, hallo Comunidad,
hast Usted porque una Concepto como wir el en Angriff nehmen puede? (Im wahrsten Sinne des Wortes)

Gleich ni otro Cuestión hinterher:
Soweit Yo verstanden habe, kann encima el (E)SP [=Stackpointer] sí el número notwendigen Bytes uno Función en uno DLL ermittelt voluntad. Sombrero como alguien Ansatz como el a realisieren es? Bin para Hinweise y Tips dankbar.

Saludo
Stefan
 
20.10.2004  
 



Na como kommwa el Sache ya bisl näher,- tal vez hilft uns una freeware-disassembler en Consolenbasis el problema a fixn.

Salve.
 
20.10.2004  
 




Andreas
Miethe


[quote:65como66e5a3=Stefan Rápidamente]¡Hola David, hallo Comunidad,
hast Usted porque una Concepto como wir el en Angriff nehmen puede? (Im wahrsten Sinne des Wortes)

Saludo
Stefan[/quote:65como66e5a3]
¡Hola Stefan,

todavía no gefunden en meiner Página ?? [...] 
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
20.10.2004  
 




Stefan
Schnell
¡Hola Andreas,
nein, todavía no gesehen oder gehört... aber toll...

¿Puede Usted veces el Code-Snippet, para el Ermittlung el Anzahl el Parámetro, hier publizieren oder una Quelle nennen? Interessiert mich como el gemacht se.

Gracias y Saludo
Stefan
 
20.10.2004  
 




Andreas
Miethe


[quote:046234beca=Stefan Rápidamente]¡Hola Andreas,
nein, todavía no gesehen oder gehört... aber toll...

¿Puede Usted veces el Code-Snippet, para el Ermittlung el Anzahl el Parámetro, hier publizieren oder una Quelle nennen? Interessiert mich como el gemacht se.

Gracias y Saludo
Stefan[/quote:046234beca]
Kann Me gusta hacer. Es Pure-Basic Code, ni idea, si Usted así algo anfangen kannst.

kompletter Code :
!DisplayErrors.l = 1
Procedure.l hex2dec(h$)
h$=UCase(h$)
For r=1 To Len(h$)
d<<4 : a$=Mid(h$,r,1)

If Asc(a$)>60

    d+Asc(a$)-55

Más

    d+Asc(a$)-48

EndIf

Next
ProcedureReturn d
EndProcedure
Procedure GetNumberOfParam(Pointer)

Repeat

    Pointer=DisASMCommand(Pointer)
    ASM_Code.s=UCase(GetDisASMString())

Until FindString(ASM_Code.s,"RET",1)

Bytes=hex2dec(Right(ASM_Code.s,Len(ASM_Code.s)-4))

If Bytes%4 Or Bytes>200:Bytes=-1:EndIf

    If Bytes>=0:Bytes=Bytes>>2:EndIf

        ProcedureReturn Bytes
        EndProcedure
        Procedure BadName(Name.s)
        Result=0

        If FindString(UCase(Name.s),"DLLENTRYPOINT",1):Result=-1:EndIf

            If FindString(UCase(Name.s),"DLLCANUNLOADNOW",1):Result=-1:EndIf

                If FindString(UCase(Name.s),"DLLGETCLASSOBJECT",1):Result=-1:EndIf

                    If FindString(UCase(Name.s),"DLLREGISTERSERVER",1):Result=-1:EndIf

                        If FindString(UCase(Name.s),"DLLUNREGISTERSERVER",1):Result=-1:EndIf

                            If UCase(Name.s)="ATTACHPROCESS":Result=-1:EndIf

                                If UCase(Name.s)="DETACHPROCESS":Result=-1:EndIf

                                    If UCase(Name.s)="ATTACHTHREAD":Result=-1:EndIf

                                        If UCase(Name.s)="DETACHTHREAD":Result=-1:EndIf

                                            If UCase(Name.s)="DLLINITIALIZE":Result=-1:EndIf

                                                If Len(Name.s)>100:Result=-1:EndIf

                                                    If Left(Name.s,1)="?":Result=-1:EndIf

                                                        If UCase(Name.s)="DUMMY":Result=-1:EndIf

                                                            ProcedureReturn Result
                                                            EndProcedure
                                                            DLL.s=ProgramParameter() ;<- executable redactar y simplemente Dll droppen.

                                                            If DLL = ""

                                                                MessageRequester("Include_Generator","Die gewünschte Dll por Drag&Drop en INC_Gen.Exe ziehen!",64)
                                                                End

                                                            EndIf

                                                            Pbl.s=DLL
                                                            Punto=FindString(Pbl,".",1)
                                                            Pbl=Left(Pbl,Punto-1)+".Inc"
                                                            DllName.s = GetFilePart(Dll)
                                                            FullPath.s = Espacio(#MAX_PATH)
                                                            GetModuleFileName_(0,FullPath,#MAX_PATH)
                                                            ;MessageRequester(Fullpath,GetPathPart(Fullpath),0)
                                                            FullPath = GetPathPart(Fullpath)
                                                            Inst=OpenLibrary(1,DLL.s)

                                                            If Inst=0

                                                                MessageRequester("Fehler","Die DLL "+DLL+" podría no geöffnet voluntad.")
                                                                End

                                                            EndIf

                                                            If CreateFile(0,FullPath+ReplaceString(GetFilePart(DLL),GetExtensionPart(DLL),"Inc"))=0

                                                                MessageRequester("Fehler","Die Expediente "+Pbl+" podría no erstellt voluntad.")
                                                                End

                                                            EndIf

                                                            WriteStringN("############################################")
                                                            WriteStringN("generiert de Incluir-Generator para XProfan")
                                                            WriteStringN("############################################")
                                                            WriteStringN("Original-PB-Code de Stefan Möbius")
                                                            WriteStringN("bearbeitet para XProfan de Andreas Miethe")
                                                            WriteStringN("############################################")
                                                            WriteStringN(FormatDate("%dd.%mm.%yyyy", Date()) )
                                                            WriteStringN("############################################")
                                                            WriteStringN("")

                                                            If ExamineLibraryFunctions(1)

                                                                Mientras que NextLibraryFunction()<>0

                                                                    Name.s=LibraryFunctionName()
                                                                    Addr=GetProcAddress_(Inst,Name)
                                                                    Param=GetNumberOfParam(Addr)
                                                                    BadName=BadName(Name)

                                                                    If DisplayErrors

                                                                        If Param=-1

                                                                            Texto$="Falsche Parameteranzahl en Función "+Name+" ."+Chr(13)
                                                                            Texto$=Texto$+"Möchten ellos el número el Parámetro manuell eingeben ?"

                                                                            If MessageRequester("Fehler",Texto$,#MB_YESNO)=#IDYES

                                                                                Param=Val(InputRequester(LibraryFunctionName()+":","Parameteranzahl","0"))

                                                                            EndIf

                                                                        EndIf

                                                                        If BadName

                                                                            Texto$="Es no es empfohlen, el Función "+Name.s+" a exportieren."+Chr(13)
                                                                            Texto$=Texto$+"Soll ellos todavía exportiert voluntad ?"

                                                                            If MessageRequester("Frage",Texto$,#MB_YESNO)=#IDYES:BadName=0:EndIf

                                                                            EndIf

                                                                        EndIf

                                                                        If BadName=0 And Param>=0

                                                                            WriteStringN("DEF "+ Name+"("+Str(Param)+") ! "+Chr(34)+Dllname+Chr(34)+","+Chr(34)+Name+Chr(34))
                                                                            ;      WriteStringN(Name+" "+Str(Param))
                                                                            Anz+1

                                                                        EndIf

                                                                        AnzGes+1

                                                                    Wend

                                                                Más

                                                                    MessageRequester("Fehler","Die DLL "+DLL+" podría no überprüft voluntad.")
                                                                    End

                                                                EndIf

                                                                CloseLibrary(1)
                                                                CloseFile(1)
                                                                MessageRequester("Information:",Pbl+" wurde erfolgreich erstellt."+Chr(13)+Str(Anz)+"/"+Str(AnzGes)+" Características exportiert.",#MB_ICONINFORMATION)
                                                                RunProgram("Notepad.exe", FullPath+ReplaceString(GetFilePart(Dll),GetExtensionPart(Dll),"Inc"), "", 0)
                                                                End
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
20.10.2004  
 



Sag Todavía,- disassembling.

Sehe Yo el falso Andreas,- oder ermittelt el Proc sólo Longints ?

Salve,- IF
 
21.10.2004  
 




Stefan
Schnell
¡Hola Andreas,
3,14159267 veces Dank para el Listing, el es wirklich muy interessant y se me sicherlich einiges para Nachdenken geben.

¡Hola David,
>Sehe Yo el falso Andreas,- oder ermittelt el Proc sólo Longints ?

Hmm, folgende DLL Yo eben ausprobiert:
;-Begin-----------------------------------------------------------------
ProcedureDLL Test2x4(Var1.b, Var2.b)
EndProcedure
ProcedureDLL Test4(Var1.l)
EndProcedure
ProcedureDLL Test8(Var1.l, Var2.l)
EndProcedure
;-End-------------------------------------------------------------------
End

Como Usted siehst voluntad verschiedene Variablentypen (Byte y Largo) transferencia. Andreas Programa generiert lo folgendes Listing:
############################################
generiert de Incluir-Generator para XProfan
############################################
Original-PB-Code de Stefan Möbius
bearbeitet para XProfan de Andreas Miethe
############################################
21.10.2004
############################################
DEF Test2x4(2) ! "test.dll","Test2x4"
DEF Test4(1) ! "test.dll","Test4"
DEF Test8(2) ! "test.dll","Test8"

Und el es sí correcto así.

Das disassemblierte Listing sieht así de:
Test2x4
=========
:100013A7 53                      push ebx
:100013A8 51                      push ecx
:100013A9 55                      push ebp
:100013AA 56                      push esi
:100013AB 57                      push edi
:100013AC 89E6                    mov esi, esp
:100013AE 83EC04                  sub esp, 00000004
:100013B1 89E0                    mov eax, esp
:100013B3 89C2                    mov edx, eax
:100013B5 83C204                  add edx, 00000004
---------
:100013B8 C70000000000            mov dword[eax], 00000000
:100013BE 83C004                  add eax, 00000004
:100013C1 39D0                    cmp eax, edx
:100013C3 75F3                    jne 100013B8
:100013C5 8B4618                  mov eax, dword[esi+18]
:100013C8 880424                  mov byte[esp+esp], al
:100013CB 8B461C                  mov eax, dword[esi+1C]
:100013CE 88442401                mov byte[esp+01], al
:100013D2 31C0                    xor eax, eax
:100013D4 83C404                  add esp, 00000004
:100013D7 5F                      pop edi
:100013D8 5E                      pop esi
:100013D9 5D                      pop ebp
:100013DA 59                      pop ecx
:100013DB 5B                      pop ebx
:100013DC C20800                  ret 0008

Das überrascht mich ahora algo, como el Parameterermittlung el RET bezieht y aquí, trotz zweier Byte-Variables, el Zahl 8 transferencia se, verstehe Yo no.
Genauso sieht lo nämlich en Procedimiento Test8 de:
Test8
=========
:10001414 53                      push ebx
:10001415 51                      push ecx
:10001416 55                      push ebp
:10001417 56                      push esi
:10001418 57                      push edi
:10001419 89E6                    mov esi, esp
:1000141B 83EC08                  sub esp, 00000008
:1000141E 89E0                    mov eax, esp
:10001420 89C2                    mov edx, eax
:10001422 83C208                  add edx, 00000008
---------
:10001425 C70000000000            mov dword[eax], 00000000
:1000142B 83C004                  add eax, 00000004
:1000142E 39D0                    cmp eax, edx
:10001430 75F3                    jne 10001425
:10001432 8B4618                  mov eax, dword[esi+18]
:10001435 890424                  mov dword[esp+esp], eax
:10001438 8B461C                  mov eax, dword[esi+1C]
:1000143B 89442404                mov dword[esp+04], eax
:1000143F 31C0                    xor eax, eax
:10001441 83C408                  add esp, 00000008
:10001444 5F                      pop edi
:10001445 5E                      pop esi
:10001446 5D                      pop ebp
:10001447 59                      pop ecx
:10001448 5B                      pop ebx
:10001449 C20800                  ret 0008

Werden tal vez en DLL, egal welcher Variablentyp angegeben se, siempre LongInts transferencia? Dann es Davids Annahme korrekt.
Wer kann media Geist erhellen?
Gracias y Saludo
Stefan
 
21.10.2004  
 




Andreas
Miethe


¡Hola Stefan,

Yo me ahora ya así algunos Dlls angesehen ( Dependency Walker ) y en algunos puede ser lo bastante bien erkennen. Pro Parámetro se siempre 4 dazugezaehlt, egal en qué fuer una Parámetro lo es.
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
21.10.2004  
 



Jepp,- kann Yo bestätigen.

Salve.
 
21.10.2004  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

19.160 Views

Untitledvor 0 min.
Gast.081529.08.2024
E.T.16.01.2024
Sven Bader14.08.2021
Klaus Kohlhepp08.02.2021
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie