首页
社区
课程
招聘
[原创]MSN 8.1版本多开工具程序实现代码和原理!
发表于: 2007-3-24 15:17 7259

[原创]MSN 8.1版本多开工具程序实现代码和原理!

2007-3-24 15:17
7259

刚写了一篇QQ游戏QQGame2006Patch3版本多开.分析和补丁!
http://bbs.pediy.com/showthread.php?s=&threadid=41546
累呀!这里我就不写MSN的分析步骤了,主要发一下程序的实现的代码!
实现原理  开始调试进入---->修改核心代码---->然后恢复线程
本代码为DELPHI代码,适用MSN版本为8.1 (Build 8.1.0178.00)
下面是主要的实现代码!写好的程序请看附件!

procedure TFrmMain.spSkinButton1Click(Sender: TObject);
const
  OldData : array[0..1] of byte = ($3D,$B7);
  NewData : array[0..1] of byte = ($3D,$B6);
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  BytesRead : DWORD;
  TmpData : array[0..1] of Byte;
  FilePath:String;
begin
  FilePath := SpSkinEdit1.Text;
  ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
  StartInfo.cb := SizeOf(TStartupInfo);
  if not CreateProcess(nil,Pchar(FilePath), nil, nil, False, Create_Suspended, nil, nil, StartInfo, ProcInfo) then Exit;
  ReadProcessMemory(ProcInfo.hProcess,Pointer($543CEE),@TmpData,2,BytesRead);
  if (TmpData[0] = OldData[0]) and (TmpData[1] = OldData[1]) then
  begin
  WriteProcessMemory(ProcInfo.hProcess, Pointer($543CEE), @NewData, 2, BytesRead);
  end;
  ResumeThread(ProcInfo.hThread);
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
end;


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 333
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
.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        '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
2007-3-24 16:39
0
游客
登录 | 注册 方可回帖
返回
//