找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 0|回复: 0

[18560] 2021-05-11_红队InlineHook技术实现

[复制链接]

6万

主题

-6万

回帖

-58

积分

管理员

积分
-58
发表于 5 天前 | 显示全部楼层 |阅读模式
2021-05-11_红队InlineHook技术实现   |   I n l i n e H o o k   B u f f e r   H A C K   2 0 2 1 - 0 5 - 1 1 I A T H O O K , H O O K , A P I , I A T A P I ( L o a d L i b r a r y , ) , , I A T , I n l i n e H o o k I A T H O O K J M P , J M P , J M P , , H o o k . , , J M P E 9   =     -   E 9   -   5 , .   D W O R D   S e t I n l i n e H o o k ( L P B Y T E   H o o k A d d r , L P V O I D   H o o k P r o c , D W O R D   n u m )     / / , ( ) ,   {           i f   ( H o o k A d d r   = =   N U L L   | |   H o o k P r o c   = =   N U L L )           {                   p r i n t f ( " " ) ;                   r e t u r n   0 ;           }           i f   ( n u m   <   5 )           {                   p r i n t f ( " H O O K " ) ;                   r e t u r n   0 ;           }           / /           D W O R D   O l d P r o t e c t   =   0 ;           D W O R D   b r e t   =   V i r t u a l P r o t e c t ( ( L P B Y T E ) H o o k A d d r , n u m ,   P A G E _ E X E C U T E _ R E A D W R I T E , & O l d P r o t e c t ) ;           i f   ( b r e t   = =   0 )           {                   p r i n t f ( " " ) ;                   r e t u r n   0 ;           }           B u f f e r   =   m a l l o c ( n u m   *   s i z e o f ( c h a r ) ) ;           m e m c p y ( B u f f e r ,   H o o k A d d r ,   n u m ) ;     / /           m e m s e t ( H o o k A d d r , 0 x 9 0 , n u m ) ;       / / n o p           / / , E 9   =     -   E 9   -   5           D W O R D   J m p A d d r   =   ( D W O R D ) H o o k P r o c   -   ( D W O R D ) H o o k A d d r   -   5 ;           * ( L P B Y T E ) H o o k A d d r   =   0 x E 9 ;           * ( P D W O R D ) ( ( L P B Y T E ) H o o k A d d r   +   1 )   =   J m p A d d r ;           G l o b l e H o o k A d d r   =   ( D W O R D ) H o o k A d d r ;           R e t G l o b l e H o o k A d d r   =   ( D W O R D ) H o o k A d d r   +   n u m ;     / /           d w _ i f H O O K   =   1 ;   }   D W O R D   U n I n l i n e H o o k ( D W O R D   n u m )   {           i f   ( ! d w _ i f H O O K )           {
B u f f e r , . , 便           {                   p r i n t f ( " h o o k " ) ;                   r e t u r n   0 ;           }           m e m c p y ( ( L P V O I D ) G l o b l e H o o k A d d r ,   B u f f e r ,   n u m ) ;           B u f f e r   =   N U L L ;           d w _ i f H O O K   =   0 ;           r e t u r n   1 ;   }   e x t e r n   " C "   _ d e c l s p e c ( n a k e d )   v o i d   H o o k P r o c ( )       / / ,   {           / /           _ a s m           {                   p u s h a d         / /                   p u s h f d       / /           }           _ a s m           {                   m o v   r e g . E A X ,   e a x                   m o v   r e g . E B X ,   e b x                   m o v   r e g . E C X ,   e c x                   m o v   r e g . E D X ,   e d x                   m o v   r e g . E D I ,   e d i                   m o v   r e g . E S I ,   e s i                   m o v   r e g . E S P ,   e s p                   m o v   r e g . E B P ,   e b p           }           _ a s m           {                   m o v   e a x ,   D W O R D   P T R   s s   :   [ e s p   +   0 x 2 8 ]                   m o v   x ,   e a x                   m o v   e a x ,   D W O R D   P T R   s s   :   [ e s p   +   0 x 2 c ]                   m o v   y ,   e a x                   m o v   e a x ,   D W O R D   P T R   s s   :   [ e s p   +   0 x 3 0 ]                   m o v   z ,   e a x           }           p r i n t f ( " E A X : % x   E B X : % x   E C X : % x   E D X : % x   E D I : % x   E S I : % x   E S P : % x   E B P : % x   n " ,   r e g . E A X ,   r e g . E B X ,   r e g . E C X ,   r e g . E D X ,   r e g . E D I ,   r e g . E S I ,   r e g . E S P ,   r e g . E B P ) ;           p r i n t f ( " : % d   % d   % d n " ,   x ,   y ,   z ) ;           _ a s m           {                   p o p f d                   p o p a d           }           _ a s m           {                   p u s h                 e b p                   m o v                   e b p ,   e s p                   s u b                   e s p ,   0 C 0 h           }           _ a s m           {                   j m p   R e t G l o b l e H o o k A d d r ;           }   }
2 2 ~ 2 8 p u s h a d p u s h f d , + 4   + 8   + c , , 4 0 ~ 4 5 , , , , H O O K , T e s t , , , J M P , F 1 1 C A L L , F 1 1 , , , J M P   + , E 9   =     -   E 9   -   5 : h t t p s : / / b l o g . c s d n . n e t / x _ i y a / a r t i c l e / d e t a i l s / 1 3 1 6 1 9 3 7 t y p e d e f   s t r u c t   _ r e g e i s t { D W O R D   E A X ; D W O R D   E B X ; D W O R D   E C X ; D W O R D   E D X ; D W O R D   E B P ; D W O R D   E S P ; D W O R D   E S I ; D W O R D   E D I ; } r e g e i s t ; r e g e i s t   r e g   =   {   0   } ; D W O R D   T e s t ( i n t   x ,   i n t   y ,   i n t   z ) { r e t u r n   x   +   y   +   z ; }   D W O R D   T e s t I n l i n e H o o k ( )   {           P A d d r   =   ( B Y T E * ) T e s t   +   1 ;           P A d d r   + =   * ( D W O R D * ) P A d d r +   4 ;           S e t I n l i n e H o o k ( ( L P B Y T E ) T e s t ,   H o o k P r o c , 9 ) ;           T e s t ( 1 ,   2 ,   3 ) ;           U n I n l i n e H o o k ( 9 ) ;           T e s t ( 1 ,   2 ,   3 ) ;           r e t u r n   0 ;   }
    / /   I n l i n e H o o k . c p p   :     " m a i n "   / / # i n c l u d e   < i o s t r e a m > # i n c l u d e   < w i n d o w s . h > / / L P V O I D   B u f f e r ; t y p e d e f   s t r u c t   _ r e g e i s t { D W O R D   E A X ; D W O R D   E B X ; D W O R D   E C X ; D W O R D   E D X ; D W O R D   E B P ; D W O R D   E S P ; D W O R D   E S I ; D W O R D   E D I ; } r e g e i s t ; r e g e i s t   r e g   =   {   0   } ; D W O R D   x ; D W O R D   y ; D W O R D   z ; D W O R D   G l o b l e H o o k A d d r ; D W O R D   R e t G l o b l e H o o k A d d r ; D W O R D   d w _ i f H O O K   =   0 ; D W O R D   T e s t ( i n t   x ,   i n t   y ,   i n t   z ) ; P B Y T E   P A d d r ; / / t y p e d e f   D W O R D ( * M y T e s t ) ( i n t   x ,   i n t   y ,   i n t   z ) ; / / M y T e s t   p A d d r   = T e s t ; e x t e r n   " C "   _ d e c l s p e c ( n a k e d )   v o i d   H o o k P r o c ( )       / / , { / / _ a s m { p u s h a d         / / p u s h f d       / / }
_ a s m { m o v   r e g . E A X ,   e a x m o v   r e g . E B X ,   e b x m o v   r e g . E C X ,   e c x m o v   r e g . E D X ,   e d x m o v   r e g . E D I ,   e d i m o v   r e g . E S I ,   e s i m o v   r e g . E S P ,   e s p m o v   r e g . E B P ,   e b p } _ a s m { m o v   e a x ,   D W O R D   P T R   s s   :   [ e s p   +   0 x 2 8 ] m o v   x ,   e a x m o v   e a x ,   D W O R D   P T R   s s   :   [ e s p   +   0 x 2 c ] m o v   y ,   e a x m o v   e a x ,   D W O R D   P T R   s s   :   [ e s p   +   0 x 3 0 ] m o v   z ,   e a x } p r i n t f ( " E A X : % x   E B X : % x   E C X : % x   E D X : % x   E D I : % x   E S I : % x   E S P : % x   E B P : % x   n " ,   r e g . E A X ,   r e g . E B X ,   r e g . E C X ,   r e g . E D X ,   r e g . E D I ,   r e g . E S I ,   r e g . E S P ,   r e g . E B P ) ; p r i n t f ( " : % d   % d   % d n " ,   x ,   y ,   z ) ; _ a s m { p o p f d p o p a d } _ a s m { p u s h                 e b p m o v                   e b p ,   e s p s u b                   e s p ,   0 C 0 h } _ a s m { j m p   R e t G l o b l e H o o k A d d r ; } } D W O R D   S e t I n l i n e H o o k ( L P B Y T E   H o o k A d d r , L P V O I D   H o o k P r o c , D W O R D   n u m )     / / , ( ) , { i f   ( H o o k A d d r   = =   N U L L   | |   H o o k P r o c   = =   N U L L ) { p r i n t f ( " " ) ; r e t u r n   0 ; } i f   ( n u m   <   5 ) { p r i n t f ( " H O O K " ) ; r e t u r n   0 ; } / / D W O R D   O l d P r o t e c t   =   0 ; D W O R D   b r e t   =   V i r t u a l P r o t e c t ( ( L P B Y T E ) H o o k A d d r , n u m ,   P A G E _ E X E C U T E _ R E A D W R I T E , & O l d P r o t e c t ) ; i f   ( b r e t   = =   0 ) { p r i n t f ( " " ) ; r e t u r n   0 ; }
B u f f e r   =   m a l l o c ( n u m   *   s i z e o f ( c h a r ) ) ; m e m c p y ( B u f f e r ,   H o o k A d d r ,   n u m ) ; m e m s e t ( H o o k A d d r , 0 x 9 0 , n u m ) ;       / / n o p / / , E 8 便 , E 8   =     -   E 8   -   5 D W O R D   J m p A d d r   =   ( D W O R D ) H o o k P r o c   -   ( D W O R D ) H o o k A d d r   -   5 ; * ( L P B Y T E ) H o o k A d d r   =   0 x E 9 ; * ( P D W O R D ) ( ( L P B Y T E ) H o o k A d d r   +   1 )   =   J m p A d d r ; G l o b l e H o o k A d d r   =   ( D W O R D ) H o o k A d d r ; R e t G l o b l e H o o k A d d r   =   ( D W O R D ) H o o k A d d r   +   n u m ; d w _ i f H O O K   =   1 ; } D W O R D   U n I n l i n e H o o k ( D W O R D   n u m ) { i f   ( ! d w _ i f H O O K ) { p r i n t f ( " h o o k " ) ; r e t u r n   0 ; } m e m c p y ( ( L P V O I D ) G l o b l e H o o k A d d r ,   B u f f e r ,   n u m ) ; B u f f e r   =   N U L L ; d w _ i f H O O K   =   0 ; r e t u r n   1 ; } D W O R D   T e s t ( i n t   x ,   i n t   y ,   i n t   z ) { r e t u r n   x   +   y   +   z ; } D W O R D   T e s t I n l i n e H o o k ( ) { P A d d r   =   ( B Y T E * ) T e s t   +   1 ; P A d d r   + =   * ( D W O R D * ) P A d d r   +   4 ; S e t I n l i n e H o o k ( ( L P B Y T E ) P A d d r ,   H o o k P r o c , 9 ) ; T e s t ( 1 ,   2 ,   3 ) ; U n I n l i n e H o o k ( 9 ) ; T e s t ( 1 ,   2 ,   3 ) ; r e t u r n   0 ; } i n t   m a i n ( ) { T e s t I n l i n e H o o k ( ) ; / / T e s t ( 1 ,   2 ,   3 ) ; r e t u r n   1 ; }
线 线 D l l S e s s i o n   0   |   I A T   H o o k 6 P r o 稿 B u f f e r
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Nmaps Club

GMT+8, 2025-1-23 10:22 , Processed in 0.272484 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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