看流星社区

 找回密码
 注册账号
查看: 2787|回复: 0

[原创]以前玩破解时写的内存破解补丁程序,可能对大家注入游戏代码有点用吧。

[复制链接]

该用户从未签到

发表于 2011-3-21 09:23:43 | 显示全部楼层 |阅读模式
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .486               ; create 32 bit code
  .model flat, stdcall     ; 32 bit memory model
  option casemap :none     ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  include \masm32\include\windows.inc
  include \masm32\include\user32.inc
  include \masm32\include\kernel32.inc
  includelib \masm32\lib\user32.lib
  includelib \masm32\lib\kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;EQU数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ORIGN_CODE EQU 347DH
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
  szMsgTitle db '破解补丁',0     ;标题
  szFileName db   "SendQQ50.exe",0       ;目录文件名
  stStartUp STARTUPINFO <?>
  psInfo   PROCESS_INFORMATION <?>
  BytesToWrite db 0EBH,34H       ;要写的数据
  lChanges dd 2h               ;需要写的字节
  lVOffset dd     04085C2H             ;需要修改的进程虚拟地址
  szTemp   db         10 DUP(?) ;临时缓存区
  AppName     db   "风速QQ聊天室群发王2006--50QQ",0;目标程序窗口标题
;---------------------------------------------------------------------
  szLoadError   db '无法补丁加载',0
  szOK         db '补丁完成',0
  szbyteError   db '文件不匹配',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;创建目标进程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
invoke GetStartupInfo,ADDR stStartUp
invoke CreateProcess,ADDR szFileName,NULL,NULL,NULL,FALSE,0,0,0,ADDR stStartUp,ADDR psInfo
      .IF   EAX==0       ;如果创建目标进程失败
          invoke lstrcat,ADDR szFileName,ADDR szLoadError
          mov ebx,offset szFileName
          jmp error
      .ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;循环,直至找到正角的窗口名字
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Serach:
    invoke FindWindow,NULL,ADDR AppName
    test eax,eax
    jz Serach
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;读取地址的2个字节,以校验文件是否匹配
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    invoke ReadProcessMemory,psInfo.hProcess,lVOffset,ADDR szTemp,2,0
      .IF WORD PTR[szTemp]!=ORIGN_CODE
          mov ebx,offset szbyteError
          jmp error
      .ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;将修改字节写进地址里去
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
invoke WriteProcessMemory,psInfo.hProcess,lVOffset,ADDR BytesToWrite,lChanges,ADDR szTemp
  .IF       eax==FALSE
            mov ebx,offset szbyteError
            jmp error
  .ENDIF
  invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;退出
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
error:
  invoke MessageBox,NULL,ebx,offset szMsgTitle,MB_OK+MB_ICONINFORMATION
  invoke ExitProcess,NULL
end start
编译后才3.5K,效果还不错。比他语言写的,实在是精简
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-15 13:36

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表