使用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?