net hook 研究

要涉及一些反汇编的知识,作者也不是很懂,可以提供一些思路   

public class Test
    {
        public void Test1()
        {

            Console.WriteLine("test1");
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            var obj = new Test();

            obj.Test1(); 
            //00E90898 E8 B3 FB FF FF       call        Test.Test.Test1() (0E90450h)  h没什么用,应该是vs加的
            //00E90450 E9 B3 04 00 00       jmp         Test.Test.Test1() (0E90908h) 
            Console.ReadLine();

      }

· }

先看一下这个简单的程序,在调用Test1函数的时候,查看反汇编代码为00E90898 E8 B3 FB FF FF       call        Test.Test.Test1() (0E90450)

意识应该是跳转到地址为0E90450 的地方,然后看0E90450地址对应的反汇编00E90450 E9 B3 04 00 00       jmp         Test.Test.Test1() (0E90908)

然后0E90908这个地址对应的是函数体的开始位置,E9 对应的是jmp指令,后四位应该是一个相对地址 大概是00E90450 +(B3 04 00 00 ) +5 =0E90908

所以要hook 这个Test1这个函数,可以修改Jmp 后面的四位数字,

然后这个jmp 指令的地址00E90450 可以通过

var md1 = typeof(Test).GetMethod("Test1");

var p1 = md1.MethodHandle.GetFunctionPointer();

获取

所以下面是一个测试代码,使用32位

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var md1 = typeof(Test).GetMethod("Test1");
            var md2 = typeof(Test).GetMethod("Test2");
            var obj = new Test();

            var p1 = md1.MethodHandle.GetFunctionPointer();
            var p2 = md2.MethodHandle.GetFunctionPointer();

            //编译函数
            RuntimeHelpers.PrepareMethod(md1.MethodHandle);
            RuntimeHelpers.PrepareMethod(md2.MethodHandle);

            var bs1 = new byte[5];
            Marshal.Copy(p1, bs1, 0, 5);

            var bs2 = new byte[5];
            Marshal.Copy(p2, bs2, 0, 5);

            var rp1 = BitConverter.ToInt32(bs1, 1);
            var st1 = p1.ToInt32() + rp1 + 5;

            var rp2 = BitConverter.ToInt32(bs2, 1);
            var st2 = p2.ToInt32() + rp2 + 5;

            var offset = st2 - p1.ToInt32() - 5;
            Marshal.WriteInt32(new IntPtr(p1.ToInt32() + 1), offset);

            obj.Test1();
            obj.Test2();
        }
    }

    public class Test
    {
        public void Test1()
        {

            Console.WriteLine("test1");
        }

        public void Test2()
        {
            Console.WriteLine("test2");

        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
chm格式,目录如下。 第1章 PE文件格式深入研究 1.1 PE文件格式格式纵览 1.1.1 区块(Section) 1.1.2 相对虚拟地址(Relative Virtual Addresses) 1.1.3 数据目录 1.1.4 输入函数(Importing Functions) 1.2 PE文件结构 1.2.1 The MS-DOS头部 1.2.2 IMAGE_NT_HEADERS头部 1.2.3 区块表(The Section Table) 1.2.4 各种块(Sections)的描述 1.2.5 输出表 1.2.6 输出转向(Export Forwarding) 1.2.7 输入表 1.2.8 绑定输入(Bound import) 1.2.9 延迟装入数据(Delayload Data) 1.2.10 资源 1.2.11 基址重定位(Base Relocations) 1.2.12 调试目录(DebugDirectory) 1.2.13 NET头部 1.2.14 TLS初始化 1.2.15 程序异常数据 第2章 PE分析工具编写 2.1 文件格式检查 2.2 FileHeader和OptionalHeader内容的读取 2.3 得到数据目录(Data Dircetory)信息 2.4 得到块表(SectionTable)信息 2.5 得到输出表(ExportTable)信息 2.6 得到输入表(ImportTable)信息 第3章 Win32 调试API 3.1 Win32调试API原理 3.1.1 调试相关函数简要说明 3.1.2 调试事件 3.1.3 如何在调试时创建并跟踪一个进程 3.1.4 最主要的循环体 3.1.5 如何处理调试事件 3.1.6 线程环境详解 3.1.7 如何在另一个进程中注入代码 3.2 利用调试API编写脱壳机 3.2.1 tElock 0.98脱壳简介 3.2.2 脱壳机的编写 3.3 利用调试API制作内存补丁 3.3.1 跨进程内存存取机制 3.3.2 Debug API机制 第4章 Windows下的异常处理 4.1 基本概念 4.1.1 Windows下的软件异常 4.1.2 未公开的可靠吗 4.2 结构化异常处理(SEH) 4.2.1 异常处理的基本过程 4.2.2 SEH的分类 4.2.3 相关API 4.2.4 SEH相关数据结构 4.3 异常处理程序设计 4.3.1 顶层(top-level)异常处理 4.3.2 线程异常处理 4.3.3 异常处理的堆栈展开(Stack unwind) 4.3.4 异常处理程序设计中的几个注意事项: 4.4 SEH的简单应用 4.4.1 Win9x下利用SEH进ring0 4.4.2 利用SEH实现对自身的单步自跟踪 4.4.3 其它应用 4.5 系统背后的秘密 4.6 VC是如何封装系统提供的SEH机制的 4.6.1 扩展的EXCEPTION_REGISTRATION级相关结构 4.6.2 数据结构组织 4.7 Windows XP下的向量化异常处理(VEH) 第5章 软件加密技术 5.1 反调试技术(Anti-Debug) 5.1.1 句柄检测 5.1.2 SoftICE后门指令 5.1.3 int68子类型 5.1.4 ICECream子类型 5.1.5 判断NTICE服务是否运行 5.1.6 INT 1 检测 5.1.7 利用UnhandledExceptionFilter检测 5.1.8 INT 41子类型 5.2 反跟踪技术(Anti-Trace) 5.2.1 断点检测 5.2.2 利用SEH反跟踪 5.2.3 SMC技术实现 5.3 反加载技术(Anti-Loader) 5.3.1 利用TEB检测 5.3.2 利用IsDebuggerPresent函数检测 5.3.3 检查父进程 5.4 反DUMP技术(Anti-Dump) 5.5 文件完整性检验 5.5.1 CRC校验实现 5.5.2 校验和(Checksum) 5.5.3 内存映像校验 5.6 反监视技术(Anti-Monitor) 5.6.1 窗口方法检测 5.6.2 句柄检测 5.7 反静态分析技术 5.7.1 扰乱汇编代码 5.7.2 花指令 5.7.3 信息隐藏 5.8 代码与数据结合技术 5.9 软件保护的若干忠告 第6章 加壳软件编写 6.1 外壳编写基础 6.1.1 判断文件是否是PE格式的EXE文件 6.1.2 文件基本数据的读入 6.1.3 额外数据保留 6.1.4 重定位数据的去除 6.1.5 文件的压缩 6.1.6 资源区块的处理 6.1.7 区块的融合 6.1.8 输入表的处理 6.1.9 外壳部分的编写 6.1.10 将外壳部分添加至原程序 6.1.10 小结 6.2 加壳程序综合运用的实例 6.2.1 程序简介 6.2.2 加壳子程序(WJQ_ShellBegin()) 6.2.3 PE外壳程序 6.2.4 加进Anti技术 6.2.5 通过外壳修改被加壳PE 6.2.6 VC++调用汇编子程序 第7章 如何让壳与程序融为一体 7.1 序 7.1.1 为何需要壳和程序一体化 7.1.2 为阅读此章节需要的知识 7.1.3 基于此章节用的的例子程序说明 7.2 欺骗检查壳的工具 7.2.1 fi是如何检查壳的 7.2.2 欺骗fi 7.3 判断自己是否给脱壳了 7.3.1 判断文件尺寸 7.3.2 检查标记 7.3.3 外部检测(使用dll) 7.3.4 hook 相关的api(防止loader和调试api) 7.4 使用sdk把程序和壳溶为一体 7.4.1 sdk的意义 7.4.2 做一个带sdk的壳 7.5 后记:关于壳和程序的思考 第8章 Visual Basic 6 逆向工程 8.1 简介 8.2 P-code传奇 8.3 VB编译奥秘 8.4 VB与COM 8.5 VB可执行程序结构研究 8.6 VB程序事件解读 8.7 VB程序图形界面(GUI)解读 8.8 VB程序执行代码研究 8.9 我们的工具 8.10 VB程序保护篇 附录A 在Visual C++中使用内联汇编 附录B 在Visual Basic中使用汇编
[Trial version] 加密解密技术内幕.htm [Trial version] 目录.htm [Trial version] 第1章 PE文件格式深入研究 [Trial version] 1.1 PE文件格式格式纵览 [Trial version] PE文件格式一览.html [Trial version] 1.2 PE文件结构 [Trial version] 1. 检验PE文件的有效性.html [Trial version] 2. File Header (文件头).html [Trial version] 3. Optional Header.html [Trial version] 4. Section Table(节表).html [Trial version] 5. Import Table(引入表).html [Trial version] 6. Export Table(引出表).html [Trial version] 7.Debug信息节.htm [Trial version] DocNet 学习笔记之Anti ILDASM 研究.htm [Trial version] PE 档的基底重定位(Base Relocations).htm [Trial version] PE 格式学习总结(一)-- PE文件概述.htm [Trial version] PE 格式学习总结(二)-- PE文件中的输出函数.htm [Trial version] PE 格式学习总结(三)-- PE文件中的输入函数.htm [Trial version] PE 格式学习总结(四)-- PE文件中的资源.htm [Trial version] TLS.htm [Trial version] 基址从定位.htm [Trial version] 异常处理.htm [Trial version] 第2章 PE分析工具编写 [Trial version] 关于PE可执行文件的修改.htm [Trial version] 手工构造一个超微型的 PE 文件.htm [Trial version] 第3章 Win32 调试API [Trial version] 病毒是如何抗动态测试.htm [Trial version] 3.1 Win32调试API原理 [Trial version] Win32调试API第一部分.htm [Trial version] Win32调试API第二部分.htm [Trial version] Win32调试API第三部分.htm [Trial version] Win32调试API学习心得(一).htm [Trial version] Win32调试API学习心得(二).htm [Trial version] win32调试API学习心得(三).htm [Trial version] 用调试函数跟踪API.htm [Trial version] 3.2 利用调试API编写脱壳机 [Trial version] DEF分析与打造其脱壳软件----我的一篇析文.htm [Trial version] 用调试函数跟踪API.htm [Trial version] 3.3 利用调试API制作内存补丁 [Trial version] 利用DebugAPI做一些原先手工完成的动作,我用这种方法做过内存补丁,内存注册机等,完全VC编译.htm [Trial version] 第4章 Windows下的异常处理 [Trial version] 4.1 基本概念 [Trial version] SEH基本概念.htm [Trial version] 什么是异常.htm [Trial version] 4.2 结构化异常处理(SEH) [Trial version] 初步实战演习.htm [Trial version] 4.3 异常处理程序设计 [Trial version] 传递给异常处理例程的参数.htm [Trial version] 异常处理的堆栈展开.htm [Trial version] 4.4 SEH的简单应用 [Trial version] Win9x下利用SEH进ring0.htm [Trial version] 利用SEH实现对自身的单步自跟踪.htm [Trial version] 异常死亡进程的自动复活.htm [Trial version] 用 SEH 技术实现 API Hook.htm [Trial version] 4.6 VC是如何封装系统提供的SEH机制的 [Trial version] VC++编译器怎么实现异常处理.htm [Trial version] 4.7 Windows XP下的向量化异常处理(VEH [Trial version] windows XP下的向量化异常处理.htm [Trial version] 第5章 软件加密技术 [Trial version] 5.1 反调试技术(Anti-Debug) [Trial version] 5.1.1 句柄检测.htm [Trial version] 5.1.4 ICECream子类型.htm [Trial version] 5.1.5 判断NTICE服务是否运行.htm [Trial version] anti-debug技术探讨.htm [Trial version] AntiSoftICE.htm [Trial version] VB中实现检测ICE.htm [Trial version] 测试ICE是否在运行.htm [Trial version] 检测debugger的方法补遗.htm [Trial version] 另外一种检测SOFTICE的方法.htm [Trial version] 通过PEB实现AntiDebug.htm [Trial version] 5.2 反跟踪技术(Anti-Trace) [Trial version] tELock中的SEH反跟踪代码.htm [Trial version] 利用SEH改变程序流程以达到反跟踪的目的.htm [Trial version] 5.2.3 SMC技术实现 [Trial version] 浅析SMC技术.htm [Trial version] 5.3 反加载技术(Anti-Loader) [Trial version] VB anti-loader 2种常用方法介绍.htm [Trial version] 5.3.1 利用TEB检测 [Trial version] 浅谈利用 TEB 实现的反跟踪.htm [Trial version] 5.4 反DUMP技术(Anti-Dump) [Trial version] 理论知识.htm [Trial version] 5.5 文件完整性检验 [Trial version] PE 头部校验和(checksum)的计算.htm [Trial version] 5.5.1 CRC校验实现 [Trial version] 矛与盾的较量(1)——CRC原理篇.htm [Trial version] 矛与盾的较量(2)——CRC实践篇.htm [Trial version] 5.7 反静态分析技术 [Trial version] Fooling Disassemblers.htm [Trial version] 5.7.2 花指令 [Trial version] 矛与盾的较量(1)——花指令.htm [Trial version] 5.8 代码与数据结合技术 [Trial version] 与破解过招,保护你的共享软件.htm [Trial version] 5.9 软件保护的若干忠告 [Trial version] WIN下动态注册码实现方法.htm [Trial version] 安全程序设计.htm [Trial version] 如何用简单方法防止破解.htm [Trial version] 第6章 加壳软件编写 [Trial version] 6.1 外壳编写基础 [Trial version] 加壳软件实现.htm [Trial version] 6.2 加壳程序综合运用的实例 [Trial version] 浅谈壳的加载步骤及手动脱壳。.htm [Trial version] 第7章 如何让壳与程序融为一体 [Trial version] 7.2 欺骗检查壳的工具 [Trial version] 让侦测工具把壳识别为VC++.htm [Trial version] 7.4 使用sdk把程序和壳溶为一体 [Trial version] 实现调用加壳的外壳中的子程序的一点见解.htm [Trial version] 7.5 后记关于壳和程序的思考 [Trial version] 加壳技术探讨-加壳时处理IAT.htm [Trial version] 第8章 Visual Basic 6 逆向工程 [Trial version] VB的Native Code的传奇.htm [Trial version] VB网址大全.htm [Trial version] Visual Basic 6 逆向工程与反逆向工程 (1).htm [Trial version] Visual Basic 6 逆向工程与反逆向工程 (2).htm [Trial version] 《真是想不到系列》.htm [Trial version] 关于VB P-CODE的一些总结.htm [Trial version] 关于在VB中进行COM组件的开发(一、了解COM).htm [Trial version] 未公开API函数揭秘--通用对话框.htm [Trial version] VB与COM [Trial version] 如何用VB6写COM组件(一).htm [Trial version] 如何用VB6写COM组件(二).htm [Trial version] 附录A 在Visual C++中使用内联汇编 [Trial version] Visual C++ 内嵌汇编.htm [Trial version] Visual C++ 内嵌汇编二.htm [Trial version] 附录B 在Visual Basic中使用汇编 [Trial version] 完全用VB进行ASM编程的示例.htm [Trial version] 附录C COM技术 [Trial version] 《COM 原理与应用》学习笔记 - 第一部分 COM原理.htm [Trial version] 附录D 通过崩溃地址找出出错的代码行 [Trial version] 如何通过崩溃地址找到出错的代码行.htm [Trial version] 附录E 堆栈修正 [Trial version] 堆栈修正.htm

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值