首页
社区
课程
招聘
[求助]正在学习恢复SSDT的那个C++源码,遇到个小问题[已解决了]
发表于: 2008-5-21 23:55 10246

[求助]正在学习恢复SSDT的那个C++源码,遇到个小问题[已解决了]

2008-5-21 23:55
10246
我把代码都改成DELPHI了,在LoadDriver的时候遇见了一个问题
就是CreateFile的返回值不正确,不知道是什么原因,谢谢大家了!
CreateFile的返回值每次都是INVALID_HANDLE_VALUE对应的数值,所以就Fail了!

function LoadDriver(lpFileName: LPCTSTR): HWND;
var
  hDriver: HWND;
  hSCManager, hService: SC_HANDLE;
  arg: PChar;
begin
  hDriver := INVALID_HANDLE_VALUE;
  hSCManager := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);

  if Succeeded(hSCManager) then
  begin
    hService := CreateService(
      hSCManager,
      'RESSDT',
      'RESSDT',
      SERVICE_START,
      SERVICE_KERNEL_DRIVER,
      SERVICE_DEMAND_START,
      SERVICE_ERROR_IGNORE,
      lpFileName,
      nil,
      nil,
      nil,
      nil,
      nil
      );

    if ERROR_SERVICE_EXISTS = GetLastError then
      hService := OpenService(hSCManager, 'RESSDT', SERVICE_START);
    arg := nil;
    StartService(hService, 0, arg);
    hDriver := CreateFile(
      '\\\\.\\RESSDTDOS',
      GENERIC_READ or GENERIC_WRITE,
      0,
      nil,
      OPEN_EXISTING,
      0,
      0);
    CloseServiceHandle(hService);
    CloseServiceHandle(hSCManager);
  end;
  Result := hDriver;
end;

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人知道吗?55555555555
2008-5-22 10:57
0
雪    币: 235
活跃值: (23)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
用别的工具加载一下看看 比如kmdmanager 如果成功就是你的代码的问题了.........
2008-5-22 11:59
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

应该驱动没有问题,看来是代码的问题了!
上传的附件:
2008-5-22 12:06
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
SSDT.rar

这是全部的代码,谁能帮我看看,谢谢了!
上传的附件:
2008-5-22 12:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
LZ你的驱动SYS文件的编译是用哪个代码编译的?Anskya的那个SSDT UnHook For Delphi的驱动吗?
还是VC的?
2008-5-22 12:44
0
雪    币: 454
活跃值: (1673)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
先检测StartService有没有成功

hDriver := CreateFile(
'\\\\.\\RESSDTDOS',...

不了解Delphi,\的转义符号和C++一样???
试试
hDriver := CreateFile(
'\\.\RESSDTDOS',...
2008-5-22 13:01
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我自己改了一个,从网上下了一个,这两个都是DELPHI的,还有VC那个我也试了,好像都不行!
2008-5-22 13:43
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我按照你说的试了,还是不行,我下午再弄弄,看看结果,郁闷啊!
2008-5-22 13:44
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
StartService没有成功,不知道什么原因
2008-5-22 14:32
0
雪    币: 102
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
对额,delphi里不需要转义吧
2008-5-22 15:03
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我用kmdmanager的源码跟踪了一下,其中hSCManager与hService的返回值与我程序中的不一样,这是正常的吗?
2008-5-22 15:29
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
问题解决了,是我疏忽了,用错了一个函数,谢谢大家了!
2008-5-22 15:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
nibul
楼主能否留下个邮箱或者QQ之类的联系方式.我还有问题得向你请教.
2008-5-22 16:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
请问下你说的用错了哪一个函数的?
2008-5-22 17:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16

楼主请问能否帖下你修改好的那个代码.或者你说的用错一函数?我没找出来.谢谢
2008-5-22 19:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
void ReSSDT( IN HANDLE hDriver)
{
    HMODULE    hKernel;
    DWORD    dwKSDT;                // rva of KeServiceDescriptorTable
    DWORD    dwKiServiceTable;    // rva of KiServiceTable
    PMODULES    pModules=(PMODULES)&pModules;
    DWORD    dwNeededSize,rc;
    DWORD    dwKernelBase,dwServices=0;
    PCHAR    pKernelName;
    PDWORD    pService;
    PIMAGE_FILE_HEADER    pfh;
    PIMAGE_OPTIONAL_HEADER    poh;
    PIMAGE_SECTION_HEADER    psh;

   
        FARPROC NtQuerySystemInformationAddr=GetProcAddress(GetModuleHandle("ntdll.dll"),"NtQuerySystemInformation");
    // get system modules - ntoskrnl is always first there
    rc=((PFNNtQuerySystemInformation)NtQuerySystemInformationAddr)(11,pModules,4,&dwNeededSize);
    if (rc==STATUS_INFO_LENGTH_MISMATCH) {
        pModules=(MODULES *)GlobalAlloc(GPTR,dwNeededSize);
        rc=((PFNNtQuerySystemInformation)NtQuerySystemInformationAddr)(11,pModules,dwNeededSize,NULL);
    } else {
strange:
        return;
    }
    if (!NT_SUCCESS(rc)) goto strange;
   
    // imagebase
    dwKernelBase=(DWORD)pModules->smi.Base;
    // filename - it may be renamed in the boot.ini
    pKernelName=pModules->smi.ModuleNameOffset+pModules->smi.ImageName;
   
    // map ntoskrnl - hopefully it has relocs
    hKernel=LoadLibraryEx(pKernelName,0,DONT_RESOLVE_DLL_REFERENCES);
    if (!hKernel) {
        return;        
    }

    GlobalFree(pModules);

    // our own export walker is useless here - we have GetProcAddress :)   
    if (!(dwKSDT=(DWORD)GetProcAddress(hKernel,"KeServiceDescriptorTable"))) {
        return;
    }

    // get KeServiceDescriptorTable rva
    dwKSDT-=(DWORD)hKernel;   
    // find KiServiceTable
    if (!(dwKiServiceTable=FindKiServiceTable(hKernel,dwKSDT))) {
        return;
    }

    // let's dump KiServiceTable contents        
   
    // MAY FAIL!!!
    // should get right ServiceLimit here, but this is trivial in the kernel mode
    GetHeaders((PCHAR)hKernel,&pfh,&poh,&psh);

    for (pService=(PDWORD)((DWORD)hKernel+dwKiServiceTable);
            *pService-poh->ImageBase<poh->SizeOfImage;
            pService++,dwServices++)
        {
                ULONG ulAddr=*pService-poh->ImageBase+dwKernelBase;
                SetProc( hDriver,dwServices, &ulAddr );       
                //printf("%08X\n",ulAddr);   
        }

    FreeLibrary(hKernel);

}
请教下这部分如何翻译成DELPHI.
2008-5-22 19:43
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
QQ:41710031,我也在学习中,一起研究吧!
2008-5-22 20:27
0
雪    币: 22
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
如何解决应该贴出来 这才是正道。也是论坛存在的意义

不然下次遇到问题没有人会帮你
2008-5-22 20:52
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
是我疏忽了。
ExtractFilePath函数我给用成了ExtractFileDir
结果结果少个\
2008-5-24 14:40
0
雪    币: 220
活跃值: (701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
//ReSSDT(hDriver);
请教下这里的  ReSSDT这个是那里来的,代码里怎么没有?
2008-5-25 17:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
2008-5-27 15:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
望楼主看到回贴后速加我QQ9471886  找你有人商谈
2008-10-11 20:27
0
游客
登录 | 注册 方可回帖
返回
//