首页
社区
课程
招聘
[求助]载入防修改的DLL时为何在系统csrss.exe进程提示“This file is cracked.”?
发表于: 2008-12-25 16:40 4178

[求助]载入防修改的DLL时为何在系统csrss.exe进程提示“This file is cracked.”?

2008-12-25 16:40
4178
有个Delphi写的DLL带有自校验防修改功能,只要文件被修改过,在LoadLibrary时就显示一个标题为“Error.”内容为“This file is cracked.The application will be closed.”以下消息框,点击确定后程序就自动退出。

奇怪的是弹出这个消息框的进程不是LoadLibrary的进程,而是系统的csrss.exe进程,请高手指点这是如何做到的?

用LordPE打开这个DLL发现PE头的CheckSum有非零值,但却与LordPE计算出来的值不同。

我想它的防修改功能应该是在DLL的入口DllEntryPoint函数处做的,反汇编后发现在DllEntryPoint函数处做了不少的工作,修改DllEntryPoint函数让它什么也只做只是简单地return 1后,LoadLibrary时不再出现那个提示破解的消息框,但软件的部分功能却无法使用了。

还有个问题顺便请教一下高手:

DllEntryPoint函数应该是在DLL首次载入内存时执行的吧?之后其它程序再调用该DLL就不会执行DllEntryPoint函数吧?
那么,DllEntryPoint函数应该是在系统进程(非用户进程)里执行的吧?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
关于Dll的入口点什么时候被调用,你的理解是错误的。

请看MSDN中的说明:函数原型:

BOOL WINAPI DllMain(
  [in]                 HINSTANCE hinstDLL,
  [in]                 DWORD fdwReason,
  [in]                 LPVOID lpvReserved
);


看其中fdwReason参数的取值为:

DLL_PROCESS_ATTACH == 1

 The DLL is being loaded into the virtual address space of the current process as a result of the process starting up or as a result of a call to LoadLibrary.
 
DLL_THREAD_ATTACH == 2

 The current process is creating a new thread. When this occurs, the system calls the entry-point function of all DLLs currently attached to the process. The call is made in the context of the new thread.
 
DLL_THREAD_DETACH == 3

 A thread is exiting cleanly. 
 
DLL_PROCESS_DETACH==0

The DLL is being unloaded from the virtual address space of the calling process 


对函数的描述:

DllMain Callback Function

An optional entry point into a dynamic-link library (DLL). When the system starts or terminates a process or thread, it calls the entry-point function for each loaded DLL using the first thread of the process. The system also calls the entry-point function for a DLL when it is loaded or unloaded using the LoadLibrary and FreeLibrary functions.


也就是说,Dll的入口点是在用户进程的上下文中执行的。它负责着初始化的重要任务,你把它改成什么都不做,自然会使某些功能失效。
2008-12-25 17:41
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我刚写了个简单的DLL测试了一下的确如您所说,我原来的理解是错误的,入口点函数确实是在用户的上下文执行的,且不只执行一次,进程或线程的初始化和终止、调用 LoadLibrary 和 FreeLibrary 时也都会被执行的。

可是,为何它的“This file is cracked.”消息框却在csrss.exe进程的上下文执行呢?
请高手指点指点!
2008-12-25 21:47
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
已经解决,谢谢2楼兄弟!
2008-12-26 15:13
0
游客
登录 | 注册 方可回帖
返回
//