邪恶八进制信息安全团队技术讨论组's Archiver

黑菜 2007-8-9 14:25

[原创]程序默认安装路径设置器(初学Win32汇编作品 附源文件)

文章作者:黑菜
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])

ASM文件:

[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


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN equ 1
ICO_MAIN equ 1000
IDD_C  equ 1001
IDD_D  equ 1002
IDD_E  equ 1003
IDD_F   equ 1004
IDD_ZDY equ 1005
IDD_EDT1 equ 1006
IDD_OK equ 1007


.data?
hInstance dd ?
szZDY  dd 256 dup (?)
.const

szRegKey db 'SOFTWARE\Microsoft\Windows\CurrentVersion',0
szRegValue db 'ProgramFilesDir',0
szStr1 db 'C:\Program Files',0
szStr2 db 'D:\Program Files',0
szStr3 db 'E:\Program Files',0
szStr4 db 'F:\Program Files',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
_ProcDlgMain  proc  uses ebx edi esi hWnd,wMsg,wParam,lParam
    LOCAL  @save
    mov  eax,wMsg
    .if  eax == WM_CLOSE
      invoke  EndDialog,hWnd,NULL
    .elseif  eax == WM_INITDIALOG
      invoke  LoadIcon,hInstance,ICO_MAIN
      invoke  SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
      invoke  GetDlgItem,hWnd,IDD_EDT1
      invoke  EnableWindow,eax,FALSE
      
    .elseif  eax == WM_COMMAND
      mov  eax,wParam
        invoke  IsDlgButtonChecked,hWnd,IDD_C
        .if ax==BST_CHECKED
          invoke  GetDlgItem,hWnd,IDD_EDT1
          invoke  EnableWindow,eax,FALSE
          invoke RegCreateKey,HKEY_LOCAL_MACHINE,addr szRegKey,addr @save
           invoke RegSetValueEx,@save,addr szRegValue,NULL,REG_SZ,addr szStr1,sizeof szStr1
           invoke RegCloseKey,@save
         .endif
        invoke  IsDlgButtonChecked,hWnd,IDD_D
        .if ax==BST_CHECKED
          invoke  GetDlgItem,hWnd,IDD_EDT1
          invoke  EnableWindow,eax,FALSE
          invoke RegCreateKey,HKEY_LOCAL_MACHINE,addr szRegKey,addr @save
           invoke RegSetValueEx,@save,addr szRegValue,NULL,REG_SZ,addr szStr2,sizeof szStr2
           invoke RegCloseKey,@save
         .endif
        invoke  IsDlgButtonChecked,hWnd,IDD_E
        .if ax==BST_CHECKED
          invoke  GetDlgItem,hWnd,IDD_EDT1
          invoke  EnableWindow,eax,FALSE
          invoke RegCreateKey,HKEY_LOCAL_MACHINE,addr szRegKey,addr @save
           invoke RegSetValueEx,@save,addr szRegValue,NULL,REG_SZ,addr szStr3,sizeof szStr3
           invoke RegCloseKey,@save
        .endif
        
        invoke  IsDlgButtonChecked,hWnd,IDD_F
        .if ax==BST_CHECKED
          invoke  GetDlgItem,hWnd,IDD_EDT1
          invoke  EnableWindow,eax,FALSE
          invoke RegCreateKey,HKEY_LOCAL_MACHINE,addr szRegKey,addr @save
           invoke RegSetValueEx,@save,addr szRegValue,NULL,REG_SZ,addr szStr4,sizeof szStr4
           invoke RegCloseKey,@save
        .endif
        
        invoke  IsDlgButtonChecked,hWnd,IDD_ZDY
        .if ax==BST_CHECKED  
          invoke  GetDlgItem,hWnd,IDD_EDT1
          invoke  EnableWindow,eax,TRUE
          invoke  GetDlgItemText,hWnd,IDD_EDT1,addr szZDY,sizeof szZDY
          invoke  RegCreateKey,HKEY_LOCAL_MACHINE,addr szRegKey,addr @save
           invoke  RegSetValueEx,@save,addr szRegValue,NULL,REG_SZ,addr szZDY,sizeof szZDY
           invoke  RegCloseKey,@save
         .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,0
    invoke  ExitProcess,NULL
    end  start[/code]

rc文件:

[code]#define DLG_MAIN 1
#define IDC_GRP1 3
#define IDD_C 1001
#define IDD_D 1002
#define IDD_E 1003
#define IDD_F 1004
#define IDD_EDT1 1006
#define IDD_ZDY 1005
#define IDC_STC1 2
#define ICO_MAIN 1000
#include "resource.h"
DLG_MAIN DIALOGEX 6,5,179,109
CAPTION "程序默认安装目录设置器"
FONT 8,"MS Sans Serif",0,0
STYLE 0x10CF0000
BEGIN
CONTROL "C:\Program Files",IDD_C,"Button",0x50010009,8,11,66,11
CONTROL "D:\Program Files",IDD_D,"Button",0x50010009,8,29,66,11
CONTROL "E:\Program Files",IDD_E,"Button",0x50010009,8,48,66,11
CONTROL "F:\Program Files",IDD_F,"Button",0x50010009,8,66,66,11
CONTROL "",IDD_EDT1,"Edit",0x50010000,80,84,90,11,0x00000200
CONTROL "自定义路径",IDD_ZDY,"Button",0x50010009,8,84,66,11
CONTROL "作用:        修改程序默认安装目录。       微软官方建议不要修改!有可能会遭遇未预料的问题,给系统稳定性带来影响。",IDC_STC1,"Static",0x50000000,88,12,74,65
CONTROL "",IDC_GRP1,"Button",0x50000007,4,3,170,102
END
ICO_MAIN ICON DISCARDABLE "Main.ico"
[/code]


想ASM同志学习,共享代码!
并在此感谢他对我的极大帮助,大清早就伤他脑细胞帮我改代码
[s:267]

81635631 2007-8-10 00:26

呵呵 加油
建议去读那个给程序加区段的源码 应该会学得比较快

gyfhgyfh 2007-8-10 07:15

只能设定在 'Program Files' 吗?

szRegKey db 'SOFTWARE\Microsoft\Windows\CurrentVersion',0
szRegValue db 'ProgramFilesDir',0
szStr1 db 'C:\Program Files',0
szStr2 db 'D:\Program Files',0
szStr3 db 'E:\Program Files',0
szStr4 db 'F:\Program Files',0

mingjian987 2007-8-11 11:46

又是菠菜发的东西...
貌似是提供安装包的安装路径的选择吧?

页: [1]
© 1999-2008 EvilOctal Security Team