PDA

View Full Version : تغییر محتوی حافظه با زبان سی



Collector
شنبه 05 آذر 1390, 14:37 عصر
سلام

1- من میخوام با زبان سی محتوی یک خانه حافظه رو تغییر بدم .
2- و همچنین محتوی خانه خاصی از حافظه رو مشاهده کنم .

البته با اسمبلی میشه همچین کاری کرد ولی من میخوام با سی این کار را انجام بدم .

soorena
دوشنبه 07 آذر 1390, 17:17 عصر
سلام
فکر ميکنم از اونجايی که windows در محيط protected اجرا ميشه پس مشاهده و دستکاری محتوی يه خانه حافظه دلخواه نياز به استفاده از توابع api در windows داره.

#target
دوشنبه 07 آذر 1390, 19:14 عصر
از اشاره گر void * استفاده کنید !
نمونه کد که محتوی آدرس 400000 (در مبنای 16) رو بصورت رشته در نظر گرفته و چاپ می کنه .

#include <stdio.h>
int main()
{
void * x = (void *)0x400000;
printf( (char*)x );
}

Collector
دوشنبه 07 آذر 1390, 22:50 عصر
سلام
فکر ميکنم از اونجايی که windows در محيط protected اجرا ميشه پس مشاهده و دستکاری محتوی يه خانه حافظه دلخواه نياز به استفاده از توابع api در windows داره.

اگر امکان داره تابع رو ذکر کنید احتمالا باید از توابع کرنل باشه

soorena
دوشنبه 07 آذر 1390, 23:33 عصر
فکر ميکنم با توابع کار با پروسس ها باشه:
ReadProcessMemory
البته استفاده از اين تابع برای موقع اي است که شما ميخواين حافظه مربوط به يک پروسه خاص رو بخونی.

vcldeveloper
دوشنبه 07 آذر 1390, 23:40 عصر
در ویندوز در حالت عادی (در user mode) هیچ برنامه در حال اجرا (process) ایی دسترسی مستقیم به RAM نداره، بلکه همه برنامه ها به فضای آدرس دهی مجازی اختصاصی خودشان دسترسی دارند که ممکنه همه یا بخشی از آن توسط مدیر حافظه ویندوز به بخش یا بخش هایی از RAM نگاشت (map) شده باشه. پس در user mode شما نمی تونید یک آدرس حافظه از RAM بدید، و محتویاتش را تحویل بگیرید. البته می تونید آدرسی رو در فضای آدرس دهی مجازی برنامه خودتان بدید و محتویاتش را تحویل بگیرید، ولی اون آدرس مجازی خاص ممکنه به هر جایی از RAM نگاشت شده باشه.

برای اینکه بتونید در ویندوز مستقیما به RAM دسترسی داشته باشید، باید برنامه شما به مود کرنل (kernel mode) بره، و به عنوان یک درایور سطح کرنل، به محتوای RAM دسترسی پیدا کنه. برنامه نویسی برای کرنل ویندوز اصول و قواعد خاص خودش را داره، و اینطور نیست که بر فرض با دانستن اسم یک یا چند تابع، برنامه کرنل بنویسید و کار مورد نظرتان را انجام بدید. مستندات مربوط به توسعه درایورهای کرنل ویندوز از مستندات مربوط به توابع API سطح کاربر جدا ست، و تحت عنوان Windows DDK توسط مایکروسافت عرضه میشه. من توصیه می کنم نسخه ایی از Windows DDK را پیدا کنید، و مطالب مقدماتی آن را برای شروع به کار مطالعه کنید.

alamate_aoal
سه شنبه 08 آذر 1390, 09:06 صبح
Previously, the WDK was known as Windows Driver Development Kit (DDK) and supported Windows Driver Model (http://en.wikipedia.org/wiki/Windows_Driver_Model) development. It got its current name when Microsoft released Windows Vista (http://en.wikipedia.org/wiki/Windows_Vista) and added the following tools to the kit:


Windows Driver Foundation (http://en.wikipedia.org/wiki/Windows_Driver_Foundation) (WDF)
Installable File System (http://en.wikipedia.org/wiki/Installable_File_System) Kit (IFS Kit)
Driver Test Manager (http://en.wikipedia.org/wiki/Driver_Test_Manager) (DTM)

r00tkit
سه شنبه 08 آذر 1390, 09:14 صبح
سلام
علاوه به تائید صحبت های اقای کشاورز
بحث Memory از نظر من یکی از پیچیده ترین مباحث هستش

توی کرنل هم به طور معمول داری از virtual memory استفاده می کنی ، زمان XP می شد مستقیم توی یوزر مود به فیزیکال مموری دست رسی داشته باشی ، که این دست رسی از server 2003 sp1 به بعد برداشته شد .
اقای Mark Russinovich کدی داره که توی یوزر مود مستقیم توی فیزیکال مموری می نویسه
78496

Collector
سه شنبه 08 آذر 1390, 19:49 عصر
سلام
علاوه به تائید صحبت های اقای کشاورز
بحث Memory از نظر من یکی از پیچیده ترین مباحث هستش

توی کرنل هم به طور معمول داری از virtual memory استفاده می کنی ، زمان XP می شد مستقیم توی یوزر مود به فیزیکال مموری دست رسی داشته باشی ، که این دست رسی از server 2003 sp1 به بعد برداشته شد .
اقای Mark Russinovich کدی داره که توی یوزر مود مستقیم توی فیزیکال مموری می نویسه
78496

ممنون که پاسخ دادید

من هر چی گشتم کد آقای Mark Russinovich رو پیدا نکردم.
گر شما پیدا کردید در سایت قرار دهید تا استفاده کنیم.

r00tkit
چهارشنبه 09 آذر 1390, 09:01 صبح
http://nah6.com/~itsme/cvs-xdadevtools/itsutils/src/sysint-physmem.cpp

این کد فقط توی Xp کار می کنه

دست رسی به \\device\\physicalmemory توی ویندوز های بعدی برای user-mode برداشته شده ،( مهاجم می تونست با این section object یه Call gate نصب کنه و کد خودش رو توی kernel اجرا کنه )

Playing with Windows/dev/(k)mem (http://www.phrack.org/issues.html?issue=59&id=16)