| |
|
|
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 |
|
|
| |
|
|
|
| El Anzahl el Params podría uno tal vez con uno art Brute-Force-Angriff determinar.
Salve. |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
| Na como kommwa el Sache ya bisl näher,- tal vez hilft uns una freeware-disassembler en Consolenbasis el problema a fixn.
Salve. |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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:
Como Usted siehst voluntad verschiedene Variablentypen (Byte y Largo) transferencia. Andreas Programa generiert lo folgendes Listing:
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 |
|
|
| |
|
|
|
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. |
|
|
| |
|
|