[12928] 2018-07-10_如何利用Ptrace拦截和模拟Linux系统调用

文档创建者:s7ckTeam
浏览次数:5
最后更新:2025-01-18
2018-07-10_如何利用Ptrace拦截和模拟Linux系统调用 P t r a c e L i n u x A l p h a _ h 4 c k   F r e e B u f   2 0 1 8 - 0 7 - 1 0 p t r a c e ( 2 ) U n i x s t r a c e p t r a c e ( ) t h e   t r a c e r t h e   t r a c e e t r a c e e t r a c e r t r a c e r t r a c e r t r a c e r G D B x 8 6 - 6 4 L i n u x   P t r a c e 使 L i n u x s t r a c e s t r a c e P t r a c e 使 P t r a c e ( 2 )
p i d t r a c e e I D t r a c e e t r a c e r t r a c e r t r a c e e r e q u e s t P t r a c e i o c t l ( 2 ) s t r a c e P T R A C E _ T R A C E M E : P T R A C E _ S Y S C A L L : P T R A C E _ G E T R E G S : t r a c e e a d d r d a t a P t r a c e 0 s t r a c e f o r k ( 2 ) a r g v t r a c e e P t r a c e 使 w a i t ( 2 ) P T R A C E _ T R A C E M E w a i t ( 2 ) t r a c e e s t r a c e P T R A C E _ O _ T R A C E F O R K P T R A C E _ S Y S C A L L 使 w a i t ( 2 ) t r a c e e w a i t ( 2 ) 线 x 8 6 - 6 4 r a x 6 r d i r s i r d x r 1 0 r 8 r 9 P t r a c e w a i t ( 2 ) t r a c e e l o n g   p t r a c e ( i n t   r e q u e s t ,   p i d _ t   p i d ,   v o i d   * a d d r ,   v o i d   * d a t a ) ; $ s t r a c e   [ s t r a c e   o p t i o n s ]   p r o g r a m   [ a r g u m e n t s ] p i d _ t p i d   =   f o r k ( ) ; s w i t c h ( p i d )   {         c a s e   - 1 :   / *   e r r o r   * /                 F A T A L ( " % s " ,   s t r e r r o r ( e r r n o ) ) ;         c a s e   0 :   / *   c h i l d   * /                 p t r a c e ( P T R A C E _ T R A C E M E ,   0 ,   0 ,   0 ) ;                 e x e c v p ( a r g v [ 1 ] ,   a r g v   +   1 ) ;                 F A T A L ( " % s " ,   s t r e r r o r ( e r r n o ) ) ; } w a i t   p i d ( p i d , 0 ,   0 ) ; p t r a c e ( P T R A C E _ S E T O P T I O N S , p i d ,   0 ,   P T R A C E _ O _ E X I T K I L L ) ; p t r a c e ( P T R A C E _ S Y S C A L L , p i d ,   0 ,   0 ) ; w a i t p i d ( p i d , 0 ,   0 ) ;
P T R A C E _ S Y S C A L L w a i t ( 2 ) P T R A C E _ G E T R E G S r a x P t r a c e O p e n B S D p l e d g e ( 2 ) 西 访 使 p l e d g e e r r n o E P E R M 仿 p l e d g e x p l e d g e ( ) 1 0 0 0 0 t r a c e e 0 P L E D G E _ R D W R r e a d ( 2 ) r e a d v ( 2 ) p r e a d ( 2 ) p r e a d v ( 2 ) s t r u c t   u s e r _ r e g s _ s t r u c t   r e g s ; p t r a c e ( P T R A C E _ G E T R E G S , p i d ,   0 ,   & r e g s ) ; l o n g s y s c a l l   =   r e g s . o r i g _ r a x ; f p r i n t f ( s t d e r r , " % l d ( % l d ,   % l d ,   % l d ,   % l d ,   % l d ,   % l d ) " ,                 s y s c a l l ,                 ( l o n g ) r e g s . r d i ,   ( l o n g ) r e g s . r s i , ( l o n g ) r e g s . r d x ,                 ( l o n g ) r e g s . r 1 0 ,   ( l o n g ) r e g s . r 8 ,     ( l o n g ) r e g s . r 9 ) ; p t r a c e ( P T R A C E _ G E T R E G S , p i d ,   0 ,   & r e g s ) ; f p r i n t f ( s t d e r r , "   =   % l d n " ,   ( l o n g ) r e g s . r a x ) ; f o r ( ; ; )   {         / *   E n t e r   n e x t   s y s t e m   c a l l   * /         p t r a c e ( P T R A C E _ S Y S C A L L ,   p i d ,   0 ,   0 ) ;         w a i t p i d ( p i d ,   0 ,   0 ) ;         s t r u c t   u s e r _ r e g s _ s t r u c t   r e g s ;         p t r a c e ( P T R A C E _ G E T R E G S ,   p i d ,   0 ,   & r e g s ) ;         / *   I s   t h i s   s y s t e m   c a l l   p e r m i t t e d ?   * /         i n t   b l o c k e d   =   0 ;         i f   ( i s _ s y s c a l l _ b l o c k e d ( r e g s . o r i g _ r a x ) )   {                 b l o c k e d   =   1 ;                 r e g s . o r i g _ r a x   =   - 1 ;   / /   s e t   t o   i n v a l i d s y s c a l l                 p t r a c e ( P T R A C E _ S E T R E G S ,   p i d ,   0 , & r e g s ) ;         }         / *   R u n   s y s t e m   c a l l   a n d   s t o p   o n   e x i t   * /         p t r a c e ( P T R A C E _ S Y S C A L L ,   p i d ,   0 ,   0 ) ;         w a i t p i d ( p i d ,   0 ,   0 ) ;         i f   ( b l o c k e d )   {                 / *   e r r n o   =   E P E R M   * /                 r e g s . r a x   =   - E P E R M ;   / /   O p e r a t i o n   n o t p e r m i t t e d                 p t r a c e ( P T R A C E _ S E T R E G S ,   p i d ,   0 , & r e g s ) ;         } } # d e f i n e   S Y S _ x p l e d g e   1 0 0 0 0 # d e f i n e _ G N U _ S O U R C E # i n c l u d e < u n i s t d . h > # d e f i n e X P L E D G E _ R D W R     ( 1   < <   0 ) # d e f i n e X P L E D G E _ O P E N     ( 1   < <   1 ) # d e f i n e x p l e d g e ( a r g )   s y s c a l l ( S Y S _ x p l e d g e ,   a r g )
x p l e d g e   t r a c e r E N O S Y S s u c c e s s ( 0 ) t r a c e r L i n u x P t r a c e P T R A C E _ S Y S M U *   n u l l p r o g r a m F B A l p h a _ h 4 c k F r e e B u f . C O M / * H a n d l e   e n t r a n c e   * / s w i t c h ( r e g s . o r i g _ r a x )   {         c a s e   S Y S _ p l e d g e :                 r e g i s t e r _ p l e d g e ( r e g s . r d i ) ;                 b r e a k ; } / * H a n d l e   e x i t   * / s w i t c h ( r e g s . o r i g _ r a x )   {         c a s e   S Y S _ p l e d g e :                 p t r a c e ( P T R A C E _ P O K E U S E R ,   p i d ,   R A X   *   8 , 0 ) ;                 b r e a k ; } $ . / e x a m p l e f r e a d ( " / d e v / u r a n d o m " ) [ 1 ] =   0 x c d 2 5 0 8 c 7 X P l e d g i n g . . . X P l e d g e f a i l e d :   F u n c t i o n   n o t   i m p l e m e n t e d f r e a d ( " / d e v / u r a n d o m " ) [ 2 ] =   0 x 0 b e 4 a 9 8 6 f r e a d ( " / d e v / u r a n d o m " ) [ 1 ] =   0 x 0 3 1 4 7 6 0 4 $ . / x p l e d g e   . / e x a m p l e f r e a d ( " / d e v / u r a n d o m " ) [ 1 ] =   0 x b 2 a c 3 9 c 4 X P l e d g i n g . . . f o p e n ( " / d e v / u r a n d o m " ) [ 2 ] : O p e r a t i o n   n o t   p e r m i t t e d f r e a d ( " / d e v / u r a n d o m " ) [ 1 ] =   0 x 2 e 1 b d 1 c 4 f o r ( ; ; )   {         p t r a c e ( P T R A C E _ S Y S E M U ,   p i d ,   0 ,   0 ) ;         w a i t p i d ( p i d ,   0 ,   0 ) ;         s t r u c t   u s e r _ r e g s _ s t r u c t   r e g s ;         p t r a c e ( P T R A C E _ G E T R E G S ,   p i d ,   0 ,   & r e g s ) ;         s w i t c h   ( r e g s . o r i g _ r a x )   {                 c a s e   O S _ r e a d :                         / *   . . .   * /                 c a s e   O S _ w r i t e :                         / *   . . .   * /                 c a s e   O S _ o p e n :                         / *   . . .   * /                 c a s e   O S _ e x i t :                         / *   . . .   * /                 / *   . . .   a n d   s o   o n   . . .   * /         } }

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则