首页
社区
课程
招聘
[旧帖] [求助]远程线程的问题,请教各位老大 0.00雪花
发表于: 2008-2-19 21:28 3866

[旧帖] [求助]远程线程的问题,请教各位老大 0.00雪花

2008-2-19 21:28
3866
远程线程的问题,看了罗的书自己弄一个窗口却不成功,不知道哪里错了,麻烦各位老大帮我看看,非常感谢.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 120
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
怎么没人帮我看看啊,55555555555555,各位老大求救啊,我实在不知道哪里错了,我贴出来吧

.386
.model   flat,stdcall
option   casemap:none

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

.data?
lpLoadLibrary dd ?
lpGetProcAddress   dd ?
lpGetModuleHandle   dd ?
dwProcessID dd ?
dwThreadID dd ?
hProcess dd ?
lpRemoteCode dd ?

.const
szErrOpen db '无法打开远程线程!',0
szDesktopClass db 'Progman',0
szDesktopWindow db 'Program   Manager',0
szDllKernel db 'Kernel32.dll',0
szLoadLibrary db 'LoadLibraryA',0
szGetProcAddress   db 'GetProcAddress',0
szGetModuleHandle   db   'GetModuleHandleA',0

;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
.code
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >

include remotecode.Asm

start:
invoke GetModuleHandle,addr   szDllKernel
mov ebx,eax
invoke GetProcAddress,ebx,offset   szLoadLibrary
mov lpLoadLibrary,eax
invoke GetProcAddress,ebx,offset   szGetProcAddress
mov lpGetProcAddress,eax
invoke GetProcAddress,ebx,offset   szGetModuleHandle
mov lpGetModuleHandle,eax
;********************************************************************
;   查找文件管理器窗口并获取进程ID,然后打开进程
;********************************************************************
invoke FindWindow,addr   szDesktopClass,addr   szDesktopWindow
invoke GetWindowThreadProcessId,eax,offset   dwProcessID
mov dwThreadID,eax
invoke OpenProcess,PROCESS_CREATE_THREAD   or   PROCESS_VM_OPERATION   or   \
PROCESS_VM_WRITE,FALSE,dwProcessID
.if eax
mov hProcess,eax
;********************************************************************
;   在进程中分配空间并将执行代码拷贝过去,然后创建一个远程线程
;********************************************************************
invoke VirtualAllocEx,hProcess,NULL,REMOTE_CODE_LENGTH,MEM_COMMIT,PAGE_EXECUTE_READWRITE
.if eax
mov lpRemoteCode,eax
invoke WriteProcessMemory,hProcess,lpRemoteCode,\
offset   REMOTE_CODE_START,REMOTE_CODE_LENGTH,NULL
invoke WriteProcessMemory,hProcess,lpRemoteCode,\
offset   lpLoadLibrary,sizeof   dword   *   3,NULL
mov eax,lpRemoteCode
add eax,offset   _RemoteThread   -   offset   REMOTE_CODE_START
invoke CreateRemoteThread,hProcess,NULL,0,eax,0,0,NULL
invoke CloseHandle,eax
.endif
invoke CloseHandle,hProcess
.endif
invoke ExitProcess,NULL
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
end start

REMOTE_CODE_START equ   this   byte

_lpLoadLibrary dd ? ;导入函数地址表
_lpGetProcAddress dd ?
_lpGetModuleHandle dd ?

lpDialogBoxParam dd ?
lpEndDialog dd     ?
lpExitProcess dd     ?

szuser32           byte   "user32.dll",0
szDialogBoxParam   byte   "DialogBoxParam",0
szEndDialog   byte   "EndDialog",0
szExitProcess   byte   "ExitProcess",0

MainForm equ 1000

ProcDlgMain   proc   uses   ebx   edi   esi   hWnd,wMsg,wParam,lParam
call @F
@@:
pop ebx
sub ebx,offset   @B

mov   eax,wMsg
.if   eax==WM_CLOSE
push   0
        push   hWnd
        call   [ebx+lpEndDialog]
.else
mov   eax,FALSE
ret
.endif
mov   eax,TRUE
ret
ProcDlgMain   endp

_RemoteThread proc uses   ebx   edi   esi   lParam
local @hModule:dword
call @F
@@:
pop ebx
sub ebx,offset   @B
;********************************************************************
                mov   eax,offset   szuser32
                add   eax,ebx
                push   eax
                call   [ebx+_lpLoadLibrary]
                mov   @hModule,eax
                  
                mov   eax,offset   szDialogBoxParam
                add   eax,ebx
                push   eax                             
                push   @hModule
                call   [ebx+_lpGetProcAddress]
                mov   lpDialogBoxParam,eax
               
                mov   eax,offset   szEndDialog
                add   eax,ebx
                push   eax                 
                push   @hModule
                call   [ebx+_lpGetProcAddress]
                mov   lpEndDialog,eax
               
                mov   eax,offset   szExitProcess
                add   eax,ebx
                push   eax               
                push   @hModule
                call   [ebx+_lpGetProcAddress]
                mov   lpExitProcess,eax
                  
push   0
call   [ebx+_lpGetModuleHandle]
mov   @hModule,eax

push   0
mov   eax,offset   ProcDlgMain
add   eax,ebx
push   eax
push   0
push   MainForm
push   @hModule
call   [ebx+lpDialogBoxParam]
                ret
_RemoteThread endp

REMOTE_CODE_END equ   this   byte
REMOTE_CODE_LENGTH equ   offset   REMOTE_CODE_END   -   offset   REMOTE_CODE_START
2008-2-20 10:37
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
3
是不是你的防火墙不让你创建远程线程啊?(猜的)
2008-2-20 11:10
0
雪    币: 120
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我都没防火墙
2008-2-20 11:14
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
5
远程线程创建成功了,但线程的代码有错误.
push   MainForm
注入的程序里面有1000这个对话框资源吗?
2008-2-20 12:58
0
雪    币: 120
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我是用的RADASM,这个1000就是那个窗口的ID啊
2008-2-20 13:08
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
7
那个资源是自己的资源,explorer怎么用? 还有下面的,反正错误一堆
mov eax,offset szDialogBoxParam
        add eax,ebx
        push eax              
        push @hModule
        call [ebx+_lpGetProcAddress]                                     ;这个能不能获取成功
        mov lpDialogBoxParam,eax ;这个
告诉你个调试的方法:
先在invoke        CreateRemoteThread,hProcess,NULL,0,eax,0,0,NULL
这一行下断点
然后查看堆栈找出远程线程的地址,然后用od附加explorer,在该地址处下断点,运行程序,查看错误
2008-2-20 13:39
0
游客
登录 | 注册 方可回帖
返回
//