12-19-2012, 04:05 PM
Всех с праздником.
И вот небольшой подарочек
п.с. кому надо тот поймет что это и зачем)
И вот небольшой подарочек
Код:
;-------------------------------------------------------------------------------------
; DSETUP.DLL By ALF. Enabled BUILDZONE in Tauti KOR_Off
; WORK only on 440 Protocol
;-------------------------------------------------------------------------------------
format PE GUI 4.0 DLL
entry DllEntryPoint
include 'win32a.inc'
include 'MACRO/IF.INC'
;-------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------
section '.data' data readable writeable
;-------------------------------------------------------------------------------------
n_engine db 'engine.dll',0
n_BuildWorldStructure db '?buildWorldStructure@FWorldBuilder@@QAEHPAVULevel@@PA_WPAVUViewport@@HH@Z',0
n_InitUGameEngine db '?Init@UGameEngine@@UAEXH@Z',0
p_engine dd ?
p_BuildWorldStructure dd ?
p_InitUGameEngine dd ?
; Количество дополнительных точек
pointCount dd 1
; Координаты первой дополнительной точки
point_0_x dd -146660.0
point_0_y dd 152796.0
point_0_z dd -14048.0
; Координаты второй дополнительной точки
point_1_x dd 0000.0000
point_1_y dd 0000.0000
point_1_z dd 0000.0000
; Координаты третей дополнительной точки
point_2_x dd 0000.0000
point_2_y dd 0000.0000
point_2_z dd 0000.0000
; Координаты четвертой дополнительной точки
point_3_x dd 0000.0000
point_3_y dd 0000.0000
point_3_z dd 0000.0000
;-------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------
section '.text' code readable executable
;-------------------------------------------------------------------------------------
proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
mov eax, [fdwReason]
.if eax = DLL_PROCESS_ATTACH
call LoadBaseHook
invoke DisableThreadLibraryCalls, [hinstDLL]
.endif
mov eax,TRUE
ret
endp
proc LoadBaseHook
pushad
invoke GetModuleHandleA, n_engine
mov [p_engine], eax ; Получаем GetModuleHandleA("Engine.dll");
invoke GetProcAddress, [p_engine], n_BuildWorldStructure
mov [p_BuildWorldStructure], eax
add eax, 0x72 ; Смещение относительно FWorldBuilder::buildWorldStructure
mov byte [eax], 0x73 ; Одинаково для всех клиентов. 073h - ESI
invoke GetProcAddress, [p_engine], n_InitUGameEngine
mov [p_InitUGameEngine], eax
add eax, 0x02C8 ; Смещение относительно UGameEngine::Init
mov byte [eax], 0x01 ; Количество реальных процессоров! (Не ядер)
add eax, 0x04 ; +4 к предыдущему смещению
mov dword [eax], 0x01 ; Количество потоков для билда. Обычно == кол. реальных процессоров
mov eax, 0x201DB25F ; Нам нужно будет перепрыгнуть ровно 0x64 байт
mov edx, 0x201DB2DA ; Что бы убрать кучу проверок хардкота координат на круму
call WriteJump
mov eax, 0201DB2DEh ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [0][x]
mov dword[eax], point_0_x ; Пишем туда свою координату
mov eax, 0201DB2EAh ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [0][y]
mov dword[eax], point_0_y ; Пишем туда свою координату
mov eax, 0201DB2F6h ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [0][z]
mov dword[eax], point_0_z ; Пишем туда свою координату
.if [pointCount] = 1 ; Если дополнительных точек только 1
mov eax, 0201DB324h ; Пропускаем запись всех остальных точек
mov edx, 0201DB40Eh ; Переходим
call WriteJump
.endif
mov eax, 0201DB32Ch ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [1][x]
mov dword[eax], point_1_x ; Пишем туда свою координату
mov eax, 0201DB338h ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [1][y]
mov dword[eax], point_1_y ; Пишем туда свою координату
mov eax, 0201DB344h ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [1][z]
mov dword[eax], point_1_z ; Пишем туда свою координату
.if [pointCount] = 2 ; Если дополнительных точек только 1
mov eax, 0201DB372h ; Пропускаем запись всех остальных точек
mov edx, 0201DB40Eh ; Переходим
call WriteJump
.endif
mov eax, 0201DB37Ah ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [2][x]
mov dword[eax], point_2_x ; Пишем туда свою координату
mov eax, 0201DB386h ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [2][y]
mov dword[eax], point_2_y ; Пишем туда свою координату
mov eax, 0201DB392h ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [2][z]
mov dword[eax], point_2_z ; Пишем туда свою координату
.if [pointCount] = 3 ; Если дополнительных точек только 1
mov eax, 0201DB3C0h ; Пропускаем запись всех остальных точек
mov edx, 0201DB40Eh ; Переходим
call WriteJump
.endif
mov eax, 0201DB3C8h ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [3][x]
mov dword[eax], point_3_x ; Пишем туда свою координату
mov eax, 0201DB3D4h ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [3][y]
mov dword[eax], point_3_y ; Пишем туда свою координату
mov eax, 0201DB3E0h ; Адрес в памяти где хранится захардкодена координата SIP<FVector> [3][z]
mov dword[eax], point_3_z ; Пишем туда свою координату
popad
ret
endp
proc WriteJump
mov ebx, eax
add ebx, 0x05
sub edx, ebx
mov byte[eax], 0xE9
mov dword[eax+1],edx
ret
endp
;-------------------------------------------------------------------------------------
proc DirectXDeviceDriverSetupA
xor eax, eax
ret
endp
proc DirectXDeviceDriverSetupW
xor eax, eax
ret
endp
proc DirectXRegisterApplicationA
xor eax, eax
ret
endp
proc DirectXRegisterApplicationW
xor eax, eax
ret
endp
proc DirectXSetupA
xor eax, eax
ret
endp
proc DirectXSetupIsJapan
xor eax, eax
ret
endp
proc DirectXSetupIsJapanNec
xor eax, eax
ret
endp
proc DirectXSetupW
xor eax, eax
ret
endp
proc DirectXUnRegisterApplication
xor eax, eax
ret
endp
proc DirectXSetupSetCallback
xor eax, eax
ret
endp
proc DirectXSetupGetVersion
xor eax, eax
ret
endp
proc DirectXSetupCallback
xor eax, eax
ret
endp
proc DirectXSetupGetFileVersion
xor eax, eax
ret
endp
proc DirectXLoadString
xor eax, eax
ret
endp
proc DirectXSetupIsEng
xor eax, eax
ret
endp
proc DirectXSetupShowEULA
xor eax, eax
ret
endp
proc DirectXSetupGetEULAA
xor eax, eax
ret
endp
proc DirectXSetupGetEULAW
xor eax, eax
ret
endp
;-------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------
section '.idata' import data readable writeable
;-------------------------------------------------------------------------------------
library kernel,'KERNEL32.DLL'
import kernel,\
DisableThreadLibraryCalls, 'DisableThreadLibraryCalls',\
GetModuleHandleA, 'GetModuleHandleA',\
GetProcAddress, 'GetProcAddress'
;-------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------
section '.edata' export data readable
;-------------------------------------------------------------------------------------
export 'DSETUP.DLL',\
DllEntryPoint, 'DllEntryPoint',\
DirectXDeviceDriverSetupA,'DirectXDeviceDriverSetupA',\
DirectXDeviceDriverSetupW,'DirectXDeviceDriverSetupW',\
DirectXRegisterApplicationA,'DirectXRegisterApplicationA',\
DirectXRegisterApplicationW,'DirectXRegisterApplicationW',\
DirectXSetupA,'DirectXSetupA',\
DirectXSetupIsJapan,'DirectXSetupIsJapan',\
DirectXSetupIsJapanNec,'DirectXSetupIsJapanNec',\
DirectXSetupW,'DirectXSetupW',\
DirectXUnRegisterApplication,'DirectXUnRegisterApplication',\
DirectXSetupSetCallback,'DirectXSetupSetCallback',\
DirectXSetupGetVersion,'DirectXSetupGetVersion',\
DirectXSetupCallback,'DirectXSetupCallback',\
DirectXSetupGetFileVersion,'DirectXSetupGetFileVersion',\
DirectXLoadString,'DirectXLoadString',\
DirectXSetupIsEng,'DirectXSetupIsEng',\
DirectXSetupShowEULA,'DirectXSetupShowEULA',\
DirectXSetupGetEULAA,'DirectXSetupGetEULAA',\
DirectXSetupGetEULAW,'DirectXSetupGetEULAW'
;-------------------------------------------------------------------------------------
section '.reloc' fixups data discardable
;-------------------------------------------------------------------------------------
п.с. кому надо тот поймет что это и зачем)