| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 707 人关注过本帖
标题:发二个刚才写的小程序源码
只看楼主 加入收藏
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
结帖率:54.55%
收藏
 问题点数:0 回复次数:0 
发二个刚才写的小程序源码
图片附件: 游客没有浏览图片的权限,请 登录注册


上面的是处理快捷方式后的图 ,第一个源码资料文件我就不发了。

程序代码:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;去掉快捷方式里的查找目标等
;复习映射内存文件的几个API
;by 153785587
;原理:http://hi.baidu.com/kingcham/blog/item/253c132bed092824d52af145.html
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
;include gdi32.inc  ;图形
includelib user32.lib
includelib kernel32.lib
;includelib gde32.lib
include shell32.inc
includelib shell32.lib

include macro.asm  ;ctxt("")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IDD_DIALOG1     equ                        100
;IDC_BUTTON1     equ                        1000
IDC_EDIT1       equ                        1001
;IDC_BUTTON2     equ                        1002
IDC_STATIC      equ                        1003

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LinkCheck       equ        0000004Ch
;LinkGuid        equ    
NoLink          equ        00001091h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

.data?
hInstance dd ?  ;模块句柄
hMain dd ?      ;对话框句柄

hFile dd ?
hMapFile dd ?
lpMemory dd ?


szDragQueryFileName db MAX_PATH dup (?)

.const

.code

_CheckLink proc uses esi _lpLinkStart
          mov esi,_lpLinkStart
         .if DWORD ptr [esi]==LinkCheck  
                add esi,14h
                mov DWORD ptr [esi],NoLink             
                invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szDragQueryFileName 
         .endif
   invoke UnmapViewOfFile,lpMemory
   invoke CloseHandle,hMapFile
   invoke CloseHandle,hFile   
ret
_CheckLink endp

;
;_MapFile proc _lpFileName
;       
;       invoke CreateFile,_lpFileName,GENERIC_ALL,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
;          .if eax!=-1
;              mov hFile,eax
;                 invoke CreateFileMapping,hFile,NULL,PAGE_EXECUTE_READWRITE,NULL,NULL,NULL
;                   .if eax
;                       mov hMapFile,eax
;                          invoke MapViewOfFile,hMapFile,FILE_MAP_ALL_ACCESS,NULL,NULL,NULL
;                             .if eax
;                                 mov lpMemory,eax
;                                 ;invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szLinkError
;                                ;invoke MessageBox,NULL,CTXT("ok"),CTXT("Createfile"),0
;                                 invoke _CheckLink,lpMemory
;                            .else
;                              invoke MessageBox,NULL,CTXT("map"),CTXT("Createfile"),0
;                            .endif
;                   .else
;                     invoke MessageBox,NULL,CTXT("Createmap"),CTXT("Createfile"),0
;                   .endif
;          .else
;            invoke MessageBox,NULL,CTXT("Createfile"),CTXT("Createfile"),0
;          .endif
;       
;ret
;_MapFile endp
;


;;对话框回调过程
_DlgProc proc uses esi edi ebx hDlg,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG   ;对话框初始化
    push hDlg
    pop hMain
    ;invoke LoadIcon,hInstance,IDR_MAINFRAME
    ;invoke    SendMessage,hDlg,WM_SETICON,ICON_BIG,eax
    invoke DragAcceptFiles,hDlg,TRUE  ;为True时,hWnd所指向的窗体可以接受拖放的文件
    ;当窗口接受到文件后,会收到 WM_DROPFILES 消息。wParam中给出拖动文件结构的句柄。

.elseif uMsg==WM_DROPFILES ;*************************************************************
     invoke DragQueryFile,wParam,0,addr szDragQueryFileName,sizeof szDragQueryFileName

    
;***************************************************************************************************
       invoke CreateFile,addr szDragQueryFileName,GENERIC_ALL,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
          .if eax!=-1
              mov hFile,eax
                 invoke CreateFileMapping,hFile,NULL,PAGE_EXECUTE_READWRITE,NULL,NULL,NULL
                   .if eax
                       mov hMapFile,eax
                          invoke MapViewOfFile,hMapFile,FILE_MAP_ALL_ACCESS,NULL,NULL,NULL
                             .if eax
                                 mov lpMemory,eax
                                 ;invoke SendDlgItemMessage,hMain,IDC_EDIT1,WM_SETTEXT,0,addr szLinkError
                                ;invoke MessageBox,NULL,CTXT("ok"),CTXT("Createfile"),0
                                 invoke _CheckLink,lpMemory
                            .else
                              invoke MessageBox,NULL,CTXT("map"),CTXT("Createfile"),0
                            .endif
                   .else
                     invoke MessageBox,NULL,CTXT("Createmap"),CTXT("Createfile"),0
                   .endif
          .else
            invoke MessageBox,NULL,CTXT("Createfile"),CTXT("Createfile"),0
          .endif
          

;***************************************************************************************************          

    
.elseif uMsg==WM_COMMAND
    mov eax,wParam

.elseif uMsg==WM_CLOSE
;   invoke UnmapViewOfFile,lpMemory
;   invoke CloseHandle,hMapFile
;   invoke CloseHandle,hFile
    invoke EndDialog,hDlg,FALSE
.else
    mov eax,FALSE
    ret
.endif
mov eax,TRUE
ret
_DlgProc endp
;;对话框回调过程






start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr _DlgProc,NULL
invoke ExitProcess,NULL

end start





程序代码:
;************************************************
;指定进程不存在时重起系统
;by 153785587
;************************************************
.386
.model flat,stdcall
option casemap:none
;************************************************
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include advapi32.inc
includelib advapi32.lib ;提权
include psapi.inc
includelib psapi.lib;快照
include Shlwapi.inc
includelib shlwapi.lib ;PathFileExists
;************************************************
include macro.asm  ;ctxt("")
;************************************************
.data
szPrivilegeName db 'SeDebugPrivilege',0 ;提升为这个权限
;szExplorer db 'explorer.exe',0
szMutex db 'QQ153785587',0 ;互斥名称

;szFmatTxt db '%d',0

szConfigFile db '\cfgfile.ini',0 ;配置文件
szSection db 'zerostudy',0 ;节名
szKeyName db '保护进程名称',0
szKeyValue db 'explorer.exe',0dh,0ah,';程序每一分钟检测上面的进程有没有运行,若没有则重启系统。BY 153785587',0


.data?
hInstance dd ? ;模块句柄
hSanp dd ?   ;快照句柄
stSanp PROCESSENTRY32 <?>  ;快照的结构
;hProcess dd ? ;进程句柄
hMutex dd ? ;互斥句柄

dwCheckProcess dd ? ;检测指定进程是否在运行

szBuffer db MAX_PATH dup (?)
szFileBuffer db MAX_PATH dup (?) ;ini文件名
szReturnBuffer db MAX_PATH dup (?) ;读取ini的值
;************************************************
.code
;************************************************

;************************************************
;检查程序是否已运行,若已运行则退出。
;************************************************
_CheckChongFu proc 
      invoke CreateMutex,NULL,FALSE,addr szMutex
         .if eax ;CreateMutex返回NULL的话表示创建失败
               mov hMutex,eax  ;指向互斥句柄
               invoke GetLastError   ;若有一个程序在运行那么用GetLastError得到的值会是ERROR_ALREADY_EXISTS
                  .if eax==ERROR_ALREADY_EXISTS
;                        invoke MessageBox,NULL,CTXT("已有程序在运行!"),CTXT("Error"),0
                         invoke ReleaseMutex,hMutex
                         invoke ExitProcess,NULL
                  .endif
              invoke ReleaseMutex,hMutex
;       .else
;            invoke MessageBox,NULL,CTXT("创建Muter失败!"),CTXT("Error"),0
        .endif
  ret
_CheckChongFu endp
;************************************************
;检查程序是否已运行,若已运行则退出。
;************************************************



;************************************************
;检查INI文件是否存在
;************************************************
_CheckPath proc
     invoke GetCurrentDirectory,MAX_PATH,addr szFileBuffer
     invoke lstrcat,addr szFileBuffer,addr szConfigFile ;当前目录下的ini文件的路径
        invoke PathFileExists,addr szFileBuffer  ;0表示不存在 1表示存在
          .if eax!=1
             invoke MessageBox,NULL,CTXT("INI文件不存在,是否创建?"),CTXT("ERROR"),MB_OKCANCEL
                .if eax==IDOK
                   invoke WritePrivateProfileString,addr szSection,addr szKeyName,addr szKeyValue,addr szFileBuffer
                      .if !eax
                         invoke MessageBox,NULL,CTXT("不能建立文件程序退出,是否有可写权限?"),CTXT("ERROR"),MB_OK
                                invoke ExitProcess,NULL
                      .endif
                 .else
                   invoke ExitProcess,NULL
                .endif
          .endif
     
     invoke GetPrivateProfileString,addr szSection,addr szKeyName,addr szKeyValue,addr szReturnBuffer,sizeof szReturnBuffer,addr szFileBuffer
 
          
ret
_CheckPath endp
;************************************************
;检查INI文件是否存在
;************************************************









;************************************************
;提升权限
;************************************************
_SeDebugPrivilege proc
       local @stTkp:TOKEN_PRIVILEGES,@stLuid:LUID
       local @hToKen;:DWORD
     invoke GetCurrentProcess  ;GetCurrentProcess得到得到的称之为"伪句柄"只是一个标识,你可以发现,其实就是返回$FFFFFFFF
    ;每个进程得句柄都是一样得,只是实用于进程内部得使用.
    ;如果你想得到实际得句柄,在进程间进行通讯,必需要进行转化,
    ;调用DuplicateHandle,注意,得实句柄使用完成以后,你必须要调用CloseHandle去关闭.
    ;其实,你应该明白了为何"伪句柄"得存在,就是使用简单,不用关闭,
    ;不会造成内存泄漏.
    mov ecx,eax  ;直接用eax会出现register value overwritten by INVOKE
    invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr @hToKen
    ;.if !eax  ;返回0则表示出错
    ;   invoke MessageBox,NULL,CTXT("获取访问令牌句柄失败!"),CTXT("出错"),0
    ;   ret
    ;.endif
        
    ;invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stTkp.Privileges[0].Luid
    invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stLuid
    ;.if !eax
    ;   invoke MessageBox,NULL,CTXT("获取当前进程权限失败!"),CTXT("出错"),0
    ;  ret
    ;.endif  
    ;这些函数用在NT以上的系统,也可以在之前判断本系统是否是NT以上的系统。
    ;第一个参数表示所要查看的系统,本地系统直接用NULL 
    ;第二个参数表示所要查看的特权信息的名称,定义在winnt.h中
    ;第三个参数用来接收所返回的制定特权名称的信息。
    mov @stTkp.PrivilegeCount,1
    ;***********************************************
    ;invoke LookupPrivilegeValue,NULL,addr szPrivilegeName, addr @stTkp.Privileges[0].Luid
    ;用这个,下面这个push可以不要。因为直接已把特权信息放到@stTkp.Privileges[0].Luid中。
    PUSH    @stLuid.LowPart
    POP    @stTkp.Privileges[0].Luid.LowPart
    PUSH    @stLuid.HighPart
    POP    @stTkp.Privileges[0].Luid.HighPart
    ;***********************************************
    MOV    @stTkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED
   
    invoke AdjustTokenPrivileges,@hToKen,FALSE, addr @stTkp,sizeof TOKEN_PRIVILEGES,NULL,NULL 
    ;.if !eax
    ;   invoke MessageBox,NULL,CTXT("提升访问令牌权限失败!"),CTXT("出错"),0
    ;   ret
    ;.endif
    
    
    invoke CloseHandle,@hToKen
    ;invoke MessageBox,NULL,CTXT("权限已提升"),CTXT("OK"),0
ret
_SeDebugPrivilege endp
;************************************************
;提升权限
;************************************************


;************************************************
;进程列举
;************************************************
_ProcessList proc
mov dwCheckProcess,0 ;列举进程时选把它置0

mov stSanp.dwSize,sizeof stSanp  ;使用结构之前,要先设置大小
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,NULL ;得到当前的系统进程快照
mov hSanp,eax  ;快照句柄传给hSanp   Process32First
invoke Process32First,hSanp,addr stSanp   ;首次从快照得到一个进程信息
.while eax
invoke CharUpper,addr stSanp.szExeFile ;把程序名转为大写
invoke lstrcmp,addr szReturnBuffer,addr stSanp.szExeFile   ;lstrcmp 两字符串比较。区分大小写,相等则返回0
   .if !eax  ;相等
      inc dwCheckProcess ;找到则加1
   .endif
invoke  Process32Next,hSanp,addr stSanp  ;用Process32Next循环从快照取得进程信息,直到取完进程,然后返回flase 从而退出
.endw
invoke CloseHandle,hSanp ;关闭快照句柄
ret
_ProcessList endp
;************************************************
;进程列举
;************************************************


;************************************************
start:
      invoke GetModuleHandle,NULL
      mov hInstance,eax      
      call _CheckChongFu ;防止重复运行
      call _CheckPath ;检测ini文件
      call _SeDebugPrivilege ;提权
      mov dwCheckProcess,0  ;初始化
     invoke CharUpper,addr szReturnBuffer

    .while TRUE
       invoke Sleep,60000 ;1分钟
       call _ProcessList ;列举进程
         .if dwCheckProcess==0  ;说明没找到指定的进程
             invoke ExitWindows,EWX_REBOOT,0    
             invoke ExitProcess,NULL
         .endif
    .endw  
        invoke ExitProcess,NULL
end start
;************************************************
收到的鲜花
  • zklhp2009-10-24 12:36 送鲜花  50朵  
搜索更多相关主题的帖子: 源码 
2009-10-23 16:18
快速回复:发二个刚才写的小程序源码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025008 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved