1. 公告

    • 黑夜给了我黑色的眼睛去寻找光明,阳光给了我明亮的眼睛我却是去寻找黑暗,所以我只有在夜里才出现真实的自己。(菩提本不树,明镜亦非台,本来无一物,何处染尘埃。)
  2. 写作时间

    << 2008-12 >>

    Sun

    Mon

    Tue

    Wed

    Thu

    Fri

    Sat

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

  3. 原创下载

  4. 最新文章

  5. 最新评论

  6. 文章归档

  7. Statistics

    • 文章总数:194
    • 评论总数:67
    • 引用总数:0
    • 浏览总数:240437
    • 留言总数:0
    • 当前样式:4u-HK
    • 当前语言:zh-CN
  8. 友情链接

  9. 反向链接

给破解后的S-Demo做补丁[Delphi]

    关键字:

首先使用spy++获取需要打补丁程序的句柄。

program s_Demo;

uses
  Windows,TlHelp32;

const
  OldData : array[0..1] of byte = ($74,$5B);  //Je判断为真跳转
  NewData : array[0..1] of byte = ($EB,$5B);  //JMP强行跳转

var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  ProcessHndle,PID: HWND;
  BytesRead : DWORD;
  TmpData : array[0..1] of Byte;
  FilePath:String;

function FindPath(PID:longword):String;
var
  ModuleSnapshot: THandle;
  Module32: TModuleEntry32;
begin
  Result:='';
  ModuleSnapshot := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,PID);
  if ModuleSnapshot>0 then
  begin
    Module32.dwSize := sizeof(Module32);
    Module32First(ModuleSnapshot, Module32);
    Result:=Module32.szExePath;
  end;
end;

begin
  GetWindowThreadProcessId(FindWindow('#32770','信息'), @PID);  //通过句柄获取PID
  if PID<=0 then Exit;  //如果为空,即程序没有运行则不再执行
  FilePath:=FindPath(PID); //获取程序路径
  if FilePath='' then Exit;  //为空则退出
  ProcessHndle:=OpenProcess(PROCESS_TERMINATE,FALSE,PID);
  if ProcessHndle<= 0 then Exit;
  TerminateProcess(ProcessHndle, 0);
  CloseHandle(ProcessHndle);


  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($401FF9),@TmpData,2,BytesRead);  //内存当中的地址
  if (TmpData[0] = OldData[0]) and (TmpData[1] = OldData[1]) then
  begin
    if WriteProcessMemory(ProcInfo.hProcess, Pointer($401FF9), @NewData, 2, BytesRead) then  //进行打补丁
      MessageBox(0,'恭喜补丁成功',nil,0) else MessageBox(0,'不好意思补丁失败',nil,0);
  end else
  begin
    MessageBox(0,'不好意思补丁失败',nil,0)
  end;
  ResumeThread(ProcInfo.hThread);
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
end.

您或许还对以下的内容感兴趣:

如果您拥有一个BLOG,如果您的BLOG的PV/IP/PR还算不错,如果您打算用您所拥有的BLOG来赚钱,那么我来告诉您几个赚钱的方法:

1、透过 Google AdSense 使您的BLOG产生收益

2、您还可以通过申请TextLinkAds投放者来直接出售链接位从而产生收入。