【HSP3】hsp3ld

DLLをパックファイルしたまま、実行できるようなるサンプル(実験途中)

DLLをパックファイルしたまま、実行できるようなるサンプル(実験途中)

  • タグ:
  • タグはありません
#runtime "hsp3ld"
#include "user32.as"
#include "kernel32.as"
#module load_dll
#deffunc load_dll_init
sdim name, 261
GetModuleFileNameA 0, varptr(name), 260
LoadLibraryA getpath(name, 8)
hEXE = stat
GetProcAddress hEXE, "InitializeDLLLoad"
pInitializeDLLLoad = stat
if pInitializeDLLLoad == 0{
dialog "hsp3ld使" : end
}
prm = 0
ret = callfunc(prm, pInitializeDLLLoad, 0)
return ret
#deffunc LoadDLL str fname
name = getpath(fname, 8) + "_DLLIMAGE"
exist fname
if strsize == -1 : return -1
size = strsize
sdim buf, size
bload fname, buf
// DLL
// PAGE_READWRITE
CreateFileMapping -1, 0, 0x04, 0, size, varptr(name)
hMapObj = stat
// FILE_MAP_WRITE
MapViewOfFile hMapObj, 0x02, 0, 0, size
sharedMemPtr = stat
if sharedMemPtr == 0 {
CloseHandle hMapObj
return -2
}
dupptr sharedMemVal, sharedMemPtr, size, 2
// DLL
memcpy sharedMemVal, buf, size, 0, 0
UnmapViewOfFile sharedMemPtr //
// FILE_MAP_READ
MapViewOfFile hMapObj, 0x04, 0, 0, 0
pBaseAddr = stat
if pBaseAddr == 0{
CloseHandle hMapObj
return -3
}
//
name = getpath(fname, 8)
GetProcAddress hEXE, "LoadDLLFromImage"
pLoadDLLFromImage = stat
prm.0 = pBaseAddr, varptr(name), 0
ret = callfunc(prm, pLoadDLLFromImage, 3)
UnmapViewOfFile pBaseAddr
CloseHandle hMapObj
return ret
#defcfunc GetDLLProcAddress int handle, str fn
_fn = fn
GetProcAddress hEXE, "GetDLLProcAddress"
pGetDLLProcAddress = stat
prm = handle, varptr(_fn)
ret = callfunc(prm, pGetDLLProcAddress, 2)
return ret
#global
#pack "hspdsc.dll"
load_dll_init
LoadDLL "hspdsc.dll"
hDLL = stat
func = GetDLLProcAddress(hDLL, "dsc_Version")
prm = 0
mes callfunc(prm, func, 0)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX