使用OD反匯編修改NateOn,雖然很麻煩,最終還是搞定了,后來發現網上有段代碼,直接可以實現程序多開,測試了MSN、NateOn沒問題,代碼如下:

.386
.model?flat,?stdcall
option?casemap?:none

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

PATCH_POSITION??
equ??00543CEEh
PATCH_BYTES??equ??2

.data?
dbOldBytes??db??PATCH_BYTES?dup?(?)
stStartUp??STARTUPINFO????<?>
stProcInfo??PROCESS_INFORMATION??<?>

.const
dbPatch????db??3Dh,0B7h
dbPatched??db??3Dh,0B6h
szExecFilename??db??'C:\\Program?Files\\MSN?Messenger\\msnmsgr.exe',0
szErrExec??db??'無法裝載執行文件!',0
szErrVersion??db??'執行文件的版本不正確,無法修正!',0

.code
Start:
;********************************************************************
;?創建進程
;********************************************************************
????
invoke??GetStartupInfo,addr?stStartUp
????
invoke??CreateProcess,offset?szExecFilename,NULL,NULL,NULL,NULL,NORMAL_PRIORITY_CLASS?or?CREATE_SUSPENDED,NULL,NULL,offset?stStartUp,offset?stProcInfo
????
.if??eax
;********************************************************************
;?讀進程內存并驗證內容是否正確
;********************************************************************
??????
invoke??ReadProcessMemory,stProcInfo.hProcess,PATCH_POSITION,addr?dbOldBytes,PATCH_BYTES,NULL
??????
.if??eax
????????
mov??ax,word?ptr?dbOldBytes
????????
.if??ax?==??word?ptr?dbPatch
??????????
invoke??WriteProcessMemory,stProcInfo.hProcess,PATCH_POSITION,addr?dbPatched,PATCH_BYTES,NULL
??????????
invoke??ResumeThread,stProcInfo.hThread
????????
.else
??????????invoke??
TerminateProcess,stProcInfo.hProcess,-1
??????????
invoke??MessageBox,NULL,addr?szErrVersion,NULL,MB_OK?or?MB_ICONSTOP
????????
.endif
??????.endif
??????invoke??
CloseHandle,stProcInfo.hProcess
??????
invoke??CloseHandle,stProcInfo.hThread
????
.else
??????invoke??
MessageBox,NULL,addr?szErrExec,NULL,MB_OK?or?MB_ICONSTOP
????
.endif
invoke??
ExitProcess,NULL
end??Start?