X-FREE的loader程序

这篇博客介绍了一种使用DEBUG_API调试X-FREE loader程序的方法,通过设置断点,修改内存中的指令和寄存器状态来实现对目标进程的调试。在调试过程中,当遇到退出事件或异常事件时,程序会进行相应的处理,确保调试过程的正常进行。
算法对我来说挺复杂,没那么多时间研究,等有空再说
写了个loader程序,顺便了解一下debug api,主要思路是在地址$42B425处,置ZF为1
代码是随手写的缺少很多检测
  1. program CPPIDE_LOADER;
  2. uses
  3.   Windows;
  4. {$R *.res}
  5. const
  6.   BP = $42B425;
  7.   int3 :DWORD = $CC;
  8. var
  9.   startinfo :STARTUPINFO;
  10.   pi:PROCESS_INFORMATION;
  11.   DBEvent:DEBUG_EVENT;
  12.   org_code :Byte;
  13.   num: Cardinal;
  14.   ctext : CONTEXT;
  15.   dwNewProt, dwOldProt:DWORD;
  16. begin
  17.   GetStartupInfo(startinfo);
  18.   if not CreateProcess('CPPIDE.exe',nil,nil,nil,False,DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS,nil,nil,startinfo,pi) then //调试模式加载进程
  19.   begin
  20.     MessageBox(0,'不能加载CPPIDE.exe','错误',0);
  21.     Halt;
  22.   end;
  23.   while WaitForDebugEvent(DBEvent,INFINITE) do   //等待调试事件
  24.   begin           
  25.     if DBEvent.dwDebugEventCode = EXIT_PROCESS_DEBUG_EVENT THEN       //进程退出
  26.     begin
  27.       //MessageBox(0,'The debuggee exits','Win32 Debug Example no.1',mb_ok + MB_ICONINFORMATION);
  28.       ContinueDebugEvent(DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_EXCEPTION_NOT_HANDLED);
  29.       CloseHandle(pi.hProcess);
  30.       CloseHandle(pi.hThread);
  31.       Halt;
  32.     end
  33.     else if DBEvent.dwDebugEventCode = exception_debug_event then
  34.     begin
  35.       if DBEvent.Exception.ExceptionRecord.ExceptionCode =  exception_breakpoint then
  36.       begin
  37.         if Integer(DBEvent.Exception.ExceptionRecord.ExceptionAddress) <> BP then       //设置断点
  38.         begin
  39.          VirtualProtectEx(pi.hProcess,Pointer(BP),1, PAGE_EXECUTE_READWRITE, dwOldProt);
  40.          ReadProcessMemory(pi.hProcess,Pointer(BP),@org_code,1,num);
  41.          WriteProcessMemory(pi.hProcess,Pointer(BP),@int3,1,num);
  42.          VirtualProtectEx(pi.hProcess, Pointer(BP), 1, dwOldProt, dwNewProt);
  43.          //MessageBox(0,'',PAnsiChar(string(rtn)),0)
  44.         end
  45.         else
  46.         begin                                                   //$42B425处中断,修改ZF的值为1
  47.           WriteProcessMemory(pi.hProcess,Pointer(BP),@org_code,1,num);
  48.           ctext.ContextFlags := CONTEXT_FULL;
  49.           GetThreadContext(pi.hThread,ctext);
  50.           ctext.EFlags := ctext.EFlags or 64;                  //ZF置1(与二进制1000000或)
  51.           ctext.Eip := ctext.Eip - 1;                          //eip回到$42B425
  52.           SetThreadContext(pi.hThread,ctext);
  53.         end;
  54.         ContinueDebugEvent(DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_CONTINUE);       //继续运行
  55.         Continue;
  56.       end;
  57.     end;
  58.     ContinueDebugEvent(DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_EXCEPTION_NOT_HANDLED);       //继续运行
  59.   end;
  60. end.

瑞星对Loader_CppIDE.exe报错,NOD32对CppIDE.exe报错,金山毒霸2011,360杀毒,卡巴均能通过。 更新说明: 1.去除原英文版中附带的病毒。 2.集合了破解补丁Loader_CppIDE.exe和汉化补丁,重新打包。 3.补充上一版本未汉化的地方,修正汉化不合理的地方。 4.设置Loader_CppIDE.exe为主程序,默认以Loader_CppIDE.exe运行。 5.默认简体中文。 6.C-Free 5 的帮助和库函数参考由英文改为中文。 7.在桌面自动创建Loader_CppIDE.exe的快捷方式。 8.修改了其他的一些细节,自行体会。 C-Free是一款支持多种编译器的专业化C/C++集成开发环境(IDE)。利用本软件,使用者可以轻松地编辑、编译、连接、运行、调试C/C++程序。C-Free 4 较之前的版本有巨大改进,主要有以下特性:(主窗口) 1. 支持多编译器,可以配置添加其他编译器;(0) 目前支持的编译器类型: (1) MinGW 2.95/3.x/4.x/5.0 (2) Cygwin (3) Borland C++ Compiler (4) Microsoft C++ Compiler (5) Open Watcom C/C++ (6) Digital Mars C/C++ (7) Ch Interpreter 2. 增强的C/C++语法加亮器,(可加亮函数名,类型名,常量名等);(1) 3. 增强的智能输入功能;(2) 3. 可添加语言加亮器,支持其他编程语言; 4. 可添加工程类型,可定制其他的工程向导;(3) 5. 完善的代码定位功能(查找声明、实现和引用);(4) 7. 代码完成功能和函数参数提示功能;(5)(6) 8. 能够列出代码文件中包含的所有符号(函数、类/结构、变量等);(7) 9. 大量可定制的功能 可定制快捷键 可定制外部工具 可定制帮助(可支持Windows帮助、Html帮助和在线帮助); 10. 彩色、带语法加亮打印功能; 11. 在调试时显示控制台窗口;(8) 12. 工程转化功能,可将其他类型的工程转化为C-Free格式的工程,并在C-Free中打开。 CJY 2010年5月7日
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值