首页
社区
课程
招聘
[求助]关于内存注册机代码的问题
发表于: 2009-3-8 21:18 3387

[求助]关于内存注册机代码的问题

2009-3-8 21:18
3387
想写一个简单的内存注册机,
1 写入制定地址 cc
2 等待异常处理,
可是这个代码 不写 cc进去 也弹不出来 调用程序的界面,
跟踪进去好像停在
WaitForDebugEvent(DBEvent, INFINITE);
上了,
老大们帮忙看看 代码,
procedure TForm1.Button3Click(Sender: TObject);
var
  filename: string;
  StartupInfo: TStartupInfo;
  pi: TProcessInformation;
  WhileDoflag: bool;
  DBEvent: TDebugEvent;
  regs: Tcontext;
  dwState, oldpp, breakpoint, number: DWORD;
  dwoldbyte: byte;
  svalue: array[1..256] of char;
begin
  breakpoint := $1012475;
  fillchar(StartupInfo, sizeof(StartupInfo), #0);
  with StartupInfo do
  begin
    cb := Sizeof(TStartupInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_NORMAL;
  end;
  dwoldbyte := $CC;
  WhileDoflag := true;
  filename := 'D:\mycode\c.exe';
  if not CreateProcess(nil, Pchar(filename), nil, nil, false, (DEBUG_PROCESS), nil, nil, StartupInfo, pi) then
    exit;
  regs.ContextFlags := CONTEXT_FULL or CONTEXT_DEBUG_REGISTERS;
  while whiledoflag do
  begin
    WaitForDebugEvent(DBEvent, INFINITE);
    dwState := DBG_EXCEPTION_NOT_HANDLED;
    case DBEvent.dwDebugEventCode of
      CREATE_PROCESS_DEBUG_EVENT:
        begin
          dwstate := DBG_CONTINUE;
      //    ReadProcessMemory(pi.hProcess, Pointer(breakpoint), pointer(@svalue[1]), 255, number);
      //    WriteProcessMemory(pi.hProcess, Pointer(breakpoint), pointer(dwoldbyte), 1, number);
      //    WriteProcessMemory(pi.hProcess, Pointer(breakpoint+1), pointer(dwoldbyte), 1, number);
        end;
      EXIT_PROCESS_DEBUG_EVENT:
        begin
          whiledoflag := false;
        end;
      EXCEPTION_DEBUG_EVENT:
        begin
          if DBEvent.Exception.ExceptionRecord.ExceptionCode = EXCEPTION_BREAKPOINT then
          begin
            GetThreadContext(pi.hThread, Regs);
            if regs.Eip = $01012475 then
            begin
              regs.Eip := regs.eip - 1;

              SetThreadContext(pi.hThread, Regs);
            end;
          end;

          dwstate := DBG_CONTINUE;
        end;
    end;
    ContinuedebugEvent(pi.dwProcessId, pi.dwThreadId, dwState);
  end;
  closehandle(pi.hProcess);
  CloseHandle(pi.hThread);
end;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
能对付双进程不?如arm
2009-3-8 22:05
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
呵呵,
现在 什么都对付不了,有问题,找了半天了 没找到
请高手帮忙看看
2009-3-8 22:09
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
不太懂Delphi,不知道Delphi中指针怎么写?WaitForDebugEvent的第一个参数应该是个结构体指针。

不知道Delphi中“指针”的用法,有错莫怪。
2009-3-8 22:31
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
这个是我 按照加密解密第三版 497 页的程序 改写成delphi 代码的,不知道哪里理解的不对
修改内容    修改内容    修改内容
2009-3-8 22:56
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
怀疑是,有其他很厉害的异常没处理,导致程序假死,
研究中
2009-3-9 22:25
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
敲错了

呵呵
弄了2天,终于找到了
2009-3-11 11:13
0
游客
登录 | 注册 方可回帖
返回
//