应用重启与破解

应用重启与破解

ID:43317980

大小:106.21 KB

页数:7页

时间:2019-09-30

应用重启与破解_第1页
应用重启与破解_第2页
应用重启与破解_第3页
应用重启与破解_第4页
应用重启与破解_第5页
资源描述:

《应用重启与破解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、KeepRunning(Ex).7z目录什么是KeepRunning?如何构造KeepRunning?如何破解KeepRunning?如何使用KeepRunningEx?重要声明什么是KeepRunning?压缩包屮封装了应用程序非正常终止的重启功能。假设进程A是一个家长监管程序,开机自动启动,需要密码才能退出。可是你知道的,除了360那些强大的安全软件,没什么进程不能被任务管理器终止,欲关闭监管程序,用任务管理器终止便罢!我们还得给监管程序加几条安全绳!这就是KeepRuning!虽然KeepRunning不能让程序返回执行被终止前正在执行的语句,

2、但对于监管系列程序來说,这已经足够了!如何构造KeepRunning?如果让你来给程序加上KeepRunning功能,你会怎么做?作者木人的思路如下:创建-个进程等待程序被终止,然后使用CreateProcess启程序。KeepRunning.7z就是这么做的!为了让代码尽可能地重用,我把可能被终止的程序(A部分)、等待程序终止并重启程序(B部分)分为两部分。A部分琏接一个DLL(Running.dll),示者负责启动B部分进程B部分等待A终止,并使用CreateProcess重启A好吧,基本思路建立起來了,但是还有一些细节是需要注意的!比如Crea

3、teProcess要求传入A部分的路径,所以我们还要保存这个路径,B部分要等待A部分,那么就必须获得A部分的句柄!KeepRunning.7z把这些工作都在A部分中做了,当然,KeepRunning.7z的做法冇两个明显的缺点,正因为这样,才诞生了Ex版本。我们來看看KeepRunning.7z的做法:A部分:1.声明一个结构:structMyProcessHANDLEhProcess;TCHARszPath[MAXPATH];};1.调用GetModuleHanle(...)保存A部分的路径到szPaht中。2.创建B部分进程3.调用Duplica

4、teHandle复制A部分进程句柄到B部分,并把复制后的句柄保存到hProcess中。4.使川WriteProcessMemory把整个MyProcess结构写入到B部分【更早期的版本使丿1J内存映射文件共亨整个结构】5.使用内存映射文件共享MyProcess结构的地址(在B部分进程中)B部分:1.使用内存映射文件获得MyProcess结构的地址2.等待A部分终止(句柄保存在MyProcess结构hProcess屮)3.重启A部分(A部分路径保存在MyProcess结构szPath中)4.B部分终止KeepRunning的大致做法就是这样,但我们的R

5、unning.dll还需要开放一个接口给调用者,这两个接口就是:VOIDKeepRunning();VOIDCloseProcess();调用KeepRunning会完成上述的A部分的工作。那么CloseProcess()的工作方式如何?以下是该函数的工作方式:1.使用TerminateProcess终止B部分进程2.调用ExitProcess终止A部分进程这就是KeepRunning.7zH装的操作,相信聪明的读者已经发现了很多漏洞!首先,每一个A部分就对应了一个B部分,这浪费资源,而且A部分做了过多的操作,使得A部分的初始化时间长,用户难以接受!

6、最严重的是,CloseProcess调用了ExitProcess!我们的C++析构函数不会被调用!这还不算严重吗?所有这些问题,都在Ex版木屮得到解决!所以:应使用Ex版本,保留非Ex版本只是为了保留一种思路!作者本人已不再提供非Ex版本支持。以下是Ex版木的做法(依然分为A、B两部分)A部分:1.检查B部分是否已生成,否的话就生成B部分,同时使用事件内核对象等待B部分创建完毕,并把B部分主线程Id保存到共享变量g_dwKeepRunThreadld中。#pragmadata_seg("Shared")DWORDg_dwKeepRunThreadld

7、=NULL;#pragmadata_seg()#pragmacomment(linker,"/SECTION:Shared,RWS")检查g_dwKeepRunningThreadld是否为NULL,若为NULL,生成B部分鉴于此,我强烈推荐读者把KeepRunningEx放到Windows目录,这样就能高度共享Running.dll暨KeepRunning.exe1.调用PostThreadMessage给B部分主线程发送消息【WM_APP】(wParam=100),并在IParam参数中传入GetCurrentProcessld()2.欲退出A部

8、分,调用PostThreadMessage给B部分主线程发送消息【WM_APP](wParam=101),并

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。