[ Mr. Jack @ 23.01.2005. 13:01 ] @
| program je Any dvd v4.5.5.1 http://static.slysoft.com/SetupAnyDVD4551.exe
PEID: ASprotect 1.23 RC4 - 1.3.08.24
false OEP:4435D6
sa scroll up se vidi 14 ukradenih bitova
na poslednjem exception stavim breakpoint na return pa tc EBP==ESP i pre OEP-a staje na samo jedno mesto:
Code:
009857AC 55 PUSH EBP <- ukradeni bitovi
009857AD 8BEC MOV EBP,ESP
009857AF 53 PUSH EBX
009857B0 56 PUSH ESI
009857B1 8B75 0C MOV ESI,DWORD PTR SS:[EBP+C]
009857B4 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8]
009857B7 EB 11 JMP SHORT 009857CA
009857B9 0FB703 MOVZX EAX,WORD PTR DS:[EBX]
009857BC 03C6 ADD EAX,ESI
009857BE 83C3 02 ADD EBX,2
009857C1 8BD0 MOV EDX,EAX
009857C3 8BC6 MOV EAX,ESI
009857C5 E8 0C000000 CALL 009857D6
009857CA 66:833B 00 CMP WORD PTR DS:[EBX],0
009857CE ^ 75 E9 JNZ SHORT 009857B9
009857D0 5E POP ESI
009857D1 5B POP EBX
009857D2 5D POP EBP
009857D3 C2 0800 RETN 8
009857D6 0102 ADD DWORD PTR DS:[EDX],EAX
009857D8 C3 RETN
sad je pitanje kojih 14 bitova su ukradeni?
Cinimi se da ovo jesu ukradeni bitovi iako neme pomeranja stek pointera to se radi u narednom pozivu.
Pozdrav. |
[ 39145nobody @ 24.01.2005. 06:28 ] @
Ovo nisu ukradeni bajti .
004435C7 |. 59 POP ECX ; ANYDVD_5.004435D6
004435C8 |. 59 POP ECX ; ANYDVD_5.004435D6
004435C9 \. C3 RETN
004435CA 00 DB 00 ; stolen bytes
004435CB 00 DB 00
004435CC 00 DB 00
004435CD 00 DB 00
004435CE 00 DB 00
004435CF 00 DB 00
004435D0 00 DB 00
004435D1 . E8 72460000 CALL ANYDVD_5.00447C48 ; end of stolen bytes
004435D6 . BF 94000000 MOV EDI,94
Meni to izgleda kot 7 stolen bytes .
Kako pridemo do sem ? Alt+K (Call Stack) , glej "Called from" , vidimo da je klican od 004435D1 .
Call stack of main thread
Address Stack Procedure / arguments Called from Frame
006CFDB8 004435D6 ANYDVD_5.00447C48 ANYDVD_5.004435D1 006CFE38
Poslednji exception :
00E339EC 3100 XOR DWORD PTR DS:[EAX],EAX ; we are here
00E339EE 64:8F05 00000000 POP DWORD PTR FS:[0] ; 006CFF68
00E339F5 58 POP EAX ; 006CFF68
00E339F6 833D B07EE300 00 CMP DWORD PTR DS:[E37EB0],0
00E339FD 74 14 JE SHORT 00E33A13 ; press F2 here
00E339FF 6A 0C PUSH 0C
00E33A01 B9 B07EE300 MOV ECX,0E37EB0
Stisni F2 na 00E339FD 74 14 JE SHORT 00E33A13 (adresa če biti drugčija !) , onda Shift+F9 , disable F2 , Alt+M (memory bp on access na "code" section) , Alt+C (nazaj v CPU Window) ,
Ctrl+T :
[Condition is TRUE] esp==ebp
V "Debugging options" -> "Trace" označi samo "Log commands" , "Show ESP" .
Onda Ctrl+F11 (više puta če se ustaviti ). Pritiskaj Ctrl+F11 dokler ne prideš do fake OEP.
[ 39145nobody @ 24.01.2005. 11:44 ] @
Small tut for OEP .
Stolen bytes so dobljeni iz Log Window nakon trace-anja sa Ctrl+F11 i memory bp na code section. (Meni View -> Run Trace) .[Za boljšo razpoznavnost : desni klik "Highlight register" -> ESP] . Greš na čisto spodaj kjer piše 0 ,onda pritiskaj "Page Up" dokler ni konec REP STOS BYTE PTR ES:[EDI]
Pri meni so na 5413 in 5412 stolen bajti (v rdeči barvi).
[ Mr. Jack @ 25.01.2005. 11:50 ] @
hvala na odgovoru!
Da da sad mi je jasno, mislio sam da se u trace log uvek trazi EBP=ESP ali vidim da to nije slucaj. Ali nisam uspeo da popravim IAT evo sta sam uradio:
- nop magic call
- trace level 1 dissasemble
- plugin tracer ASProtect 1.22
ali program se gasi bez ikakve poruke.
Pozdrav.
[ 39145nobody @ 25.01.2005. 12:58 ] @
Citat:
Mr. Jack: hvala na odgovoru! :-)
Da da sad mi je jasno, mislio sam da se u trace log uvek trazi EBP=ESP ali vidim da to nije slucaj. Ali nisam uspeo da popravim IAT evo sta sam uradio:
- nop magic call
- trace level 1 dissasemble
- plugin tracer ASProtect 1.22
ali program se gasi bez ikakve poruke.
Stolen bytes so iz "Trace Log" . Aspr "zjebe" IAT , tako da moraš ručno provjeriti od kod do kod je IAT (ako popravljaš sa ImpRec) traži FF 25 i onda "folow in dump memory address"
-------------------------
iat:
start:
454000 (454000 - 400000 = 54000 -> vpišeš v RVA input box)
fin:
45428c
size : fin - start = 45428c - 454000 = 28c
[ 39145nobody @ 27.01.2005. 11:48 ] @
Nešto tebi nije jasno . Ovo si napisao:
- nop magic call
- trace level 1 dissasemble
------------------------------
Ako loadaš AnyDVD (pakirano verzijo) brez NOP-anja Magic CALL , a onda Imprec -> (vpišeš OEP) -> IAT Auto Search)
Ima 95 "unresolved pointers" !
------------------------------
2 Way : NOP Magic CALL
(V Debugging Options -> Exceptions -> Ignore memory access violation in KERNEL32 ; samo ovo mora biti označeno)
Loadaš "AnyDVD.exe" v ollydbg ,F9 , Ollydbg se ustavi na :
Message=Access violation when writing to [00000000]
, stisni tipko "Home" , Ctrl+B -> HEX+00 vpišeš ovo: 8B 17 89 02
009932B4 E8 47FCFFFF CALL 00992F00
009932B9 E8 7EFEFFFF CALL 0099313C ;Magic CALL , daj bp (F2) ovdje
009932BE 8B17 MOV EDX,DWORD PTR DS:[EDI] ; we land here
Onda Shift+F9 (okoli 19 krat) dokler ne brejka na Magic CALL .
Desni klik -> Binary -> Fill with NOPS .
Pritisni F9 , onda " - " (minus , koji je na desni strani tipkovnice) , označi ove 4 NOP-e , desni klik -> Undo
selection . Onda slijedi procedura kao na početku , dokler nisi na fake OEP.
Pravi OEP :
004435CA > 6A 60 PUSH 60 ;
004435CC 68 085C4500 PUSH AnyDVD.00455C08
Popravi da izgleda kao ovdje (v Ollydbg) .
Kad si sredio OEP , klik na 004435CA , potem desni klik -> New Origin here .
Dumpaj sa Ollydump. Loadaj Imprec . (upišeš za OEP 435CA (offset) , a onda može i IAT Auto Search).
Ovo piše v LOG-u (v ImpRec):
Current imports:
4 (decimal:4) valid module(s) (added: +4 (decimal:+4))
9E (decimal:158) imported function(s). (added: +9E (decimal:+158))
(6 (decimal:6) unresolved pointer(s)) (added: +6 (decimal:+6))
Onda Klik na "Show Invalid" -> desni klik -> Plugin Tracers -> ASProtect 1.23 rc4 .
Ostati če još samo jedan (1) "invalid pointer":
Ponovno klik na "Show Invalid" -> desni klik -> Plugin Tracers -> ASProtect v1.2x Emul API . Izkaže se, da se radi
o user32.dll / DialogBoxParamA.
Programeri se stavili još nekoliko trika ,da ne možeš loadati razpakirano verzijo . Preimenuj "AnyDVD.exe" ->
"xxAnyDVD.exe" ; potem "dump_.exe" v "AnyDVD.exe" .
Ima još nekoliko trikova ovdje (sam češ jih vrlo brzo nači)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.