Ben*_*iss 1 windows delphi dll winapi portable-executable
我有以下情况:
我有一个delphi应用程序{$APPTYPE GUI}.(APP1)
如果APP1开始,它会在begin和之间运行代码
end.,就像它应该的那样.
稍后,APP1将转换为DLL(另一个应用程序将执行该操作 - APP2).
APP2 增加了IMAGE_FILE_DLL标志的Characteristics中NTFileHeader的APP1.然后APP2尝试APP1使用LoadLibrary(或一些其他COM命令加载DLL)加载DLL()但它返回错误:
Windows初始化COM库时遇到内部错误.
我用一个C项目完成了所有这些并使用了该WinMain功能.但它似乎不适用于Delphi(APP1不是作为DLL启动).如何转换APP1为工作DLL?
编辑:
我正在尝试将此代码移植C到Delphi:http://level-23.info/forum/showthread.php?14721-UAC-Bypass-for-Windows-7-RTM-SP1-Windows-8-DP&p= 31749
我已正确移植它并且一切正常但是CRYPTBASE.dll(APP1)没有启动.(见上面的错误)
简而言之:创建一个delphi应用程序,IMAGE_FILE_DLL在文件头中添加特征.将其重命名并将其CRYPTBASE.dll复制到C:\ Windows\System32\sysprep.然后开始sysprep.exe
INFOS在这里: http ://www.pretentiousname.com/misc/W7E_Source/win7_uac_poc_details.html
按照惯例,WinMain只是一个名称,用作可执行文件的入口点.DLL的约定是使用名称DllMain.Windows加载程序不搜索WinMain,而LoadLibrary不搜索DllMain,它只调用pe头中的入口点.
Delphi也没有使用,入口点的导出名称是start.
WinMain签名与DllMain不同(WinMain需要四个参数),我的建议是声明一个函数DllMain并将其导出到你的exe中:
function DllMain(hinstDLL: THandle; fdwReason: DWORD; lpvReserverd: Pointer): BOOL; stdcall;
begin
// do something
end;
exports
DllMain;
Run Code Online (Sandbox Code Playgroud)
修改你的exe(在我设想的mem中)为dll的代码应该将入口点设置为DllMain(通过走EAT获取它的地址).
另外:确保重定位表没有被剥离(在发布模式下),因为DLL在重新定位时需要它.
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |