想用C++写一个Filemon

wf520pb 2008-04-25 10:17:31
直接用DriverStudio里的DriverWorks新建了一个工作区,工作区里面会自动产生一个驱动项目和一个测试驱动的app项目。
我修改驱动项目里的内容,我新建的是Kernel的工程。里面有两个类,CMyDevice和CMyDriver类
分别继承自KDevice和KDriver类。
然后我重新写了两个类均继承自CMyDevice(CCDODevice和CFSFDODevice)。
在CMyDriver类的DriverEntry函数里本身有一个CMyDevice* pDevice = new ...CMyDevice();
我把他换成CMyDevice* pDevice = new ...CCDODevice();
然后再重写CCDODevice::Create()函数,在里面去创建一个设备对象,IoAttachDeviceToDeviceStack到C:盘上面去,然而这个时候我用CMyDevice* pDevice = new ...CFSFDODevice();时就出错了,会导致蓝屏,我用DriverWorksBench远程调试没有到下一行。在new里面死的,因为他弹到汇编里面去了,我又看不懂汇编,所以来求助了,麻烦帮我看看错误在哪里把?

我把代码传上来,我本是想用C++写一个Filemon。

http://www.fs2you.com/files/b4e7dd94-12d2-11dd-8f4d-0014221b798a/

麻烦有时间的朋友帮忙看看
...全文
43 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
光盘: ├─chap01....................................第1章 PE文件格式的深入分析 │ └─PEDump.zip ;Matt Pietrek的PEDUMP程序 │ ├─chap02....................................第2章 PE分析工具编 │ ├─PEInfo_example ;PE分析工具样例 │ └─Test ;TestSH.exe,这个程序的OptionalHeader的大小为0xD0 │ ├─chap03....................................第3章 Win32 调试API │ ├─内存补丁 │ │ ├─进程间内存共享机制应用.txt │ │ ├─使用Dr X调试寄存器框架程序.txt │ │ └─bpm example code ;yoda的实例,演示利用Ntdll.ntcontinue作为跳板在入口点处中断 │ └─脱壳机 │ ├─Unlock.asm ;脱壳机的源程序 │ ├─unlock.exe ;己编译好的脱壳机程序 │ └─locked.exe ;被tElock 0.98保护的记事本程序 │ ├─chap04....................................第4章 Windows下的异常处理 │ ├─sehRelease │ │ ├─sehdef.inc ;完整的异常代码列表 │ │ ├─s1.asm ;例子1.演示Final型异常处理及参数获取 │ │ ├─s2.asm ;例子2.演示Per_Thread型异常处理 │ │ ├─s3.asm ;例子3.演示Per_Thread型异常处理的嵌套处理 │ │ └─S4.ASM ;例子4.演示异常处理的堆栈展开 │ ├─ring ;例子5.演示Windows9x进特权级Ring0 │ ├─singlestep ;例子6.演示SEH实现单步自跟踪 │ └─veh ;例子7.VEH代码演示 │ ├─chap05....................................第5章 反跟踪技术 │ ├─Anti-Debug ;5.1 反调试技术 │ │ ├─MeltICE ;句柄检测 │ │ ├─Back Door ;SoftICE后门指令 │ │ ├─int 68 ;int68子类型 │ │ ├─ICECream ;ICECream子类型 │ │ ├─NticeService ;判断NTICE服务是否运行 │ │ ├─int1 ;INT 1 检测 │ │ ├─UnhandledExceptionFilter ;利用UnhandledExceptionFilter检测 │ │ └─int41 ;INT 41子类型 │ ├─DetectBreakpoint ;5.2 断点检测技术 │ │ ├─SEHbpx ;利用SEH防范BPX断点 │ │ ├─SEHbpm ;利用SEH防范BPM断点 │ │ └─IsBPX ;检测函数首地址 │ ├─Anti-Loader ;5.3 反加载技术 │ │ ├─TEB ;利用TEB检测 │ │ ├─IsDebuggerPresent ;利用IsDebuggerPresent函数检测 │ │ └─CheckParentProc ;检查父进程 │ ├─Anti-Monitor ;5.4 反监视技术 │ │ ├─AntiProcDump ;窗口方法检测ProcDump │ │ └─Anti-Filemon&Regmon ;句柄检测Filemon和Regmon │ ├─Anti-Disassemble ;5.5 反静态分析技术 │ │ ├─pushre ;扰乱汇编代码 │ │ ├─SMC ;SMC技术实现 │ │ └─花指令 ;花指令样例 │ ├─CRC ;5.7 文件完整性校验 │ │ ├─磁盘文件校验 │ │ │ ├─add2crc32 ;计算文件CRC32的工具,可以将结果进文件里 │ │ │ └─crc32 ;待校验的程序 │ │ ├─内存映像校验 │ │ │ ├─memcrc32 │ │ │ │ └─src │ │ │ │ ├─add2memcrc32 ;计算PE文件代码区块CRC32的工具,可以将结果进文件里 │ │ │ │ └─memcrc32 ;需要校验内存代码数据的程序 │ │ │ └─Detect Breakpoint ;校验内存中的片段代码的样例 │ │ └─CRC原理 ;arbin翻译的《CRC原理及其逆向分析方法》 │ └─codeEncrypt ;5.8 代码与数据结合技术 │ ├─codeEncrypt ;代码与数据结合的实例 │ └─tools ;Encrypter.exe工具及其源码 │ ├─Chap06....................................第6章 加壳软件编 │ ├─prot ;本章实例加壳工具prot v0.46及其源码 │ ├─aPLib引擎 ;aPLib压缩引擎 │ └─TestUseVC ;Spring的加壳程序综合运用的实例 │ ├─Chap07....................................第7章 如何让壳与程序融为一体 │ ├─7.1 欺骗检查壳的工具 │ │ ├─aspack212压缩 │ │ ├─aspack212压缩后更改入口代码 │ │ ├─aspack压缩后再修改过的壳加壳 │ │ ├─aspack压缩后再自己加壳 │ │ ├─实例(没加壳) │ │ ├─自己加的壳 │ │ ├─自己的加壳工具 │ │ │ ├─原版壳的程序 │ │ │ └─更改后的壳的程序程序 │ │ └─tools │ │ ├─fi ;测试用的FileInfo工具 │ │ └─aspack212 ;测试用的Aspack加壳工具 │ ├─7.2判断自己是否给脱壳 │ │ ├─7.2.1 判断文件尺寸 │ │ ├─7.2.4 使用存储映像文件检查标记 │ │ ├─7.2.2 使用同步对象检查标记 │ │ ├─7.2.3 使用原子(ATOM)检查标记 │ │ ├─7.2.5 使用线程优先权检查标记 │ │ ├─7.2.6 使用外部文件检查标记 │ │ └─7.2.8 注入一个定时器 │ └─7.3 使用SDK把程序和壳溶为一体 │ ├─test ;实例 │ └─sdk壳的程序 │ ├─chap08....................................第8章 Visual Basic 6 逆向工程 │ ├─example1 ;演示虚函数表的概念 │ ├─example2 ;如何处理事件的虚函数表 │ ├─example3 ;利用SEH反加载 │ ├─example4 ;演示如何更改程序结构 │ ├─example5 ;本例简单说明了如何直接修改vb6程序的控件属性值 │ ├─example6 ;一个VB6 P-code Crackme分析实例 │ └─example7 ;VB“自锁”功能实现的实例 │ ├─附录A.....................................附录A 在Visual C++中使用内联汇编 │ ├─InlineASM ;内联汇编实例 │ └─SeparateASM ;VC 中调用 MASM 独立汇编实例 │ └─附录B.....................................附录B 在Visual Basic中使用汇编 ├─TweakVB ;TweakVB 控件(http://www.tweakvb.com/) ├─VBInlineAsm ;VBInlineAsm控件 └─Compile Controller ;Compile Controller控件 ;(http://www.fawcette.com/archives/premier/mgznarch/vbpj/1999/11nov99/jc1199/jc1199.asp)
简介:SourceFormatX 源代码美化工具是一款专业的 多语言 源码美化工具, 源代码格式化工具, 源代码缩进排版工具 和企业级源代码风格统一化解决方案。其可以按照预设或自定义的源码风格全自动、大批量、精细地美化 C, C++, Java, C#, D Language, Pascal (Delphi), Visual Basic, VB.NET, VBScript, JavaScript (JScript), PHP, ASP, JSP, HTML, XML, HTML Components, CORBA IDL, 80x86 ASM, 8051 ASM 汇编等编程语言源代码。 拥有 SourceFormatX, 您可以在数秒种之内将任何源代码美化和转换成您最喜爱的代码风格或您开发团队的标准编码规范! 说明:终于找到 SourceFormatX 2.56 的注册破解版了。源代码美化工具SourceformatX破解版,一个传说中不可能被破解的东东,现在完美破解了!!不管你是程序开发者,还是网页设计者,SF都能把你的凌乱代码规矩排列,值得收藏!! 附加: 【软件名称】: SourceFormatX 2.56 【使用工具】: Fi,Ollydbg,ImportREC 【破解平台】: Win2K Server 【软件简介】: SourceFormatX 是一个强大的源代码自动格式化,缩进,排版,美化工具。 它可以格式化 C, C++、Java、C#、Object Pascal、PHP、ASP、JSP、VB、 VB.NET、VBScript、JavaScript 和 HTML Components源代码。 它还可以将源代码输出为语法高亮显示的 HTML 或 RTF 文件。 【软件大小】: 731 KB 【编语言】: Borland Delphi 5 【加壳方式】: PECompact 1.68 - 1.84 【保护方式】: 文件验证(License.dat)。 破解行为会激活恶意代码, 主要是删注册表的HKEY_CLASSES_ROOT整个分支。 删注册表是用RegDeleteValueA 。 作者把关键代码做成一个DLL, 将DLL文件的16进制码加密后生成一个注册文件, 密匙产生函数的参数是主程序加壳后的HASH码和机器信息。 已注册用户验证注册码时,先验证有没有文件, 没有文件则自然受限制的功能无法使用。 如果有注册文件,解密后即生成一个小临时文件。 如果主程序被脱壳或者被修改(爆破),自然Hash值密码不符, 解密出来的肯定都是垃圾码,没有一点用处。 只有没有被修改的主程序才能正确地解码, 而且当然只有解密正确的文件才是一个真正的DLL文件, 才能被GetProcAddress函数找到欲调用的关键函数地址。 这样只有注册用户能正常使用了。 【破解建议】: 安装 VMware ,否则, 作者很生气, 后果很严重 :) 【软件下载】: http://wh.onlinedown.net:88/down/sourceformatx256cn.exe /***********************************脱壳**************************************/ ; 跟踪到00625556处 00625556 C2 0400 retn 4 ; 此处就是OEP,记得脱壳后重建输入表,我用的是ImportREC 00573258 55 push ebp /********************************去掉OD检查***********************************/ ; 调用检查OD的函数 0057330F E8 002EFEFF call SourceFo.00556114 ... ... ; 将这里的 机器码 74(jz) 修改为 EB(jmp) 0055614C 74 23 jz short upSource.00556171 ; 调用检查OD的函数 005774EA E8 CDB4FFFF call SourceFo.005729BC ; 将这里的 机器码 74(jz) 修改为 EB(jmp) 005729F2 74 42 je short SourceFo.00572A36 ; 将这里的 机器码 74(jz) 修改为 EB(jmp) 0055F076 74 42 je short SourceFo.0055F0BA /*****************************去掉文件修改检查********************************/ ; 检查执行程序是否被修改 005774F4 E8 97B1FFFF call SourceFo.00572690 ; 将这里的 机器码 74(jz) 修改为 EB(jmp) 005723AC 74 55 je short SourceFo.00572403 ; 0044EA65 E8 A69BFFFF call SourceFo.00448610 0044861D 74 17 je short SourceFo.00448636 /*******************************去掉DeDe检查**********************************/ ; 将这里的 机器码 74(jz) 修改为 EB(jmp) 005727F4 74 28 je short SourceFo.0057281E 0055641C 74 28 je short SourceFo.00556446 /*****************************去掉Filemon检查*********************************/ ; 将这里的 机器码 74(jz) 修改为 EB(jmp) 005560C4 74 20 je short SourceFo.005560E6 /*****************************去掉Snacker检查*********************************/ ; 将这里的 机器码 74(jz) 修改为 EB(jmp) 005560ED 74 20 je short SourceFo.0055610F /*************************其他各类调试软件的驱动句柄检测**********************/ 00573314 E8 632CFEFF call SourceFo.00555F7C ; 关键CALL, 以 eax 传递参数, 005774EF B8 54885700 mov eax,SourceFo.00578854 ; ASCII "License.dat" 005774F4 E8 97B1FFFF call SourceFo.00572690 /****************************执行文件尺寸检查*********************************/ 0055F105 |. 6A 00 push 0 ; /pFileSizeHigh = NULL 0055F107 |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ; | 0055F10A |. 50 push eax ; |hFile 0055F10B |. E8 D477EAFF call FileSize> ; \GetFileSize ; 将这里的 机器码 3D A8421200 修改为 3D 00E02200(00902200) 0055F110 |. 3D A8421200 cmp eax,1242A8 0055F115 |. 7E 1F jle short SourceFo.0055F136 // ??? 0055EF71 75 1C jnz short SourceFo.0055EF8F /******************************修理非法用户***********************************/ 0055F117 |> /6A 03 /push 3 0055F119 |. |B8 B8F45500 |mov eax,SourceFo.0055F4B8 ; ASCII "048229125055114025094102049210040021027068051099091168132234034161018208011" 0055F11E |. |8D55 E8 |lea edx,dword ptr ss:[ebp-18] 0055F121 |. |E8 9625EFFF |call SourceFo.004516BC 0055F126 |. |8B45 E8 |mov eax,dword ptr ss:[ebp-18] 0055F129 |. |E8 124FEAFF |call SourceFo.00404040 0055F12E |. |50 |push eax ; |CmdLine 0055F12F |. |E8 4079EAFF |call ; \WinExec 0055F134 |.^\EB E1 \jmp short SourceFo.0055F117 ; 循环打开多个窗口 /****************************可疑*******************************/ 00412F4D |. 807D FF 00 cmp byte ptr ss:[ebp-1],0 00412F51 |. 74 0F je short SourceFo.00412F62 00412F53 |. E8 5803FFFF call SourceFo.004032B0 0041A524 |. 8D45 D4 lea eax,dword ptr ss:[ebp-2C] 0041A527 |. 50 push eax ; /pSystemInfo 0041A528 |. E8 0FC4FEFF call ; \GetSystemInfo 0041A52D |. 8B55 FC mov edx,dword ptr ss:[ebp-4] 0041A530 |. 8B4D F8 mov ecx,dword ptr ss:[ebp-8] 0041A533 |. 49 dec ecx 0041A534 |. 78 33 js short SourceFo.0041A569 0041A536 |. 8D45 D4 lea eax,dword ptr ss:[ebp-2C] 0041A539 |. 66:8378 20 03 cmp word ptr ds:[eax+20],3 0041A53E |. 74 10 je short SourceFo.0041A550 ; ??? 00412F21 |. 837B 04 00 cmp dword ptr ds:[ebx+4],0 00412F25 |. 7D 24 jge short SourceFo.00412F4B ; ??? 00412F4D |. 807D FF 00 cmp byte ptr ss:[ebp-1],0 00412F51 |. 74 0F je short SOURCEFO.00412F62 00412F53 |. E8 5803FFFF call SOURCEFO.004032B0 ; eax = "0123456789abcdeffedcba9876543210" 005096B0 |. 8D45 A4 lea eax,dword ptr ss:[ebp-5C] 005096B3 |. E8 3CFFFFFF call SourceFo.005095F4 ; 将这里的 机器码 3D 508D0F00 修改为 3D 00902200 00564168 . 3D 508D0F00 cmp eax,0F8D50 0056416D . 0F8E F7000000 jle SourceFo.0056426A 00564173 . 33D2 xor edx,edx ; 将这里的 机器码 3D 5F890F00 修改为 3D 00902200 00567DFC . 3D 5F890F00 cmp eax,0F895F 00567E01 . 7E 13 jle short SOURCEFO.00567E16 00567E03 . E8 50DDFEFF call SOURCEFO.00555B58 ; ??? 在打开文件License.dat之后多次调用 00412F53 |. E8 5803FFFF call SOURCEFO.004032B0

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧