sys_open module wrapping 관련 질문입니다.

shalomq의 이미지

wapping.c 의 소스입니다

#include
#include
#include
#include

#define __NR_open 5 // sys_open() system call number
#define __NR_getuid 24 // sys_getuid() system call number

void **sys_call_table;

asmlinkage int (*org_sys_open)( const char*, int, int );
asmlinkage int (*org_sys_getuid)( void );

asmlinkage int sys_our_open( char *fname, int flags, int mode )
{
printk( KERN_ALERT "%s file is opened by %d\n", fname, org_sys_getuid() );
return (org_sys_open( fname, flags, mode ) );
}

static void **find_system_call_table( void )
{
unsigned long ptr;
extern int loops_per_jiffy;
unsigned long *p;

for ( ptr = ( unsigned long )&loops_per_jiffy;
ptr < ( unsigned long )&boot_cpu_data ; ptr += sizeof( void* ) )
{
p = ( unsigned long * )ptr;
if ( p[ 6 ] == ( unsigned long ) sys_close )
{
return (void**)p;
}
}

return NULL;
}

int __init sct_init( void )
{
sys_call_table = find_system_call_table();

if( sys_call_table != NULL )
{
printk( KERN_ALERT "I think sys_call_table is at 0x%p\n",
sys_call_table );
org_sys_open = sys_call_table[ __NR_open ];
sys_call_table[ __NR_open ] = sys_our_open;
org_sys_getuid = sys_call_table[ __NR_getuid ];
}
else
{
printk( KERN_ALERT "Failed to find sys_call_table\n" );
}
return 0;
}

void __exit sct_exit( void )
{
sys_call_table[ __NR_open ] = org_sys_open;
}

module_init( sct_init );
module_exit( sct_exit );

MODULE_LICENSE( "GPL" );

이렇고요

make 하여 insmod wrapping 을 하면

커널 메세지로 I think sys_call_table 주소는 xxxxxxxxxxxx 이렇게 나옵니다.

문제는 wrapping 이 안됩니다. 그냥 기본적인 sys_open 만 하고 끝나더군요

그래서 /boot/System.map 에서 System_call_table 주소를 찾아보았떠니

wrapping.c 에서 찾은 주소와 틀린것입니다.

System_call_table 주소를 찾는 루틴이 잘못된거 같기도 하고요..

해결책 부탁드립니다.

운영체제는 페도라6(2.6.18-1.2798.fc6-i386) 입니다.

bushi의 이미지

편법은 점점 더 쓰기 어려워집니다.

유저모드의 뭔가를 감시하기 위한 목적이라면 http://www.dazuko.org 를 들러보세요.

OTL

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.