![]() |
Shareware Versionen vor Cracker schützen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe diese Postings vom
![]() Ich habe die Demo Version versucht etwas sicherer zu machen. Ich hoffe, es ist nun nicht mehr ganz so leicht sie zu cracken. Ihr könnt ja mal probieren. Download wieder im ersten Posting. |
Re: Neue Version des XP Usermanger ist fertig!
IsDebuggerPresent :)))
|
Re: Neue Version des XP Usermanger ist fertig!
Jupp. Macht es denn das schwieriger oder nicht?
|
Re: Neue Version des XP Usermanger ist fertig!
nein ;>
hatte vorher net versucht aber da du danach aufgerufen hast, hab ich für beide patches etwa 40 sekunden gebraucht (das entpacken von UPX mal abgesehen) |
Re: Neue Version des XP Usermanger ist fertig!
Und warum ist es nicht einfacher?
|
Re: Neue Version des XP Usermanger ist fertig!
du meinst schwieriger?
weil das ein API call mehr ist, wo nen bp drauf gemacht wird ich könnte da mal nen video zu machen, aber hab ledier gestern formatiert hab das prog net mehr. könnte dir aber eins zeigen wo ich das mal mit mIRC gemacht habe, das hat 5 mins gedauert (1 mal vorher getestet, ca. 15 mins) |
Re: Neue Version des XP Usermanger ist fertig!
Und wie kommt man an die Sprungadresse ohne Debugger?
|
Re: Neue Version des XP Usermanger ist fertig!
um jetzt mal die wenigen tastenkombinationen aufzuzählen
doppelklick auf ollydbg.exe f3 auswahl der exe alt+e klick auf kernel32.dll strg+n eingabe "isdebuggerpre" f2 f9 3* f7 cursor nach oben leertaste xor eax, eax rechtsklick druf copy to executable selection fenster schließen ja klicken speichern klicken und es ist gepatched, wie das mit dem fenster geht muss ich ja net sagen ^^, nur der isdebuggerpresent patch bringt ja nix |
Re: Neue Version des XP Usermanger ist fertig!
Bitte noch mal probieren die Demo zu cracken. Es gibt eine neue Version. Download im Anhang vom ersten Posting.
|
Re: Neue Version des XP Usermanger ist fertig!
Ist schon deutlich schwerer. Dumper helfen nichts, weil die zu doof sind und nichtvorhandenes eben auch schwerlich wiederherstellen können. Mein Ansatz zum "Crack" wäre entsprechend ein Loader. Offenbar immernoch mit UPX 1.24 gepackt, aber dann irgendwie durch einen Scrambler oder Crypter gelaufen. Wie üblich kann man die Debuggerdetection ausschalten, indem man an 0x7FFDF002 das Byte von 1 auf 0 patcht (== PEB.BeingDebugged), bevor man das Programm weiterlaufen läßt. Da IsDebuggerPresent() bekanntlich nichts anderes tut als jede normale NT-Debuggererkennung (IsDebuggerPresent ist eben nur wie ein Leuchtturm für den Cracker, mehr nicht *g*):
Code:
Damit ist dann schonmal die halbe Miete eingefahren. Denn jeder nicht allzu dumme Mensch weiß, daß NTDLL und Kernel32 nicht relozierbar sind und sich deshalb (Billseidank :lol:) immer an der gleichen Stelle im Speicher befinden, nämlich an 0x77880000 respektive 0x77E40000 (und User32 an 0x77D00000; die Adressen unterscheiden sich je nach OS-Version). Der PEB sitzt ebenfalls immer einheitlich an 0x7FFDF000 (bisher bei jedem NT). So ist es nun ein leichtes, nachdem wir den Debuggermist ausgeschalten haben, einen Breakpoint auf eine der definitiv aufgerufenen Funktionen (z.B. erstmal LoadLibrary, dann MessageBoxA/W) zu setzen um das wunderbar entpackte Programm zu begutachten. Der Rest (d.h. das Patchen) wäre dann Aufgabe des Loaders als Hauptbestandteil eines Cracks. Alternativ kann man natürlich das Programm dumpen und dann die Strukturen wiederherstellen. Aber wozu - das wäre ungleich schwerer.
.text:77E5AC39 _IsDebuggerPresent@0 proc near
.text:77E5AC39 mov eax, large fs:18h .text:77E5AC3F mov eax, [eax+TEB.Peb] .text:77E5AC42 movzx eax, [eax+PEB.BeingDebugged] .text:77E5AC46 retn .text:77E5AC46 _IsDebuggerPresent@0 endp Fazit: Wie gesagt, es ist deutlich schwerer im Vergleich zu den vorigen Malen. Es ist aber mit ein wenig Mehraufwand möglich, den ich aktuell aus Zeitmangel aber nicht investieren möchte. Ich vergaß zu erwähnen: Natürlich kann man an 0x0053B034 die beiden DWORDs nach dem Start beobachten, denn der PE-Loader ist ja so nett uns schonmal die Adressen der beiden importierten Funktionen einzufüllen:
Code:
Danach muß nur noch zu diesen Adressen gegangen werden und ein Brakpoint gesetzt werden. Ich habe es mit dem Patchen von 0x7FFDF002 (s.o.) geschafft, daß das Programm normal im Debugger läuft. Dank IDA kann man einen Teil dieser Aufgaben mit einem kleinen IDC-Script automatisieren, wobei auch nach einem Neustart des Programms die Analyse deutlich beschleunigt wird *g*
.idata:0053B034 ; Segment type: Externs
.idata:0053B034 ; _idata .idata:0053B034 ; FARPROC __stdcall GetProcAddress(HMODULE hModule,LPCSTR lpProcName) .idata:0053B034 GetProcAddress dd offset kernel32_GetProcAddress .idata:0053B038 ; HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName) .idata:0053B038 LoadLibraryA dd offset kernel32_LoadLibraryA Interessant ist dieser Packer oder Crypter oder Packer mit Scrambler oder Crypter allemal, weil dort noch Stacktricks verwendet werden, von denen ich nicht sicher wäre, ob die bei XP SP2 noch laufen. Scheinen sie ja aber - kann das mal jemand testen? |
Re: Neue Version des XP Usermanger ist fertig!
Zu deinen Vermutungen äußere ich mich jetzt mal nicht. ;) Aber für normale Anwender und Gelegenheits-Cracker sollte es reichen - hoffentlich. Ichmeine, wer hindert jemanden mit einer Vollversion daran es weiterzugeben oder ins Internet zu stellen?
|
Re: Neue Version des XP Usermanger ist fertig!
Zitat:
Für alle die es interessiert. Der Mechanismus mit dem die Adressen geholt werden ist recht simpel:
Code:
Da ich, wie gesagt, keine Zeit für eine intensive Analyse habe, hier noch der Teil, wo die eigene Importtabelle gefüllt wird:
debug028:00418EE4 dd 18FF0h ; RVA to DLL name
debug028:00418EE8 dd 18FA0h ; RVA to function address debug028:00418EEC dd 0 debug028:00418EF0 dd 0 debug028:00418EF4 dd 0 debug028:00418EF8 dd 18FFDh debug028:00418EFC dd 18FB0h debug028:00418F00 dd 0 debug028:00418F04 dd 0 debug028:00418F08 dd 0 debug028:00418F0C dd 1900Ah debug028:00418F10 dd 18FB8h debug028:00418F14 dd 0 debug028:00418F18 dd 0 debug028:00418F1C dd 0 debug028:00418F20 dd 19017h debug028:00418F24 dd 18FC0h debug028:00418F28 dd 0 debug028:00418F2C dd 0 debug028:00418F30 dd 0 debug028:00418F34 dd 19021h debug028:00418F38 dd 18FC8h debug028:00418F3C dd 0 debug028:00418F40 dd 0 debug028:00418F44 dd 0 debug028:00418F48 dd 19029h debug028:00418F4C dd 18FD0h debug028:00418F50 dd 0 debug028:00418F54 dd 0 debug028:00418F58 dd 0 debug028:00418F5C dd 19036h debug028:00418F60 dd 18FD8h debug028:00418F64 dd 0 debug028:00418F68 dd 0 debug028:00418F6C dd 0 debug028:00418F70 dd 19043h debug028:00418F74 dd 18FE0h debug028:00418F78 dd 0 debug028:00418F7C dd 0 debug028:00418F80 dd 0 debug028:00418F84 dd 1904Fh debug028:00418F88 dd 18FE8h debug028:00418F8C dd 0 debug028:00418F90 dd 0 debug028:00418F94 dd 0 debug028:00418F98 dd 0 debug028:00418F9C dd 0 [color=red]An diesen Stellen steht jeweils vorher (vor dem Auflösen) die RVA zum Funktionsnamen Wie man sehen kann, ist die Basisadresse hier wieder 0x400000, also einfach RVA + 0x400000 ;)[/color] debug028:00418FA0 dd 77E901D5h ; kernel32_LoadLibraryA debug028:00418FA4 dd 77E90C5Fh ; kernel32_GetProcAddress debug028:00418FA8 dd 77E96972h ; kernel32_ExitProcess debug028:00418FAC dd 0 ; Separator debug028:00418FB0 dd 793546D3h ; advapi32_FreeSid debug028:00418FB4 dd 0 ; Separator debug028:00418FB8 dd 7171884Ch ; comctl32_ImageList_Create debug028:00418FBC dd 0 ; Separator debug028:00418FC0 dd 77F4241Eh ; GDI32_SetBkMode debug028:00418FC4 dd 0 ; Separator debug028:00418FC8 dd 782F825Ah ; mpr_WNetAddConnection2A debug028:00418FCC dd 0 ; Separator debug028:00418FD0 dd 75117AD6h ; netapi32_NetUserDel debug028:00418FD4 dd 0 ; Separator debug028:00418FD8 dd 779C93D0h ; oleaut32_SysFreeString debug028:00418FDC dd 0 ; Separator debug028:00418FE0 dd 775B4EBEh ; shell32_SHGetMalloc debug028:00418FE4 dd 0 ; Separator debug028:00418FE8 dd 77E087E8h ; USER32_SetFocus debug028:00418FEC dd 0 ; Separator debug028:00418FF0 aKernel32_dll db 'KERNEL32.DLL',0 debug028:00418FFD aAdvapi32_dll db 'advapi32.dll',0 debug028:0041900A aComctl32_dll db 'comctl32.dll',0 debug028:00419017 aGdi32_dll db 'gdi32.dll',0 debug028:00419021 aMpr_dll db 'mpr.dll',0 debug028:00419029 aNetapi32_dll db 'netapi32.dll',0 debug028:00419036 aOleaut32_dll db 'oleaut32.dll',0 debug028:00419043 aShell32_dll db 'shell32.dll',0 debug028:0041904F aUser32_dll db 'user32.dll',0 debug028:0041905A db 0 debug028:0041905B db 0 debug028:0041905C aLoadlibrarya db 'LoadLibraryA',0 debug028:00419069 db 0 debug028:0041906A aGetprocaddress db 'GetProcAddress',0 debug028:00419079 db 0 debug028:0041907A aExitprocess db 'ExitProcess',0 debug028:00419086 db 0 debug028:00419087 db 0 debug028:00419088 aFreesid db 'FreeSid',0 debug028:00419090 db 0 debug028:00419091 db 0 debug028:00419092 aImagelist_crea db 'ImageList_Create',0 debug028:004190A3 db 0 debug028:004190A4 aSetbkmode db 'SetBkMode',0 debug028:004190AE db 0 debug028:004190AF db 0 debug028:004190B0 aWnetaddconnect db 'WNetAddConnection2A',0 debug028:004190C4 db 0 debug028:004190C5 db 0 debug028:004190C6 aNetuserdel db 'NetUserDel',0 debug028:004190D1 db 0 debug028:004190D2 aSysfreestring db 'SysFreeString',0 debug028:004190E0 db 0 debug028:004190E1 db 0 debug028:004190E2 aShgetmalloc db 'SHGetMalloc',0 debug028:004190EE db 0 debug028:004190EF db 0 debug028:004190F0 aSetfocus db 'SetFocus',0 debug028:004190F9 db 0
Code:
OEP ist übrigens: 0x00417160! Aber ich bin noch nicht sicher, ob das der OEP des UPX-gepackten Programmes ist, denn erst danach werden nochmal weiter API-Adressen aufgelöst.
.text:00521422 loc_521422: ; CODE XREF: sub_52113B+2E2j
.text:00521422 add ecx, esi .text:00521424 mov [ebp+OwnImportTable], ecx .text:00521427 add eax, esi .text:00521429 push eax .text:0052142A mov eax, [ebp+LoadLibrary] [color=red]DLL laden[/color] .text:0052142D call dword ptr [eax] ; LoadLibrary .text:0052142F test eax, eax .text:00521431 jz loc_52153D .text:00521437 mov edi, eax .text:00521439 .text:00521439 loc_521439: ; CODE XREF: sub_52113B+32Fj .text:00521439 mov ecx, [ebp+OwnImportTable] .text:0052143C mov edx, [ecx] .text:0052143E test edx, edx .text:00521440 jz short loc_52146C .text:00521442 test edx, 80000000h .text:00521448 jz short loc_521452 .text:0052144A and edx, 7FFFFFFFh .text:00521450 jmp short loc_521456 .text:00521452 ; --------------------------------------------------------------------------- .text:00521452 .text:00521452 loc_521452: ; CODE XREF: sub_52113B+30Dj .text:00521452 add edx, esi .text:00521454 inc edx .text:00521455 inc edx .text:00521456 [color=red]Funktionsadresse ermitteln und zwischenspeichern[/color] .text:00521456 loc_521456: ; CODE XREF: sub_52113B+315j .text:00521456 push edx .text:00521457 push edi .text:00521458 mov eax, [ebp+GetProcAddress] .text:0052145B call dword ptr [eax] ; GetProcAddress .text:0052145D mov ecx, [ebp+var_3C] .text:00521460 mov [ecx], eax .text:00521462 add [ebp+var_3C], 4 .text:00521466 add [ebp+OwnImportTable], 4 .text:0052146A jmp short loc_521439 .text:0052146C ; --------------------------------------------------------------------------- .text:0052146C .text:0052146C loc_52146C: ; CODE XREF: sub_52113B+305j .text:0052146C add ebx, 14h .text:0052146F jmp short loc_52140A .text:00521471 ; --------------------------------------------------------------------------- .text:00521471 [color=red]Hochinteressant wird's hier auf NT[/color] .text:00521471 loc_521471: ; CODE XREF: sub_52113B+2C8j .text:00521471 ; sub_52113B+2D4j .text:00521471 mov eax, large fs:30h .text:00521478 mov eax, [eax+PEB.ProcessModuleInfo] .text:0052147B mov ebx, [eax+PEB.ProcessModuleInfo] .text:0052147E mov [ebp+ModuleInfo], ebx .text:00521481 .text:00521481 loc_521481: ; CODE XREF: sub_52113B+3F3j .text:00521481 mov edx, [ebx+PEB_LDR_DATA.ModuleHeader.EntryToInMemoryOrderModuleList.Flink] .text:00521484 cmp edx, [ebp+var_50] |
Re: Neue Version des XP Usermanger ist fertig!
Version mit, hoffentlich, besseren Schutz hochgeladen:
![]() Kleiner Hinweis: Nicht mit UPX gepackt und nicht verschlüsselt. |
Re: Neue Version des XP Usermanger ist fertig!
alte version war besser geschützt
wegen dem was olli beschrieben hat: einfach breakpoint auf virtualProtect dann hardware breakpoint auf den speicher den er bekommt (noch net mal relocation fix drin oO, er macht nix wenner anderen speicher bekommt oO) danach nen hw breakpoint auf den speicher -> dann bekommt man nen rep movs, in ESI steht dann die verschlüsselte (jetzt entschlüsselte) exe -> die einfach dumpen |
Re: Neue Version des XP Usermanger ist fertig!
Ich habe ehrlich gesagt kein Wort verstanden.
|
Re: Neue Version des XP Usermanger ist fertig!
lol - ihr seid wirklich hacker was? :roll:
|
Re: Neue Version des XP Usermanger ist fertig!
kein problem
alte version: auf virtual protect nen breakpoint setzen, d.h. es wird angehalten wenn das prog versuch den speicher freizumachen im bereich 0x00400000 wo normal die exe liegt, jetzt wird die exe entschlüsselt und dann an den speicher geschrieben deshalb macht man einen hardware access breakpoint auf die adresse (0x00400000) dann bekommt man die assembler instrucion die dort den speicher hinschreibt das ist ein REP MOVS der 2 "parameter" hat EDI und ESI in EDI steht die stelle wos hingeschrieben wird (0x00400000) in ESI wovon es geschrieb wird und da ist die exe ganz enschlüsselt drin die kann man dann einfach dumpen und starten neuste version: debugger detection:
Code:
einfach MOV EAX, ...[eax+2] noppen
0040BE46 |. 50 PUSH EAX
0040BE47 |. 64:8B05 300000>MOV EAX,DWORD PTR FS:[30] 0040BE4E 8B40 02 MOV EAX,DWORD PTR DS:[EAX+2] 0040BE51 8805 48D74000 MOV BYTE PTR DS:[40D748],AL kernel32.IsDebuggerPresent:
Code:
____
7C812E03 > 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
7C812E09 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30] 7C812E0C 0FB640 02 MOVZX EAX,BYTE PTR DS:[EAX+2] 7C812E10 C3 RETN alternativ kommt man an die adresse wenn man zu 7ffdf000 geht (wenn nicht vorhanden zu 7ffde000) dann die adresse bei 7ffdf030 bzw 7ffde030 schaut und dann an diese adresse geht z.b. 7ffdc000 <- das 3. byte, also 7ffdc003 ist bei nem debugger dann ne 1 oder wenn nix aktiv ist ne 0 only NT exception(3 an der zahl):
Code:
einfach das AND noppen
0040BE9E /$ 31C0 XOR EAX,EAX // setzen
0040BEA0 |. 64:FF30 PUSH DWORD PTR FS:[EAX] // exception handler pushen 0040BEA3 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 0040BEA6 |. 8160 18 550100>AND DWORD PTR DS:[EAX+18],155 // exception hier 0040BEAD |. 64:8F05 000000>POP DWORD PTR FS:[0] |
Re: Neue Version des XP Usermanger ist fertig!
OLLI!!! Sag was. Hilf mir! Ich will mein Geld zurück.
|
Re: Neue Version des XP Usermanger ist fertig!
Zitat:
Zitat:
![]() gaanz alte version wo man das laden schon hinbekommen hat |
Re: Neue Version des XP Usermanger ist fertig!
Vorweg: ich habe mir die neue Version noch nicht angeschaut.
Zitat:
Ich habe es etwas anders gemacht. Übrigens: wieviele HW-BPX hast du? :mrgreen: ... könnte sein, daß die dir irgendwann ausgehen. *grins* Zitat:
Zitat:
@brechi: du bist ganz sicher mit: 0x7ffdc003? Ich eher nicht ... bei mir ist das Byte eins tiefer ;) ... denn wir beginnen ja bei Null die Zählung. Zitat:
Geld? Welches Geld? Ist noch keins bei mir angekommen *grins* @Luckie: der Rest per PN. Erinnere mich dran! @brechi: XP SP2 habe ich leider noch nicht überprüft. Aber wozu gibt's FS ;) ... Nebenbei, du bist im DF nicht zufällig unter einem anderen Namen unterwegs (alternativ: -"- gewesen)? Relozierung der System-DLLs ist 1.) unsinnig (nicht umsonst sind alle DLLs je nach OS-Version aufeinander abgestimmt) 2.) gefährlich (weil sich eben doch manche drauf verlassen) 3.) unwahrscheinlich in einem neuen Prozess 4.) wer ist "man"? |
Re: Neue Version des XP Usermanger ist fertig!
Zitat:
Nun ja voreillig? Ich dachte wir wären mit dem Austricksen des Debuggers durch. :gruebel: |
Re: Neue Version des XP Usermanger ist fertig!
Zitat:
Zitat:
@brechi: Du benutzt welchen Debugger? Würde den Debugger gern mal testen. Vor direktem Anti-XYZ-Produkt-Code brauchst du bei mir jedenfalls keine Angst haben. |
Re: Neue Version des XP Usermanger ist fertig!
7ffdxxx2 sollte es sein bei < XPSP2 ist es 7ffdf002
hab mich da um 1 verzählt ;> bin im DF unter anderem namen angemeldet, wen du da jetzt vermutest weiß ich nicht, luckie sollte aber wissen wer ich bin nichtsdestotrotz weiß ich wer du bist. PEB.BeingDebugged selbstauslesen funzt hier nur so gut weils das prog für winNT only ist fake exception kenn ich eigentlcih bisl anders durch int3 breakpoints aufrufen die von einem debugger immer abgefangen werden hab genau so viele HW BPs wie du, eigentlich reicht immer einer oder max 2 ich benutze ollydbg der kennt auch memory breakpoints (wird über VirtualProtect gemacht) |
Re: Neue Version des XP Usermanger ist fertig!
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Memory-BPX _ohne_ HW-BPX als Grundlage sind technischer Schwachsinn weil nicht zuverlässig. Noch gibt es zumindest keine Grundlage auf HW-Ebene die das erlauben würde. Aber solange es dir dient *g* |
Re: Neue Version des XP Usermanger ist fertig!
Delphi-Quellcode:
sollte unter NT, 2k, xp, 95, 98, 98 SE und ME funzen also NT / 9x wobei ichs net auf ME testen konnte :>
function IsDebuggerPresent: boolean; stdcall;
asm MOV EAX, DWORD PTR FS:[$30] TEST EAX, EAX JS @@W9X @@WNT: MOV EAX, FS:[$18] MOV EAX, [EAX+$30] MOVZX EAX, [EAX+2] RET @@W9X: MOV EAX, [$BFFC9CE4] MOV ECX, [EAX] CMP DWORD PTR [ECX+$54], 1 SBB EAX, EAX INC EAX RET end; kumpel meinte aber es sollte stimmen mit dem u am anfang haste recht |
Re: Shareware Versionen vor Cracker schützen
Ich habe diese Postings vom
![]() |
Re: Shareware Versionen vor Cracker schützen
EDIT:
UPPS, falscher Thread :( |
Re: Shareware Versionen vor Cracker schützen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz