亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
中文字幕av免费专区久久| 欧美喷潮久久久xxxxx| 九色综合狠狠综合久久| 亚洲6080在线| 丝袜国产日韩另类美女| 日韩高清一级片| 美女视频网站久久| 激情图片小说一区| 国产精品一区在线| 粉嫩av一区二区三区粉嫩| 成人黄色一级视频| 亚洲午夜av在线| 欧美午夜片在线看| 免费成人性网站| 国产一二精品视频| 豆国产96在线|亚洲| 99精品热视频| 欧美军同video69gay| 欧美军同video69gay| 精品va天堂亚洲国产| 国产三级精品在线| 亚洲精品亚洲人成人网在线播放| 亚洲国产视频在线| 国精产品一区一区三区mba视频| 国产在线视频一区二区三区| 成人福利视频网站| 欧美少妇bbb| 欧美mv日韩mv国产网站app| 国产视频一区二区在线观看| 一区二区三区欧美日韩| 久久精品国产99久久6| av网站免费线看精品| 欧美精品v日韩精品v韩国精品v| 精品久久国产97色综合| 亚洲欧美国产毛片在线| 久久99精品久久久久久| 成人成人成人在线视频| 欧美猛男超大videosgay| 日本一区二区三区dvd视频在线| 亚洲一区在线播放| 福利一区在线观看| 欧美精品视频www在线观看| 久久精品人人做人人爽人人| 亚洲国产一区二区视频| 成人aa视频在线观看| 日韩欧美国产小视频| 亚洲精品国产一区二区精华液| 日本欧美久久久久免费播放网| 成人动漫一区二区| 久久久久久麻豆| 三级不卡在线观看| 色94色欧美sute亚洲线路一久| 久久亚洲精华国产精华液| 亚洲一区二区三区视频在线| 成人99免费视频| 中文字幕国产精品一区二区| 久久国产欧美日韩精品| 88在线观看91蜜桃国自产| 亚洲人成在线播放网站岛国| 99久久伊人精品| 久久精品人人做人人爽97| 日本vs亚洲vs韩国一区三区 | 欧美人与性动xxxx| 亚洲婷婷国产精品电影人久久| 卡一卡二国产精品| 91麻豆精品国产| 天天亚洲美女在线视频| 欧美丝袜丝交足nylons图片| 亚洲色图制服丝袜| 97se亚洲国产综合自在线不卡| 国产日韩欧美亚洲| 国产成人综合视频| 国产日产精品1区| 国产精品乡下勾搭老头1| 精品国精品自拍自在线| 麻豆精品久久精品色综合| 欧美一区二区福利在线| 精品一区二区三区蜜桃| 久久久久久9999| 国产成人精品aa毛片| 国产精品美日韩| 91麻豆swag| 亚洲一区日韩精品中文字幕| 日本韩国欧美一区二区三区| 亚洲电影在线播放| 日韩一级高清毛片| 国产高清在线观看免费不卡| 中文字幕不卡三区| 91黄视频在线| 日韩精品五月天| 久久综合给合久久狠狠狠97色69| 国产一区二区女| 一色桃子久久精品亚洲| 欧美色图免费看| 麻豆91精品91久久久的内涵| 久久久久久毛片| av在线不卡免费看| 亚洲成年人网站在线观看| 精品欧美乱码久久久久久 | 日本强好片久久久久久aaa| 欧美一区二区三区色| 国产成人精品在线看| 亚洲欧美一区二区不卡| 91精品一区二区三区久久久久久 | 亚洲成人免费看| 久久一二三国产| 91国偷自产一区二区开放时间| 五月天久久比比资源色| 久久久www成人免费毛片麻豆| av亚洲精华国产精华| 欧美aa在线视频| 国产精品传媒在线| 精品国产免费视频| 91浏览器在线视频| 久久91精品国产91久久小草| 亚洲情趣在线观看| 2021国产精品久久精品| 欧美四级电影网| 成人午夜短视频| 蜜桃视频第一区免费观看| 亚洲视频 欧洲视频| 精品国产伦一区二区三区免费| 91香蕉视频黄| 高清免费成人av| 男女视频一区二区| 尤物av一区二区| 国产精品污www在线观看| 日韩一区二区电影网| 欧美丝袜自拍制服另类| 91在线丨porny丨国产| 国内成人自拍视频| 日韩电影在线一区| 亚洲国产日韩一区二区| 综合欧美一区二区三区| 久久久国产一区二区三区四区小说 | 亚洲三级理论片| 欧美激情一区在线观看| www国产精品av| 欧美成人艳星乳罩| 欧美一二三四在线| 欧美情侣在线播放| 欧美私模裸体表演在线观看| 91丨九色丨国产丨porny| 成人免费不卡视频| 成人精品一区二区三区四区| 国产一区二区在线观看视频| 免费人成精品欧美精品| 日韩av成人高清| 日韩精品亚洲一区| 轻轻草成人在线| 久久av老司机精品网站导航| 免费国产亚洲视频| 免费观看在线综合色| 日韩成人免费在线| 青青草精品视频| 精品无人码麻豆乱码1区2区 | 成人av午夜电影| youjizz国产精品| jlzzjlzz亚洲女人18| 北条麻妃国产九九精品视频| 99久久亚洲一区二区三区青草| 91小视频在线免费看| 色天天综合色天天久久| 欧美在线免费观看视频| 7777精品伊人久久久大香线蕉超级流畅 | 国产色产综合产在线视频| 日韩免费看的电影| 久久欧美一区二区| 国产精品理论在线观看| 亚洲欧美日韩在线| 日韩国产精品久久久久久亚洲| 蜜臀av性久久久久蜜臀aⅴ| 韩国av一区二区三区在线观看| 国产麻豆日韩欧美久久| 91麻豆国产在线观看| 欧美日韩国产一二三| 久久综合色之久久综合| 综合激情网...| 日本sm残虐另类| 成人美女视频在线观看18| 99精品视频一区| 欧美日韩国产高清一区二区 | 亚洲三级电影网站| 日韩二区三区在线观看| 精品在线播放免费| 97久久精品人人做人人爽| 欧美一区二区三区成人| 国产精品理论在线观看| 天堂蜜桃91精品| 成人在线综合网| 91精品久久久久久蜜臀| 国产精品蜜臀在线观看| 免费成人美女在线观看| 成人av免费在线| 日韩欧美国产三级电影视频| 亚洲视频一区二区在线| 精品在线亚洲视频| 欧日韩精品视频| 国产精品久久久久久亚洲伦| 日本午夜精品一区二区三区电影 |