首页
社区
课程
招聘
[求助]Delphi编写怕LPK在Win7 64位无法运行!
发表于: 2014-8-6 15:20 13296

[求助]Delphi编写怕LPK在Win7 64位无法运行!

2014-8-6 15:20
13296
用PYG10周年DLL补丁制作工具,,生成的LPK.dll可以正常使用!自己用Delphi写的就不行~!

用Delphi编辑的LPK,在XP下运行是正常的,,,而在Win7的64位(32位也一样)系统下,运行就一闪而过,,删了目录的LPK.dll,即可正常运行,,,程序是我自己写的测试,,没有校验。。。

经过测试,,在Win7下,DLL是有加载,但加载后,连下面的这段代码都不执行!


Begin
  DLLProc := @lpk_DllHandler;
  DLLProc(DLL_PROCESS_ATTACH);


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (26)
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用PYG10周年DLL补丁制作工具,,生成的LPK.dll可以正常使用!自己用Delphi写的就不行~!
2014-8-6 15:23
0
雪    币: 200
活跃值: (38)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
是想通过lpk来操作进程吧,其实有个简单的办法来处理导出,就是把你自己的lpk.dll的导出函数和数据直接forward给真正的lpk.dll,免去n多麻烦。
具体方法就是把系统lpk.dll重命名,比如命名为LpkImpl.dll,然后自己的lpk.dll可以这么来做
vc代码:
#pragma comment(linker, "/export:LpkInitialize=LpkImpl.LpkInitialize,@1")
#pragma comment(linker, "/export:LpkTabbedTextOut=LpkImpl.LpkTabbedTextOut,@2")
#pragma comment(linker, "/export:LpkDllInitialize=LpkImpl.LpkDllInitialize,@3")
#pragma comment(linker, "/export:LpkDrawTextEx=LpkImpl.LpkDrawTextEx,@4")
#pragma comment(linker, "/export:LpkEditControl=LpkImpl.LpkEditControl,@5")
#pragma comment(linker, "/export:LpkExtTextOut=LpkImpl.LpkExtTextOut,@6")
#pragma comment(linker, "/export:LpkGetCharacterPlacement=LpkImpl.LpkGetCharacterPlacement,@7")
#pragma comment(linker, "/export:LpkGetTextExtentExPoint=LpkImpl.LpkGetTextExtentExPoint,@8")
#pragma comment(linker, "/export:LpkPSMTextOut=LpkImpl.LpkPSMTextOut,@9")
#pragma comment(linker, "/export:LpkUseGDIWidthCache=LpkImpl.LpkUseGDIWidthCache,@10")
#pragma comment(linker, "/export:ftsWordBreak=LpkImpl.ftsWordBreak,@11")

告诉Linker让他生成forward记录,这样做之后你自己lpk.dll导出的函数会自动在加载dll时forward给真正的lpk.dll,也不需要在DllMain里面进行任何初始化操作,所以你就可以尽情写其他的了。要注意一下win7可能需要再修改一下这个代码,毕竟和xp的lpk.dll导出的函数或数据可能有所不同。
2014-8-6 15:46
0
雪    币: 200
活跃值: (38)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
另外在DLL_PROCESS_ATTACH里面进行LoadLibrary是错误的
2014-8-6 15:47
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
导出的函数是相同的,,,我用PYG的生成工具,就可以在64位的Win7上使用
2014-8-6 15:58
0
雪    币: 200
活跃值: (38)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
这种forward的方式应该是最简单的
2014-8-6 16:11
0
雪    币: 22
活跃值: (893)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
在win7 32位下正常吗?
我仅在32位下用过,解决办法是:
WIN7有的程序调用LPK.DLL的LpkInitialize输出函数在LPK的初始化前面.
要在LpkInitialize这个函数中加入一些处理,并且这部分代码不能加密.
2014-8-6 17:09
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
能否给份32位下可以的代码,谢谢
2014-8-6 17:26
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
9
win7下面lpk.dll应该属于knowndll了吧,还能被劫持吗?
2014-8-6 17:53
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
可以的,,,注册表修改一下即可
2014-8-7 11:04
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
11
要改注册表啊,那就没啥好说了,我说嘛,这玩意儿Win7下默认不能劫持的
2014-8-7 12:38
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
32位下面也不行,,,同样的代码,,,在之前的Win7系统就可以
2014-8-7 14:38
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
走过路过的,,,帮帮忙~!
2014-8-8 11:25
0
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
路过,,,,学习。。。
2014-8-9 06:48
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
这两天没动静?
2014-8-11 09:40
0
雪    币: 22
活跃值: (893)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
在LpkInitialize中,再做一遍初始化。
2014-8-14 20:04
0
雪    币: 94
活跃值: (475)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
64位下,你的DLL必须也是64位编译。。。
2014-8-15 08:26
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
已经再做了一次~!也是无效!
2014-8-15 11:20
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
还有这个说???
2014-8-15 11:21
0
雪    币: 22
活跃值: (893)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
20
Procedure LpkInitialize; stdcall;
BEGIN

if INITFLAG<>88 then
begin
   LoadoriLPK;
   StartHook;
   //LoadLibrary(pchar('lpk.dll'));
   INITFLAG := 88;

end;

asm   jmp strBLpkInitialize  end;

END;

procedure MyDLLHandler(Reason: Integer);
begin

  case Reason of
    DLL_PROCESS_ATTACH:
      begin
        //vmprotectbegin('StartHook');
        //asm
        //  int 3
        //end;
        if INITFLAG<>88 then
begin
        loadoriLpk;
        Starthook;
        //HookProc;
        INITFLAG := 88;
        //vmprotectend;
      end;
      end;
    DLL_PROCESS_DETACH:
      ;
    DLL_THREAD_ATTACH:
      ;
    DLL_THREAD_DETACH:
      ;
  end;
end;

begin

  DLLProc := @MyDLLHandler;
  DLLProc(DLL_PROCESS_ATTACH);

end.
2014-8-26 09:16
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
没用的,不可以
2014-8-30 17:20
0
雪    币: 22
活跃值: (893)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
22
1、我只在win7 32位下测过
2、你确定lpk.dll执行了吗?
3、跟踪下lpk内函数执行的顺序
2014-8-31 00:33
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
我测试怎么不可以,,,100%确定执行了LPK,就是初始化有问题~!

方便的话代码发份给我测试一下,谢谢
2014-9-1 09:25
0
雪    币: 22
活跃值: (893)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
24
2010年的东西了,试下这个lpk.dll能用吗?
上传的附件:
2014-9-2 09:35
0
雪    币: 11236
活跃值: (17844)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
LPK.dll是一个病毒文件吧,

在我们公司内部,用杀毒软件一查杀,提示很多的LPK.dll文件都是木马病毒
2014-9-2 09:47
0
游客
登录 | 注册 方可回帖
返回
//