飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4376|回复: 4

[x64] X64 HOOK之汇编部分--Obj[转自飘云BLOG]

[复制链接]
  • TA的每日心情
    奋斗
    2016-1-13 12:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2014-9-23 09:14:05 | 显示全部楼层 |阅读模式
    最新修正:http://www.dllhook.com/post/12.html

    1. <pre class="prettyprint lang-bsh">format MS64 COFF
    2. ;===================================================
    3. ;" X64 HOOK PiaoYun/P.Y.G "
    4. ;" www.chinapyg.com "
    5. ;" www.dllhook.com "
    6. ;" Fixed: 2016-10-08 "
    7. ;===================================================

    8. public GetRcx
    9. public JmpAddr
    10. public PatchBYTE
    11. public PatchWORD
    12. public PatchDWORD
    13. public PatchQWORD
    14. public AddFun

    15. ; Fixed 增加一个获取Rcx函数
    16. GetRcx:
    17.     mov    rax, rcx
    18.     retn

    19. JmpAddr:
    20.     xchg   rax, rcx
    21.     jmp    rax

    22. PatchBYTE:
    23.     mov    rax, rcx
    24.     mov    [rax], dl
    25.     retn         

    26. PatchWORD:
    27.     mov    rax, rcx     
    28.     mov    [rax], dx   
    29.     retn

    30. PatchDWORD:
    31.     mov    rax, rcx   
    32.     mov    [rax], edx  
    33.     retn            

    34. PatchQWORD:
    35.     mov    rax, rcx  
    36.     mov    [rax], rdx
    37.     retn         

    38. AddFun:
    39.     mov    rax, rcx
    40.     add    rax, rdx
    41.     retn</pre>      


    42. 用FASM编译成obj,添加到VS2012即可~~~

    43. 测试代码:

    44. #include <windows.h>
    45. #include <stdio.h>

    46. // 宏定义
    47. #define EXTERNC extern "C"
    48. #define VOIDSTD EXTERNC void __stdcall
    49. #define INT64STD EXTERNC INT64 __stdcall

    50. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    51. // 汇编函数声明
    52. VOIDSTD  GetRcx();
    53. VOIDSTD JmpAddr(INT64 addr);
    54. VOIDSTD PatchBYTE(INT64 addr, byte data);
    55. VOIDSTD PatchWORD(INT64 addr, WORD data);
    56. VOIDSTD PatchDWORD(INT64 addr, DWORD data);
    57. VOIDSTD PatchQWORD(INT64 addr, INT64 data);
    58. INT64STD AddFun(INT64 a, INT64 b);
    59. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    60. VOID JmpFun()
    61. {
    62.         MessageBox(NULL, TEXT("111"), TEXT("11111"), MB_OK);
    63. }

    64. VOID main()
    65. {
    66.         printf("%I64X\n", AddFun(0x111111111, 0x222222222));
    67.         GetRcx(); // Fixed 2016-10-08
    68.         JmpAddr((INT64)&JmpFun);
    69.         system("pause");
    70. }
    复制代码



    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2015-8-14 00:08
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    发表于 2014-9-25 10:23:00 | 显示全部楼层
    沙发,沙发,没人支持下X64 是不行滴。。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    前天 11:16
  • 签到天数: 953 天

    [LV.10]以坛为家III

    发表于 2016-5-10 17:22:45 | 显示全部楼层

    感谢分享,收藏
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2016-10-8 20:20:24 | 显示全部楼层
    此代码已修正:
    http://www.dllhook.com/post/12.html
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    6 天前
  • 签到天数: 1127 天

    [LV.10]以坛为家III

    发表于 2020-12-8 22:53:15 | 显示全部楼层
    看了很多遍了,经典
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表