| Домой | Статьи | Форум | Программирование | Скачать | CD & DVD | ||||||
| CRACK | Новичку | FAQ | Ссылки | Интервью | Архив | Новости | Связь | ||||||
Распаковка Securom на примере Warcraft IIIАвтор: Cigan <>
Код DLL;----------------------------------------------------------------------------
; War3_Fixer.asm version 1.18
;----------------------------------------------------------------------------
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
includelib kernel32.lib
.data
War3_Dump db "War3_dump.exe",0
CorrectCall dd 000015FFh
SearchN1 db 0FFh,15h,48h,9dh,50h,00h
SearchN2 db 0FFh,15h,08h,0cFh,4Eh,00h
SearchN3 db 90h,0E8h
SearchN4 db 0Dh,00h
FindN1 dd SearchN1
FindN2 dd SearchN2
FindN3 dd SearchN3
FindN4 dd SearchN4
Start_File dd 00401000h
End_File dd 004E668Eh
End_File2 dd 00449000h
.data?
Addr_Call dd ?
Addr_Jump dd ?
IAT dd ? ;Api Adress
hWar dd ? ;Handle for War3_Dump.exe
LastErr dd ? ;Returning of last mistake by call API
lDistToMove dd ? ;CALL address in a file where calls on API will be corrected
API dd ? ;Adress of API Functions
BytesToWritten dd ? ;Quantity(Amount) of the written down bytes
.code
DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
mov eax,TRUE
ret
DllEntry Endp
FindCALL PROC FindFirst:DWORD, FindSecond:DWORD
NewN3: MOV ESI, [Start_File]
NextN3: MOV EAX, [End_File]
CMP ESI, EAX
JZ NewByteN3
CLD
XOR ECX, ECX
MOV ECX, 2h
MOV EDI, FindFirst
REPE CMPSB
JNZ NextN3
INC ESI
INC ESI
MOV ECX, 2h
MOV EDI, FindSecond
REPE CMPSB
JNZ NextN3
MOV EAX, ESI
SUB EAX, 6h
CALL EAX
JMP NewN3
NewByteN3:
ret
FindCALL endp
Fix_exe_API proc
invoke FindCALL,FindN3,FindN4
NewN1: MOV ESI, [Start_File] ;Definition of the address of the beginning of program memory
NextN1: MOV EAX, [End_File] ;-//-//-//-//-//-// The end -//-//-//-//-//-
CMP ESI, EAX
JZ NewByteN1
CLD
XOR ECX, ECX
MOV ECX, 6h
MOV EDI, FindN1
REPE CMPSB
PUSHFD
.if ECX==4h
DEC ESI
.endif
POPFD
JNZ NextN1
MOV EAX, ESI
SUB EAX, 6h
CALL EAX
JMP NewN1
NewByteN1: MOV EAX, FindN1
MOV EBX, [EAX+2h]
ADD EBX, 4h
MOV [EAX+2h], EBX
CMP BL, 78h
JNZ NewN1
NewN2: MOV ESI, [Start_File]
NextN2: MOV EAX, [End_File]
CMP ESI, EAX
JZ NewByteN2
CLD
XOR ECX, ECX
MOV ECX, 6h
MOV EDI, FindN2
REPE CMPSB
PUSHFD
.if ECX==4h
DEC ESI
.endif
POPFD
JNZ NextN2
MOV EAX, ESI
SUB EAX, 6h
CALL EAX
JMP NewN2
NewByteN2: MOV EAX, FindN2
MOV EBX, [EAX+2h]
ADD EBX, 4h
MOV [EAX+2h], EBX
CMP BL, 38h
JNZ NewN2
ret
Fix_exe_API endp
Create proc
invoke CreateFile,addr War3_Dump,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,\
FILE_ATTRIBUTE_NORMAL,NULL
ret
Create endp
Close proc
invoke CloseHandle,hWar
ret
Close endp
ApiCallRebuildN1 proc ;0046BF57
invoke GetLastError
MOV LastErr,EAX
CALL Create
.if EAX!=NULL
MOV hWar,EAX
MOV EAX, DWORD PTR [EBP-3Ch]
MOV EBX, 00400000h
SUB EAX, EBX
MOV lDistToMove,EAX
invoke SetFilePointer,hWar,lDistToMove,NULL,NULL
MOV EBX, EBP
SUB EBX, 38h
MOV API,EBX
invoke WriteFile,hWar,API,4h,addr BytesToWritten,NULL
CALL Close
MOV EAX, DWORD PTR [EBP-38h]
MOV EBX, DWORD PTR [EBP-3Ch]
MOV DWORD PTR [EBX], EAX
MOV ESI, EAX
invoke SetLastError,LastErr
.endif
ret
ApiCallRebuildN1 endp
ApiCallRebuildN2 proc ;004DC415
invoke GetLastError
MOV LastErr,EAX
CALL Create
.if EAX!=NULL
MOV hWar,EAX
MOV EAX, DWORD PTR [EBP+8h]
SUB EAX, 4h
MOV EBX, 00400000h
SUB EAX, EBX
MOV lDistToMove,EAX
invoke SetFilePointer,hWar,lDistToMove,NULL,NULL
MOV EBX, EBP
SUB EBX, 14h
MOV API,EBX
invoke WriteFile,hWar,API,4h,addr BytesToWritten,NULL
MOV EBX, DWORD PTR [EBP+8h]
SUB EBX, 4h
MOV EAX, DWORD PTR [EBP-14h]
MOV DWORD PTR [EBX], EAX
SUB EBX, 2h
MOV EAX, CorrectCall
CMP AX, WORD PTR [EBX]
JNZ IncorrectCall
CallIsCorrect:
CALL Close
invoke SetLastError,LastErr
MOV ESI, DWORD PTR [EBP-14h]
MOV EAX, DWORD PTR [ESI]
ret
IncorrectCall:
MOV EAX, DWORD PTR [EBP+8h]
SUB EAX, 6h
MOV EBX, 00400000h
SUB EAX, EBX
MOV lDistToMove,EAX
invoke SetFilePointer,hWar,lDistToMove,NULL,NULL
invoke WriteFile,hWar,addr CorrectCall,2h,addr BytesToWritten,NULL
MOV EBX, DWORD PTR [EBP+8h]
SUB EBX, 6h
MOV AX, WORD PTR [CorrectCall]
MOV WORD PTR [EBX],AX
jmp CallIsCorrect
.endif
ret
ApiCallRebuildN2 endp
ApiCallRebuildN3 proc ;004DC1AE & 004DC36E
MOV DWORD PTR [EBP-14h],EAX
invoke GetLastError
MOV LastErr,EAX
CALL Create
.if EAX!=NULL
MOV hWar,EAX
MOV EAX, DWORD PTR [EBP+4h]
SUB EAX, 4h
MOV EBX, 00400000h
SUB EAX, EBX
MOV lDistToMove,EAX
invoke SetFilePointer,hWar,lDistToMove,NULL,NULL
MOV EBX, EBP
SUB EBX, 14h
MOV API,EBX
invoke WriteFile,hWar,API,4h,addr BytesToWritten,NULL
MOV EBX, DWORD PTR [EBP+4h]
SUB EBX, 4h
MOV EAX, DWORD PTR [EBP-14h]
MOV DWORD PTR [EBX], EAX
SUB EBX, 2h
MOV EAX, CorrectCall
CMP AX, WORD PTR [EBX]
JNZ IncorrectCall2
CallIsCorrect2:
CALL Close
invoke SetLastError,LastErr
MOV EAX, DWORD PTR [EBP-14h]
ret
IncorrectCall2:
MOV EAX, DWORD PTR [EBP+4h]
SUB EAX, 6h
MOV EBX, 00400000h
SUB EAX, EBX
MOV lDistToMove,EAX
invoke SetFilePointer,hWar,lDistToMove,NULL,NULL
invoke WriteFile,hWar,addr CorrectCall,2h,addr BytesToWritten,NULL
MOV EBX, DWORD PTR [EBP+4h]
SUB EBX, 6h
MOV AX, WORD PTR [CorrectCall]
MOV WORD PTR [EBX],AX
jmp CallIsCorrect2
.endif
ret
ApiCallRebuildN3 endp
End DllEntry
After loading dll it is caused Fix_exe_API, but before it is necessary to change to addresses a code of a protector on
Resulted below::
46BF57 ==> jmp ApiCallRebuildN1 - category to be in ours dll
4DC415 ==> jmp ApiCallRebuildN2
4DC1AE ==> jmp ApiCallRebuildN3
4DC36E ==> jmp ApiCallRebuildN3
Well and it is a little ????????????????? that after performance call which ???????????? in ???????? ?????????? not in the program, and in ours ???..
Материалы находятся на сайте http://cracklab.ru/art/ ![]() | ||||||
| Вы находитесь на CRACKLAB.RU, сегодня 31 мая 2005 года 06:13:54 MSK | ||||||
|
| ||||||