亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 29a-7.007

?? 從29A上收集的病毒源碼
?? 007
?? 第 1 頁 / 共 2 頁
字號:

                                HOOKLIB & SDE
                                ~~~~~~~~~~~~~

                                  ABSTRACT

 Two  engines  described:  HOOKLIB  splicing library, allowing you to hook any
 function   by  address,  including  functions  in  the  remote processes; and
 SDE,  or   Subroutine   Displacement   Engine  --  an  engine allowing you to
 make  your  C/C++ subroutines program- and/or offset-independend, for example
 to inject and execute them in the remote processes.

 To   use  these  engines, no special knowledge/coding is required; everything
 can be understood from the examples.

                                  CONTENTS

 1. HookLib intro
 2. HookLib
 3. SDE intro
 4. SDE
 5. Conclusion

                              1. HOOKLIB INTRO
                              ~~~~~~~~~~~~~~~~

 I'd  like to tell ya 'bout some gamez using length disassemblers. One of such
 games  is  so  called  splicing, cool vx technology known and used for years.
 Different stupid scriptkiddiez are so lazy so they hook iat, and other fuckin
 dwords  pointing  to  other  dwords, and they think that it is cool. But real
 machos  never  hook  dwords, they deal with only the real code. I'll tell you
 why.  Because  one  day  such  a scriptkiddie encounter situation where there
 is no dword  pointing  to  another  dword.  And  then  he  suck big red dick.
 Moreover,  since  function is hooked indirectly, changing some reference, you
 have  no guarantee that it will never be called directly, so you can not hook
 all  target  function  calls. While  we   always  know how to hook mostly any
 function  in  any case. So i'll tell  you  how.   Imagine,  somewhere  exists
 subroutine    you    want  to  hook.  It  consists  of   instructions,   isnt
 it?    And    you    can   change  these  instructions.  For example,   since
 you  insert     into   the   prolog   of   the  target  subroutine  something
 like  JMP,    it  is  hooked. You may think, that subroutine  will  not  work
 after  such   a    modification.  No  fucking way, it  will.  You  only  need
 to   take original    instructions     and    correctly  place    'em    into
 another  location.     Somewhere   into   the   place,  pointed  to   by  the
 inserted  jmp, where  these     moved     instructions    will   be executed.
 So   it  all looks like the following:

 before modification:        after modification:

 target: push    ebp         target: jmp     hook_stub \ (1)
         mov     ebp, esp            nop               /
         sub     esp, 8              push    esi
         push    esi                 ...
         ...              hook_stub: call    hook
                                     push    ebp
                                     mov     ebp, esp
                                     sub     esp, 8
                                     jmp     target+6
                               hook: ...

 The  only  question  you  can  ask is how to find out how many original bytes
 should  we  copy.  Amount of bytes is calculated using simple algorithm: copy
 instruction   by   instruction,   until   summary   size  of the copied bytes
 is  enough  to   insert  there (instead of them) something like jmp hook_stub
 (1).    So    this    can     be     5  or  more  original  bytes,  depending
 on  instructions forming target  subroutine  prolog.   Copying   instructions
 one      by     one    requires  such   thing  as  length  disassembler:   it
 is  just    a    subroutine    that    returns    instruction    length    by
 given instruction  pointer.  Once again, scriptkiddie will  insert  something
 like push    offset hook_stub   &   retn,   instead of a  relative jmp, while
 real  machos   always   know    how   relative   arguments   are  calculated,
 so   in  situation    where    5   bytes     is      okey    but  6  is  not,
 scriptkiddiez  will   suck.   Moral  of this story is simple: leave easy ways
 for suckers, and live your own original life.

 Sometimes  people  torment  themselfs using the following algo: copy original
 bytes   from  the target  subroutine into some temp buffer, and insert jmp to
 hook     subroutine     instead      of     original  prolog  bytes;   later,
 when  hook  is called,     restore    original      bytes,     call  original
 subroutine,     wait    until      it    returns,   and   hook it once again.
 Except   redundant    complexity,   such    method    is   unreliable: first,
 you  can  lose  your    hook   if   subroutine  doesnt  returns;  second, the
 more    frequently   you    modify     executable     code   without   thread
 locking,  the  more  chances you have to fuckup your unhappy program.

                                  2. HOOKLIB
                                  ~~~~~~~~~~

 Here is a brief description of the HOOKLIB splicing library, which allows you
 to hook mostly any subroutine, including subroutines in the remote processes,
 any  number of times (multiple hooks), including unhook operation. Note, that
 if  you  install  hooks  1,  then 2, then 3 (for the same target subroutine),
 an  then  remove  hook  2, only hook 1 will be available, since hooks are not
 linked into chains.

void* InstallHook(void* Target,             /* subroutine to hook            */
                  void* Hook,               /* hook handler                  */
                  unsigned long flags,      /* flags, HF_xxx                 */
                  unsigned long nArgs,      /* used if HF_REPUSH_ARGS        */
                  void* stubAddr,           /* if NULL, do malloc/free       */
                  unsigned long stubSize,   /* unused if stubAddr is defined */
                  void* hProcess );         /* process handle                */

 Target -- is a pointer to the subroutine you want to hook.
           This can be virtual address in the remote process.

 Hook -- is a pointer to the hook handler subroutine.
         This also can be virtual address in the remote process.

 Flags -- is a bitset of the following values:

    HF_REPUSH_ARGS    -- if specified, arguments are re-pushed before calling
                         Hook(), and you must specify also nArgs parameter.
                         if not specified, arguments are left on the stack
                         unchanged.

    HF_VAARG          -- used only if HF_REPUSH_ARGS flag is specified;
                         if used, in addition to nArgs arguments there is
                         last argument called va_arg,
                         or "variable argument list"; in C/C++ it looks
                         like "...", like in printf.

    HF_DISABLE_UNHOOK -- normally, hook stub contains information used in
                         unhook operation (see UninstallHook());
                         if this flag is specified, such information is
                         not generated, and standard unhook
                         will be not available.

    HF_NOMALLOC       -- if this flag is specified, stubAddr parameter
                         specifies virtual address of the hook stub;
                         possibly in the remote context.
                         otherwise, malloc/free alike functions will be
                         used to allocate/free hook stub memory.

    HF_RETTOCALLER    -- used only if HF_REPUSH_ARGS is NOT specified;
                         if this flag is specified, Hook() handler
                         is called using JMP command, otherwise with CALL.
                         In 1st case, control is returned to caller,
                         bypassing target subroutine;
                         in 2nd case, control is passed to hooked subroutine.

    HF_OWN_CALL       -- used only if HF_RETTOCALLER is NOT specified;
                         if this flag is specified, Target() is called from
                         Hook(), and 1st argument passed to Hook() is
                         pointer to copied original bytes, linked with
                         jmp to (Target + orig_len)

                         if HF_TARGET_IS_CDECL is also specified,
                         nArgs is ignored, otherwise nArgs should be specified
                         to build 'RET n' instruction after
                           call Hook & add esp, n

    HF_TARGET_IS_CDECL -- used only if HF_OWN_CALL,
                          means that Target() subroutine uses __cdecl
                          calling convention.

    HF_REGISTERS       -- do PUSHAD before Hook() call &&
                          do POPAD on return from Hook(),
                          as such Hook() can modify registers,
                          useful in combination with HF_RETTOCALLER flag,
                          when instead of target address you specify
                          not a subroutine but some instruction address, and
                          wanna inspect/change register values at that point.

 nArgs -- used only if HF_REPUSH_ARGS and/or (HF_OWN_CALL&&!HF_TARGET_IS_CDECL)
          flags are specified;
          specifies number of arguments, not counting va_arg (if present)

 stubAddr -- used only if HF_NOMALLOC flag is specified;
             specifies virtual address of the hook stub
             (possibly in the remote process).

 stubSize -- used only if stubAddr is defined (!=NULL),
             specifies max size of hook stub

 hProcess -- is a handle of the process we are working with;
             this handle is passed into Virtual<Alloc|Free|Protect>Ex
             and/or <Read/Write>ProcessMemory functions;
             if you hook subroutine in the current process,
             specify here GetCurrentProcess();
             if you use HOOKLIB on the unix machine,
             and/or using standard C functions like malloc/free/memcpy,
             this parameter is completely ignored.

 Return values:

   InstallHook() returns "hook handle", i.e. pointer to the hook stub
   (possibly in the remote process), or NULL if error.

 Stub format/Hook arguments:

  HF_REPUSH_ARGS     = 0
  HF_RETTOCALLER     = 0
  HF_OWN_CALL        = 0
  HF_TARGET_IS_CDECL = unused

     target:     jmp stub

     stub:       (if HF_DISABLE_UNHOOK==0) <unhook_data>
                 call hook
     orig_bytes: <orig_bytes>
                 jmp (target + <orig_len>)

     ; void __cdecl hook(hkRET, arg1, arg2, argX)
     hook:       ...
                 retn

  HF_REPUSH_ARGS     = 0
  HF_RETTOCALLER     = 0
  HF_OWN_CALL        = 1
  HF_TARGET_IS_CDECL = 0

     target:     jmp stub

     stub:       (if HF_DISABLE_UNHOOK==0) <unhook_data>
                 push offset orig_bytes
                 (HF_REGISTERS ? PUSHAD)
                 call hook
                 (HF_REGISTERS ? POPAD)
                 add esp, 4
                 retn (nArgs * 4)
     orig_bytes: <orig_bytes>
                 jmp (target + <orig_len>)

     ; sometype __cdecl hook(target, hkRET, arg1, arg2, argN)
     hook:       ...
                 call target
                 mov eax, retcode
                 retn

  HF_REPUSH_ARGS     = 0
  HF_RETTOCALLER     = 0
  HF_OWN_CALL        = 1
  HF_TARGET_IS_CDECL = 1

     target:     jmp stub

     stub:       (if HF_DISABLE_UNHOOK==0) <unhook_data>
                 push offset orig_bytes
                 call hook
                 add esp, 4
                 retn
     orig_bytes: <orig_bytes>
                 jmp (target + <orig_len>)

     ; sometype __cdecl hook(target, hkRET, arg1, arg2, argX)
     hook:       ...
                 call target
                 add esp, (nArgs * 4)
                 mov eax, retcode
                 retn

  HF_REPUSH_ARGS     = 0
  HF_RETTOCALLER     = 1
  HF_OWN_CALL        = unused
  HF_TARGET_IS_CDECL = unused

     target:     jmp stub

     stub:       (if HF_DISABLE_UNHOOK==0) <unhook_data>
                 jmp hook
     orig_bytes: <orig_bytes>
                 jmp (target + <orig_len>)

     ; void __whatever hook(arg1, arg2, argX)
     hook:       ...
                 retn <whatever>

  HF_REPUSH_ARGS     = 1
  HF_RETTOCALLER     = unused
  HF_OWN_CALL        = 0
  HF_TARGET_IS_CDECL = unused

     target:     jmp stub

     stub:       (if HF_DISABLE_UNHOOK==0) <unhook_data>
                 (if HF_VAARG) push esp; add dword [esp], 4+nArgs*4
                 push argN
                 push arg1
                 call hook
                 add esp, (nArgs * 4 + HF_VAARG?4:0)
     orig_bytes: <orig_bytes>
                 jmp (target + <orig_len>)

     ; void __cdecl hook(arg1, arg2, argN)
     hook:       ...
                 retn

  HF_REPUSH_ARGS     = 1
  HF_RETTOCALLER     = unused
  HF_OWN_CALL        = 1
  HF_TARGET_IS_CDECL = 0

     target:     jmp stub

     stub:       (if HF_DISABLE_UNHOOK==0) <unhook_data>
                 (if HF_VAARG) push esp; add dword [esp], 4+nArgs*4
                 push argN
                 push arg1
                 push offset orig_bytes
                 call hook
                 add esp, (nArgs * 4 + 4 + HF_VAARG?4:0)
                 retn (nArgs * 4)
     orig_bytes: <orig_bytes>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成在线播放网站岛国| 精品第一国产综合精品aⅴ| 不卡一区二区在线| 美女精品自拍一二三四| 亚洲另类色综合网站| 欧美成人一级视频| 欧美日韩免费高清一区色橹橹| 蜜桃视频在线观看一区二区| 国产精品久久久久久久裸模| 91麻豆精品91久久久久同性| 色综合天天综合在线视频| 激情综合色综合久久| 日韩激情一区二区| 亚洲欧美日韩国产成人精品影院| 久久久精品国产99久久精品芒果| 国产乱对白刺激视频不卡| 一区二区三区欧美亚洲| 国产日产精品一区| 国产性做久久久久久| 日韩精品一区二区三区在线 | 日韩片之四级片| 欧美丰满美乳xxx高潮www| 欧美日韩一级视频| 欧美丰满高潮xxxx喷水动漫| 91国产丝袜在线播放| 亚洲一区二区三区中文字幕在线| 欧美日韩国产另类一区| 国产激情视频一区二区三区欧美 | 中文字幕不卡在线播放| 欧美亚洲国产bt| 国产999精品久久| 午夜一区二区三区视频| 午夜婷婷国产麻豆精品| 亚洲大片一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 蜜桃av一区二区三区电影| 国产曰批免费观看久久久| 国产成人精品免费在线| 99久久久久免费精品国产| 日本高清成人免费播放| 欧美美女直播网站| 国产人妖乱国产精品人妖| 中文字幕一区二区三区色视频| 亚洲欧洲成人精品av97| 亚洲国产综合视频在线观看| 蜜桃视频第一区免费观看| 99久久精品99国产精品| 欧美日韩中文一区| 国产精品无码永久免费888| 亚洲成av人片在线观看| 成人性生交大合| 日韩午夜激情电影| 亚洲一区二区成人在线观看| 麻豆精品国产传媒mv男同| 91女人视频在线观看| 国产日韩综合av| 男女男精品视频网| 日本道免费精品一区二区三区| 国产亚洲美州欧州综合国| 午夜精品福利视频网站| 色婷婷激情综合| 国产精品美女久久久久av爽李琼| 男女男精品视频网| 91精品国产综合久久香蕉麻豆| 中文字幕一区二区三区四区不卡 | 丝袜脚交一区二区| 欧美性三三影院| 亚洲综合男人的天堂| 色av成人天堂桃色av| 亚洲女子a中天字幕| www.亚洲激情.com| 国产精品国产三级国产专播品爱网| 美国精品在线观看| 久久美女艺术照精彩视频福利播放| 婷婷成人激情在线网| 欧美日韩亚州综合| 日本欧美一区二区| 久久亚洲影视婷婷| 国内一区二区在线| 欧美激情在线一区二区| 成人av在线资源| 一区二区三区四区在线播放| 在线国产亚洲欧美| 美女任你摸久久| 国产嫩草影院久久久久| 色噜噜夜夜夜综合网| 婷婷中文字幕综合| 久久夜色精品国产噜噜av| 成人精品电影在线观看| 亚洲日本韩国一区| 正在播放一区二区| 国产a级毛片一区| 亚洲丝袜精品丝袜在线| 欧美在线三级电影| 国产一区二区在线电影| 亚洲欧美偷拍另类a∨色屁股| 91.xcao| 97精品久久久午夜一区二区三区 | 亚洲精品一区二区三区蜜桃下载 | 韩国理伦片一区二区三区在线播放 | 国产精品午夜春色av| 日韩一区精品视频| 精品91自产拍在线观看一区| 国产一区二区成人久久免费影院| 欧美电影免费观看高清完整版在| 成人午夜电影网站| 日本va欧美va精品| 亚洲三级免费电影| 日韩精品一区二区三区视频播放 | 自拍偷在线精品自拍偷无码专区| 欧美日韩你懂得| 成人黄色软件下载| 国产综合色精品一区二区三区| 一区二区三区产品免费精品久久75| 久久久不卡影院| 精品少妇一区二区三区免费观看 | 色婷婷av一区二区三区软件 | 国产精品剧情在线亚洲| 精品女同一区二区| 欧美久久久久免费| 欧美日韩性生活| 欧美日韩日日摸| 欧美三级蜜桃2在线观看| 日本乱人伦aⅴ精品| 色综合天天综合网天天狠天天 | 国产成都精品91一区二区三| 国模大尺度一区二区三区| 视频在线观看国产精品| 天天操天天干天天综合网| 一区二区三区在线观看国产| 一区二区日韩电影| 三级欧美韩日大片在线看| 亚洲自拍偷拍网站| 日本欧美一区二区| 国产在线精品国自产拍免费| 国产乱码精品1区2区3区| 成人美女在线视频| 色婷婷国产精品久久包臀| 精品视频在线视频| 精品国产乱子伦一区| 国产视频一区不卡| 亚洲欧美电影院| 免费在线观看一区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美一区三区四区| 日韩三级伦理片妻子的秘密按摩| 日韩女优av电影| 一二三四社区欧美黄| 久久99热99| 欧美性生活一区| 久久先锋影音av鲁色资源| 亚洲男人的天堂在线aⅴ视频| 夜夜嗨av一区二区三区 | 日本伊人色综合网| 99精品视频在线播放观看| 在线91免费看| 亚洲激情综合网| 成人在线视频一区二区| 91精品国产综合久久久蜜臀图片| 国产清纯白嫩初高生在线观看91| 亚洲电影在线免费观看| 成人爱爱电影网址| 久久色.com| 美女视频网站黄色亚洲| 欧美视频在线一区二区三区| 国产性色一区二区| 国产日韩欧美麻豆| 国产精品欧美精品| 日韩av网站免费在线| 在线一区二区视频| 亚洲欧美另类图片小说| 99国产精品一区| 欧美精品一区二区三区蜜桃视频 | 樱桃视频在线观看一区| 成年人国产精品| 亚洲天堂精品视频| 99精品视频一区| 一区在线播放视频| 99久久亚洲一区二区三区青草| 国产精品欧美久久久久一区二区| 国产在线不卡视频| 久久久综合精品| 成人免费精品视频| 亚洲一区二区在线免费看| 欧美女孩性生活视频| 日本欧美韩国一区三区| 精品国产一区二区三区久久影院 | 色婷婷综合激情| 亚洲国产欧美一区二区三区丁香婷| 欧美偷拍一区二区| 久久精品72免费观看| 国产欧美精品在线观看| 91美女在线看| 天堂一区二区在线| 中文字幕欧美激情一区| 欧美午夜视频网站| 国产suv精品一区二区883| 亚洲靠逼com| 精品少妇一区二区| 色香色香欲天天天影视综合网|