首页
社区
课程
招聘
[求助][原创][求助]win32汇编里注入DialogBoxParam(对话框)问题
发表于: 2012-5-2 02:35 8449

[求助][原创][求助]win32汇编里注入DialogBoxParam(对话框)问题

2012-5-2 02:35
8449
注入win32汇编模态对话框时,总是无法成功,现把代码贴于下面和传于附件。请大牛不吝赐教。之前在看雪我网上看了好多人提问,但都没有一个确切点的答案,也试过他们的方法但还是无法显示对话框。具体情况是这样的:对话框能正常编译和生成Dll 和exe(包括被注入和注入对话框)  被注入对话框改写exe能正常显示。注入对话框也能正常注入其它窗口类程序。目前只发现不能注入上传(或者这类)对话框。编译器是2.2的Radasm  跪求踢教。望高手指点。调试了两天都没有一个结果。  
;主调用程序
;>>>>>>>>>>>>
;以下为调用窗口(主程序)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .386
    .model flat, stdcall
    option casemap :none
include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib
IDD_DLG1  equ  8000H
ICO_MAIN  equ  8001H
    .data?
hInstanc  dd  ?
dwProcessID  dd  ?
dwThreadID  dd  ?
hProcess  dd  ?
lpLoadLibrary  dd  ?
lpDllName  dd  ?
szMyDllFull  db  MAX_PATH dup (?)
    .const
szErrOpen  db  '无法打开远程线程!',0
szDllKernel  db  'Kernel32.dll',0
szLoadLibrary  db  'LoadLibraryA',0
szMyDll    db  '\ZtDll.dll',0   ;此为对话框dll  
szPlayCN  db  'explorer.exe',0   ;这个为系统快照里的任意进程
szPrompt  db  '温馨提示',0
ErroText  db  '进程未启动!请先启动进程。',0
;>>>>>>>>>>>>格式控制符
ForMOne    db  '%s',0
ForMTwo    db  '%d/%d',0
ForMThree  db  '%d',0
ForMFour  db  '%d:%d',0
ForMFive  db  '内容:%d',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .code
;>>>>>>>>>>>>>提示便利函数
_MessageBox  proc  _szDate
  LOCAL  @szbuffer[20]:byte
  invoke  wsprintf,addr  @szbuffer,offset ForMFive,_szDate
  invoke  MessageBox,0,addr @szbuffer,addr szPrompt,MB_OK or MB_ICONQUESTION
  ret
_MessageBox endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;_GetProcessID   proc  szProName
  LOCAL  @stProcess:PROCESSENTRY32
  LOCAL  @hSnapShot
  pushad      
  invoke  RtlZeroMemory,addr @stProcess,Sizeof @stProcess
  mov  @stProcess.dwSize,Sizeof @stProcess
  invoke  CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,NULL
  mov  @hSnapShot,eax  
  invoke  Process32First,@hSnapShot,addr @stProcess
  .while  eax
    invoke   lstrcmp,szProName,addr @stProcess.szExeFile    
    .if  eax == 0  
      jmp Ver
    .endif              
    invoke  Process32Next,@hSnapShot,addr @stProcess
  .endw
  invoke  CloseHandle,@hSnapShot  
  popad
  mov  eax,0            ;失败:返回0 到eax  
  ret    
Ver:  
  invoke  CloseHandle,@hSnapShot  
  popad  
  mov  eax,@stProcess.th32ProcessID      ;成功:保存ID 到eax
  ret
_GetProcessID endp
_InjectFunc  proc  uses ebx esi edi Wnd
    LOCAL  GameID:dword,hThread:dword,dwExitCode:dword
    invoke  GetCurrentDirectory,MAX_PATH,offset szMyDllFull    
    invoke  lstrcat,offset szMyDllFull,offset szMyDll
    invoke  GetModuleHandle,offset szDllKernel
    invoke  GetProcAddress,eax,offset szLoadLibrary    
    mov  lpLoadLibrary,eax      
    invoke  _GetProcessID,addr szPlayCN
    ;invoke  _MessageBox,eax          
    .if  eax == 0         
      invoke  MessageBox,Wnd,offset ErroText,offset  szPrompt,MB_OK or MB_ICONQUESTION
      ret      
    .endif  
    invoke  OpenProcess,PROCESS_ALL_ACCESS,FALSE,eax
    ;invoke  _MessageBox,offset szMyDllFull    
    mov  GameID,eax    
    .if  eax
      mov  hProcess,eax
      invoke  VirtualAllocEx,hProcess,NULL,MAX_PATH,MEM_COMMIT,PAGE_READWRITE
      .if  eax
        mov  lpDllName,eax
        invoke  WriteProcessMemory,hProcess,\
          eax,offset szMyDllFull,MAX_PATH,NULL
        invoke  CreateRemoteThread,hProcess,NULL,0,lpLoadLibrary,\
          lpDllName,0,NULL
        mov    hThread,EAX
            .If     hThread == 0
                
            .Endif
    
            Invoke    WaitForSingleObject,hThread, INFINITE
            Invoke    GetExitCodeThread, hThread, addr dwExitCode
            .If     dwExitCode != 0
                invoke    VirtualFreeEx, hProcess, lpDllName, 0, MEM_RELEASE
                Invoke    CloseHandle,hProcess
                mov    EAX,1
            .else
                mov    EAX,0
            .endif    
              ret        
      .endif      
    .else
      invoke  MessageBox,Wnd,offset szErrOpen,offset szPrompt,MB_OK or MB_ICONQUESTION
      mov  eax,1  
      ret     
    .endif
    
  ret
_InjectFunc endp
_ProcDlgMain  proc  uses edi esi ebx hWnd,uMsg,wParam,lParam
    mov  eax,uMsg
    .if  eax == WM_COMMAND
      mov eax,wParam
      .if  ax == IDOK
        invoke  _InjectFunc,hWnd
        .if  eax == 0  
          invoke   ExitProcess,NULL  ;启动后关闭对话框
        .endif
      .endif
    .elseif  eax == WM_CLOSE
      invoke  EndDialog,hWnd,0
    .elseif  eax == WM_INITDIALOG
      invoke  LoadIcon,hInstanc,ICO_MAIN
      invoke  SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
      invoke  SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE  
    .else
      mov  eax,FALSE
      ret
    .endif
      mov  eax,TRUE
      ret        
_ProcDlgMain endp
start:
  invoke   GetModuleHandle,NULL
  mov  hInstanc,eax  
  invoke   DialogBoxParam,hInstanc,IDD_DLG1,NULL,offset _ProcDlgMain,NULL
  invoke   ExitProcess,NULL
end  start

;>>>>>>>>>
;资源文件(主对话框的)
;>>>>>>
#include  <resource.h>
#define   IDD_DLG1   0x8000
#define    ICO_MAIN  0x8001
ICO_MAIN ICON "Main.ico"
IDD_DLG1 DIALOG 200,100,90,40
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_TABSTOP | WS_SYSMENU + WS_MAXIMIZEBOX + WS_MINIMIZEBOX
CAPTION "注入>>>残剑"//
FONT 9,"宋体"
BEGIN 
  DEFPUSHBUTTON "挂接程序(&Z)", IDOK, 15, 10, 60, 20 
    //CONTROL "",IDC_LST1,"SysListView32",0x5081000D,2,100,232,90
END

;>>>>>>>>>>>>>>>>>>>>>>>>
;注入对话框文件主文件
;>>>>>>>>>>>>
    .386
    .model flat, stdcall
    option casemap :none

include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib

ICO_MAIN  equ    1000h  ;图标
DLG_MAIN  equ    1
    .data?
hInstance  dd    ?
    .code
_ProcDlgMain  proc  uses ebx edi esi hWnd,wMsg,wParam,lParam

    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
    .elseif  eax == WM_COMMAND
      mov  eax,wParam
      .if  ax == IDOK
        invoke  EndDialog,hWnd,NULL
      .endif
    .else
      mov  eax,FALSE
      ret
    .endif
    mov  eax,TRUE
    ret
_ProcDlgMain  endp
_WinMain  proc
    invoke  DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
    ret
_WinMain  endp

    
DllEntry  proc  _hInstance,_dwReason,_dwReserved
    local  @dwThreadID

    .if  _dwReason == DLL_PROCESS_ATTACH
      push  _hInstance
      pop  hInstance
      invoke  CreateThread,NULL,0,offset _WinMain,NULL,\
        NULL,addr @dwThreadID
      invoke  CloseHandle,eax
    .endif
    mov  eax,TRUE
    ret

DllEntry  Endp
    

;>>>>>>>>>>
;注入对话框资源文件
;>>>>>>>>>>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include    <resource.h>
#define  ICO_MAIN    0x1000  //图标
#define  DLG_MAIN    1
ICO_MAIN  ICON  "Main.ico"
DLG_MAIN DIALOG 50,50,113,64
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "对话框模板"
FONT 9,"宋体"
{
ICON ICO_MAIN,-1,10,11,18,21
CTEXT "简单的对话框例子",-1,36,14,70,19
DEFPUSHBUTTON "退出",IDOK,58,46,50,14
CONTROL "",-1,"Static",SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE,6,39,103,1
}

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 20557
活跃值: (3780)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
Thank you very much
2012-5-2 05:47
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
3
下载看了,楼主你的dll没吧资源res连接进去所以不显示窗口,其他代码都正确。
2012-5-2 09:12
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
4
dll 连接
/DLL /ENTRY:DllEntry  ZtDll.res ZtDll.dll
指定连接成dll指定入口点,加上链接资源.res
2012-5-2 09:13
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
DllEntry  这个写什么。。。
你看我这样链接的时候还是不行提示这个错误:
LINK : fatal error LNK1149: output filename matches input filename "F:\学习文件夹\练习作品\初级作品\ZtDll\ZtDll.dll"
  在radasm链接器是这么设置的:
7,O,$B\LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /DLL /ENTRY:DllEntry  ZtDll.res ZtDll.dll /DEF:$6 /LIBPATH:"$L" /OUT:"$7",3
请教一下。。这里应该怎么改呢?
2012-5-2 18:28
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
忘了。。首先还是先谢谢这位大牛。代帮分析。不过小弟还是不明白。请再指教一下,小弟不胜感激
2012-5-2 18:33
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
请大牛们看看。。无限谢谢
2012-5-2 19:21
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
莫非真的没有人肯帮我们这些新手看看。,,
2012-5-3 01:08
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
9
试下这个吧。出错提示的意思是:输出文件和输入文件相匹配(文件名一致)。显然链接器把你写的ztdll当成要被链接的模块了。而你要链接的模块是两个,一个是ztdll.obj,一个是ztdll.res

4楼的写法可以成功,原因是没有显示指明out选项,默认把最后一个文件作为out选项的参数了

7,O,$B\LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /DLL /ENTRY:DllEntry  ZtDll.obj ZtDll.res /DEF:$6 /LIBPATH:"$L" /OUT:"$7",3
2012-5-3 06:43
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
无限谢谢。你们两位大牛。。。
2012-5-3 09:37
0
游客
登录 | 注册 方可回帖
返回
//