20楼#
发布于:2002-06-27 20:50
我发现4K的条速度还是不快,可是比以前快了!
你是用VC写的吗?我发现如果不用汇编级调试是不可能通过的!用 VC不适合写这东西!它是用寄存器变量的,异常处理修改地址内容是不行的!非得找出变量使用的寄存器,修改掉才行!不然就进入死循环了 ------------------------------------------------------------------------------------------ 呵呵,你希望的块是多快?我搜2G空间几秒而已。 你是搜本进程空间的话,可先分配一个Buffer,memcpy4K的内容后在buffer里找你要的东西。copy失败就下一个4K... VC写这东西没什么不好呀. |
|
21楼#
发布于:2002-06-27 21:08
我搜2G空间几秒而已
------------------------------------------------------------------------ 夸张了一点,呵呵。这么快是因为没做额外的事情 |
|
22楼#
发布于:2002-06-27 21:38
啊!我知道了你没有用异常处理呀!!写病毒我看行不通吧!!如果用API ReadProcessMemory也行,金山游侠就用这个!!
用异常可慢了!!一般是几M/秒吧!!可能是偶的机子慢了点吧!! :D :D |
|
|
23楼#
发布于:2002-06-28 08:29
我知道了你没有用异常处理呀
------------------------------------------------------------------------------ 怎么可能呀,当然用了。API倒是没用 |
|
24楼#
发布于:2002-06-28 20:01
下面的例子是直接搜索KERNEL32。DLL的地址,用SEH不过对于汇编来说无所谓,只要2秒即可。
.586 .model flat, stdcall option casemap :none ; case sensitive include \\masm32\\include\\windows.inc include \\masm32\\include\\kernel32.inc include \\masm32\\include\\user32.inc includelib \\masm32\\lib\\kernel32.lib includelib \\masm32\\lib\\user32.lib ;---------------------------------下面是上面用到的宏,我的mac.h比较长,就不贴了----- ddd MACRO Text ;define data in .data section local name ;This and other can be used as: ddd(\"My god!\") .data ;isn\'t cool? name db Text,0 .code EXITM <addr name> ENDM CTEXT MACRO y:VARARG ;This is a good macro LOCAL sym CONST segment IFIDNI <y>,<> sym db 0 ELSE sym db y,0 ENDIF CONST ends EXITM <OFFSET sym> ENDM m2m MACRO M1, M2 ;mov is too boring sometimes! push M2 pop M1 ENDM ;;-------------- per_xHandler proto C :DWORD,:DWORD,:DWORD,:DWORD .data sztit db \"Search Kernel Address\",0 AddrKernel32 dd ? aKernel32 db \'Kernel32.dll的地址是:%x\',0 text db 100 dup(?) ;;----------------------------------------- .CODE _Start: ;-------------------------- ;install xhnadler ;----------------------------------------- assume fs:nothing push offset per_xHandler push fs:[0] mov fs:[0],esp mov edi,7fff0000h Next: add edi,10000h cmp edi,0ffff0000h jnb Exit assume edi:ptr IMAGE_DOS_HEADER cmp [edi].e_magic,IMAGE_DOS_SIGNATURE jnz Next mov esi,edi assume esi:ptr IMAGE_DOS_HEADER add esi, [esi].e_lfanew assume esi:ptr IMAGE_NT_HEADERS cmp [esi].Signature,IMAGE_NT_SIGNATURE jnz Next add esi,4 ;esi指向IMAGE_FILEHEADER assume esi:ptr IMAGE_FILE_HEADER test [esi].Characteristics,2000h jz Next ;不是DLL文件 add esi,14h add esi,60h ;ESI指向EXPORT TABLE mov esi,dword ptr[esi] ;ESI指向IMAGE-EXPORT-DIRECTORY add esi,edi add esi,4*3;指向DLL名字的指针 mov esi,dword ptr[esi] add esi,edi cmp dword ptr[esi],4e52454bh jnz Next mov AddrKernel32,edi invoke wsprintf,addr text,addr aKernel32,AddrKernel32 invoke MessageBoxA,0,addr text,addr sztit,MB_OK ;-------------------------- ;uninstall xhnadler ;----------------------------------------- Exit: pop fs:[0] add esp,4 invoke ExitProcess,0 ;----------------------------------------- ;异常处理句柄1,处理除法异常错误 per_xHandler PROC C pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD pushad MOV ESI,pExcept MOV EDI,pContext ASSUME ESI:PTR EXCEPTION_RECORD ASSUME EDI:PTR CONTEXT TEST [ESI].ExceptionFlags,1 JNZ @cantdo1 TEST [ESI].ExceptionFlags,6 JNZ @unwind1 CMP [ESI].ExceptionCode,0c0000005H JNZ @cantdo1 add [edi].regEdi,10000h POPAD MOV EAX, ExceptionContinueExecution RET @unwind1: invoke MessageBox,0,CTEXT(\"state: unwinding in xhandler1...\"),addr sztit,0 @cantdo1: POPAD MOV EAX,ExceptionContinueSearch RET per_xHandler ENDP end _Start |
|
|
25楼#
发布于:2002-07-01 20:03
我知道了你没有用异常处理呀 用了异常还COPY赶啥,直接搜索不是来得快点吗? |
|
|
26楼#
发布于:2002-07-01 20:09
下面的例子是直接搜索KERNEL32。DLL的地址,用SEH不过对于汇编来说无所谓,只要2秒即可。 非常感谢你的回复!!! |
|
|
上一页
下一页