QQ的暂停的主线程,接着往QQ进程的内存写入代码,修改Ntdll.NtTestAlert的代码跳让程序跳到自己的 代码处执行,在执行的过程中恢复Ntdll.NtTestAlert处被改了的代码,同时加载Coralqq.dll.
在win9x下,coralqq.exe先创建QQ的进程,同时也就创建了QQ的暂停的主线程,接着往QQ.exe的内存 写数据,改写QQ.exe的oep从而达到改变程序流程的目的,让其先执行加入了的代码,加载Coralqq.dll, 加载完后再跳到原来的QQ.exe的oep继续执行. 其实在win2000/xp下面完全可以用远程线程的方法来实现加载dll文件,我后来自己编程实现了外挂 这一步. 也许有读者读完这编文章后会问:"加载了coralqq.dll又有什么用?它是怎样显IP的?" 其实,要显IP当然要修改QQ的内存中的代码,而修改内存代码这一步是在加载coralqq.dll的时候由 coralqq.dll完成的.也就是说,在执行LoadLibrary的过程中系统会执行corall.dll的 LibMain ,修改 的过程就在LibMain中完成了!而说到显IP的原理,抱歉,不在我们这编文章的讨论范围之内,我们只是讨论 外挂中"挂"这一步.
下面是我写的代码,可以做出一个顶替Coralqq.exe的程序,但原理上和Coralqq.exe有一点点不同
.586 .model flat, stdcall option casemap :none ; case sensitive
include windows.inc include kernel32.inc includelib kernel32.lib
.data qq db ".\QQ.exe",0 ikeyname db "qq",0 isecname db "main",0 szBuffer dw 50 dup(0)
dllname db ".\CoralQQ.dll",0 szkernel32 db "Kernel32.dll",0 dllin dd 0 szloadlibrary db "LoadLibraryA",0 oaddr dd 0 wriaddr dd 0 ininame db ".\CoralQQ.ini",0
.data? align dword con CONTEXT <> align dword con2 CONTEXT <>
stStartUp STARTUPINFO > stProcInfo PROCESS_INFORMATION >
.code start: main proc local wrisize:dword ;用来存放要写入的代码的大小 local num:dword local oldpro:dword local lastwri:dword local wribase:dword ;用来存放写入代码的基址 invoke GetPrivateProfileString,offset isecname,offset ikeyname,\ offset szloadlibrary,offset szBuffer,\ sizeof szBuffer,offset ininame ;从Coralqq.ini中获取QQ程序的路径 invoke GetModuleHandle,offset szkernel32 invoke GetProcAddress,eax,offset szloadlibrary mov dllin,eax
invoke GetStartupInfo,addr stStartUp invoke CreateProcess,NULL,offset szBuffer,NULL,NULL,FALSE,\ CREATE_SUSPENDED,NULL,NULL,addr stStartUp,addr stProcInfo ;创建QQ进程 cmp eax,0 jz exit invoke GetVersion test eax,080000000h ;判断操作系统类型 jnz win9x invoke VirtualAllocEx,stProcInfo.hProcess,NULL,01000h,MEM_COMMIT,\ PAGE_EXECUTE_READWRITE ;在QQ内存中分配空间 mov oaddr,eax invoke WriteProcessMemory,stProcInfo.hProcess,oaddr,offset dllname,\ sizeof dllname,addr num ;写入数据 invoke CreateRemoteThread,stProcInfo.hProcess,NULL,0,dllin,oaddr,0,\ addr num ;创建远程线程 invoke CloseHandle,eax invoke ResumeThread,stProcInfo.hThread ;让QQ继续运行 invoke ExitProcess,0 ret
win9x: mov wribase,oepwrite
上一篇:QQ新版新功能——搜索篇
下一篇:盛大IM产品圈圈很快发布 直指QQ和MSN
|