امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
کمک برای WriteProcessMemory
نویسنده پیام
sima_6600 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 149
موضوع‌ها: 23
تاریخ عضویت: شهریور ۱۳۸۶

تشکرها : 13
( 25 تشکر در 17 ارسال )
ارسال: #1
کمک برای WriteProcessMemory
سلام من میخوام با استفاده از API .یک مقدار از حافظه یک برنامه دیگه رو ویرایش کنم.ولی تا به حال با WriteProcessMemory کار نکردم.میخواستم از کسانی که با این تابع اشنای دارن یک مثال کوچیک برام بزنن.البته با توضیح کامل.نه این که فقط برنامه رو بنویسن و بگن همین.البته یک چیزای میدونم.ولی نه کامل.
ابتدا با بدست اوردن هندل پنجره برنامه بودنش رو ثابت میکنم بعد PID و Process Name و بعد فکر کنم مقدار Bufer و بعد ویرایش میکنم.ولی به صورت کد نمی توانم بعضی قسمت هاش رو مشکل دارم.شرمنده همه دوستان.

شاگرد كوچك
۰۳-اردیبهشت-۱۳۸۸, ۱۹:۴۸:۳۳
ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #2
RE: کمک برای WriteProcessMemory
WriteProcessMemory : نوشتن اطلاعات درمحدوده فضای ادرسی پروسه دیگر

کد:
BOOL WriteProcessMemory(

    HANDLE hProcess,
    LPVOID lpBaseAddress,    
    LPVOID lpBuffer,    
    DWORD nSize,    
    LPDWORD lpNumberOfBytesWritten     
   );
hProcess:هندل پروسه هدف که میخواهید در محدوده فضای ادرسی ان بنویسید
lpBaseAddress:Base Address محلی که میخواهید از انجا شرع به نوشتن کنید
lpBuffer:اشاره به buffer ی که اطلاعات توسط ان برای نوشتن منتقل می شود
nSize:مشخص کننده سایز اطلاعاتی که باید نوشته شوند . سایز به بایت میباشد
lpNumberOfBytesWritten:شاره به مقدار بایت نوشته شده در پروسه هدف این مقدار اختیاری می اشد


مقدار خروجی این تابع در حالت اجرای درست مقدار غیر 0 میباشد
۰۳-اردیبهشت-۱۳۸۸, ۲۱:۰۶:۲۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak
sima_6600 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 149
موضوع‌ها: 23
تاریخ عضویت: شهریور ۱۳۸۶

تشکرها : 13
( 25 تشکر در 17 ارسال )
ارسال: #3
RE: کمک برای WriteProcessMemory
ببخشید دوست من این چیزی که نوشتی به چه زبانی بود Delphi یا C ببین اینو من نوشتم ولی یک مشکل دارم.
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const PROCESS_ALL_ACCESS As Long = &H1F0FFF

Private Sub Command1_Click()
Dim hwnd As Long
Dim pid As Long
Dim pHandle As Long
Dim hProcess As Long

hwnd = FindWindow(vbNullString, "world")
If (hwnd = 0) Then
MsgBox "Window not found!"
Exit Sub
End If
GetWindowThreadProcessId hwnd, pid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If
WriteProcessMemory pHandle, &H18190C8, Text1.Text, Len(Text1.Text), 0&
CloseHandle hProcess
End Sub
خوب همین طور که میبینی من یک مقدار در حافضه رو دارم تغیر میدم ادرسش هم 018190C8 این هست که در بالا امده و مقدار Text1 رو مینویسه توش البته نمیدونم چرا تا این مرحله نمیرسه.و ارور میده
Couldn't get a process handl خوب حالا مشکل از چیه که نمیتوانم تو پروسه بنویسم.در ضمن چیزی که میخواهم بنویسم حتما باید Hex باشه.

شاگرد كوچك
۰۳-اردیبهشت-۱۳۸۸, ۲۱:۴۲:۲۸
ارسال‌ها
پاسخ
CRazYFULL غایب
مدیر بازنشسته
*****

ارسال‌ها: 792
موضوع‌ها: 27
تاریخ عضویت: تير ۱۳۸۵

تشکرها : 1546
( 2836 تشکر در 593 ارسال )
ارسال: #4
RE: کمک برای WriteProcessMemory
کد:
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const PROCESS_ALL_ACCESS As Long = &H1F0FFF

Private Sub Command1_Click()
Dim hwnd As Long
Dim pid As Long
Dim pHandle As Long
Dim hProcess As Long

hwnd = FindWindow(vbNullString, "world")
If (hwnd = 0) Then
MsgBox "Window not found!"
Exit Sub
End If
GetWindowThreadProcessId hwnd, pid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If
WriteProcessMemory pHandle, &H18190C8, Text1.Text, Len(Text1.Text), 0&
CloseHandle hProcess
End Sub

اين مشگلی نداره و درست کار ميکنه
۰۳-اردیبهشت-۱۳۸۸, ۲۲:۳۱:۰۶
ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak
sima_6600 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 149
موضوع‌ها: 23
تاریخ عضویت: شهریور ۱۳۸۶

تشکرها : 13
( 25 تشکر در 17 ارسال )
ارسال: #5
RE: کمک برای WriteProcessMemory
ولی فعلا که نمیشه باش پروسه رو باز کرد و درش تغیری ایجاد کرد.خوب حالا میگین چه کار کنم.

شاگرد كوچك
۰۴-اردیبهشت-۱۳۸۸, ۰۱:۱۷:۱۷
ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak
saeedsmk آفلاین
مدیر بخش کرک و کامپیوتر
*****

ارسال‌ها: 506
موضوع‌ها: 74
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 677
( 1179 تشکر در 348 ارسال )
ارسال: #6
RE: کمک برای WriteProcessMemory
سلام
خوب هستيدد فكر كنم مشكلتون اينه كه شما داريد يك پروسس خارجي رو باز ميكنيد پس استرينگي كه ميخوايد بنويسيد يعني در واقعه بافر تون بايد از ادرس مموري پروسسي باشه كه مي خوايد توش بنويسيد يعني اينكه بافر تون بايد توسط copymem ويا virtualalocEX يك تكه از حافظه مورد نظر رو بگيري و بعد ادرس اون رو به بجاي text ات در writeprocessmemory بدي
به اميد ديدار

در دنياي كه مرگ شكارچي ان است بايد شكارچي بود - تعليمات دون خوان نوشته كارلوس كاستاندار
۰۴-اردیبهشت-۱۳۸۸, ۰۴:۲۷:۲۲
ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #7
RE: کمک برای WriteProcessMemory
اونی که کم نوشتم توضیحی از MSDN بود
اگه شما میخواهین متنی رو به word ارسال کنین چرا کارو پیچیده میکنین؟این راهش نیست
شما اول باید هندل بخشی از word که متن توش تایپ میشه رو پیدا کنین که کلاسش از نوع WwG_ هست وقتی این هندل رو پیدا کردین متن خودتونو تو یه حلقه با استفاده از sendmessage و wm_char به اون ارسال میکنین

در ضمن برای استفاده از WriteProcessMemory این کار شما در حالتی هست که بخواهین بخشی از حافظه رو Overwrite کنین در غیر این صورت شما باید برای اطلاعاتی که میخواهین تو پروسه مقصد بنویسین(همون طور که جناب SaeedSMK گفتن) با استفاده از VirtualAllocEX یک مقدار فضا به اندازه چیزی که میخواهین بنویسین اختصاص بدین
۰۴-اردیبهشت-۱۳۸۸, ۰۹:۴۳:۳۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : saeedsmk, Kadilak
sima_6600 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 149
موضوع‌ها: 23
تاریخ عضویت: شهریور ۱۳۸۶

تشکرها : 13
( 25 تشکر در 17 ارسال )
ارسال: #8
RE: کمک برای WriteProcessMemory
سلام بر همه word منضورم ofice نیست بابا یک برنامه میخواهم یک متغیر integer رو تغیر بدم در ضمن این پروسه خارجی هست و مال یک برنامه دیگه.خوب حالا به نظر شما چه کار کنم با زبان دیگه ای بنویسم.یا برم سرم رو بزارم بمیرم.

شاگرد كوچك
۰۴-اردیبهشت-۱۳۸۸, ۲۱:۲۴:۳۱
ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak
saeedsmk آفلاین
مدیر بخش کرک و کامپیوتر
*****

ارسال‌ها: 506
موضوع‌ها: 74
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 677
( 1179 تشکر در 348 ارسال )
ارسال: #9
RE: کمک برای WriteProcessMemory
سلام
عزيز توي نت درباره اين قسمت يعني تغيير يك تيكه از حافظه سرچ كني با كلمان كليدي writeprocessmemeory و VirtualAloctEX به نتيجه تون ميرسين و يا برنامه تون رو اپ كنيد بگيد كجاشو ميخواين تغيير بديد تا بشه كمك تون كرد
به اميد ديدار

در دنياي كه مرگ شكارچي ان است بايد شكارچي بود - تعليمات دون خوان نوشته كارلوس كاستاندار
۰۵-اردیبهشت-۱۳۸۸, ۰۲:۰۷:۳۹
ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak
ajlajlajl آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,192
موضوع‌ها: 70
تاریخ عضویت: مهر ۱۳۸۴

تشکرها : 932
( 2618 تشکر در 1020 ارسال )
ارسال: #10
RE: کمک برای WriteProcessMemory
من یه نمونه با C#.NET دارم. اگه بدردتون میخوره بگید بزارم.

میزان رای دشمن است!
[تصویر:  cff100.png]
۰۵-اردیبهشت-۱۳۸۸, ۲۰:۱۶:۲۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak
sima_6600 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 149
موضوع‌ها: 23
تاریخ عضویت: شهریور ۱۳۸۶

تشکرها : 13
( 25 تشکر در 17 ارسال )
ارسال: #11
RE: کمک برای WriteProcessMemory
من سورس رو گزاشتم.اگر میتوانی خوب کمک کن در بالا گزاشتمش.مشکل من اینه که هندل رو میگیرم PID و هم به دست میارم ولی پروسه رو نمیتوانم باز کنم که درش تغیری بدم.این پروسه طوری نیست که نشه.بازش کرد.بابا برنامه خفنی نیست.

شاگرد كوچك
۰۵-اردیبهشت-۱۳۸۸, ۲۰:۴۱:۰۸
ارسال‌ها
پاسخ
تشکر شده توسط : Kadilak


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS