امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
نویسنده پیام
sylvester آفلاین
تازه وارد

ارسال‌ها: 19
موضوع‌ها: 7
تاریخ عضویت: شهریور ۱۳۸۷

تشکرها : 5
( 2 تشکر در 2 ارسال )
ارسال: #1
چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
سلام به همه

من قصد دارم مسیری را که یک برنامه دارد از آن استفاده میکند و در رم کامپیوتر درج شده است را پیدا کنم
برنامه نرم افزار الکول 120 درصد است
پروسه این برنامه را با نرم افزار winhex باز کردم و به قسمت primary memory رفتم

مسیر مانند زیر در بین کدهای هگز قابل تشخیص است

[تصویر:  alcohol.jpg]

من چگونه میتوان آن تکه را که نهایتا به آدرس پوشه plugins اشاره دارد بطورت استرینگ بگیرم؟ همون قسمتی که دورش را کادر کشیدم؟
ممنون میشم راهنمایی کنید دوستان؟
۰۷-بهمن-۱۳۸۸, ۰۲:۰۰:۳۸
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

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

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #2
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
شما باید محتویات پروسه رو dump کنین و داخلش دنبال متن مورد نظرتون بگردین یا مستقیم داخل فضای پروسه با استفاده از تابع ReadProcessMemory دنبال متن مورد نظرتون باشین

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۰۷-بهمن-۱۳۸۸, ۱۱:۱۸:۲۰
وب سایت ارسال‌ها
پاسخ
sylvester آفلاین
تازه وارد

ارسال‌ها: 19
موضوع‌ها: 7
تاریخ عضویت: شهریور ۱۳۸۷

تشکرها : 5
( 2 تشکر در 2 ارسال )
ارسال: #3
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
(۰۷-بهمن-۱۳۸۸, ۱۱:۱۸:۲۰)lord_viper نوشته است: شما باید محتویات پروسه رو dump کنین و داخلش دنبال متن مورد نظرتون بگردین یا مستقیم داخل فضای پروسه با استفاده از تابع ReadProcessMemory دنبال متن مورد نظرتون باشین

سلام
با تشکر از شما

میشه پارامتر های این api را توضیح بدید که هرکدام چی هست و از کجا باید بدستشون آورد. (مثلا هندل پروسه را از کجا بگیرم)

Public Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
۰۷-بهمن-۱۳۸۸, ۱۲:۳۷:۳۲
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

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

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #4
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
هندل پروسه رو با تابع OpenProcess
lpbaseAddress:ادرس محل شروع
lpbufer:ادرس محلی که اطلاعات باید در ان قرار گیرد(مثلا یک ارایه از char)
size که همان طول ارایه شماست یا طولی که در نظر دارید خوانده بشه
lpnumberofbytewriten هم حجم اطلاعاتی هست که خوانده شده هست که یک متغییر از نوع integer بهش پاس میدن

همین

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۰۷-بهمن-۱۳۸۸, ۱۴:۰۶:۱۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : sylvester
sylvester آفلاین
تازه وارد

ارسال‌ها: 19
موضوع‌ها: 7
تاریخ عضویت: شهریور ۱۳۸۷

تشکرها : 5
( 2 تشکر در 2 ارسال )
ارسال: #5
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
سلام
من بعد از چند روز کار و درگیری امروز باز روی برنامم کار کردم و به یه مشکل برخورد کردم
اون اینه که من الان میتونم به حافظه مورد استفاده برنامه الکول که هدف من هست دسترسی پیدا کنم و آن رو بخونم. حالا باید دنبال نام ه یکی دو فایل بگردم و مسیر ذخیره شدن آنها را استربگ بگیرم
مشکلم اینه که نمیدونم چجوری این کار زا انجام بدم ! :(
تنها چیزی که به ذهنم رسید این بود که یه حلقه for next بنویسم و 16 تا 16 تا برم جلو و با تابع instr دنبال نام فایل های مورد نظرم بگردم
ولی مانند عکسی در در اولین پست گذاشتم افستها در مبنای هگزا دسیمال هست و حلقه کار نمیکنه و متغیری که افست شروع حلقه را معین میکنه باع اررور میشه! کامپایلر ایراد میگیره که type mismach
چکار کنم به نظر شما که حلقه مطابق افست ها بره جلو؟ کد نمونه هم در پایین میزارم
کد:
For i = 0 To 1050 Step 16

ReadProcessMemory pHandle, hex(i), buf, 20, 0&
Text4.Text = buf
If InStr(Text4.Text, "extra.dll") <> 0 Then
i = 1050
End If
Next i
CloseHandle pHandle
(آخرین ویرایش در این ارسال: ۱۵-بهمن-۱۳۸۸, ۰۰:۵۸:۰۵، توسط sylvester.)
۱۵-بهمن-۱۳۸۸, ۰۰:۵۶:۱۲
ارسال‌ها
پاسخ
sylvester آفلاین
تازه وارد

ارسال‌ها: 19
موضوع‌ها: 7
تاریخ عضویت: شهریور ۱۳۸۷

تشکرها : 5
( 2 تشکر در 2 ارسال )
ارسال: #6
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
جون جدتون هر کی بلده کمک کنه! گیرم بخدا
۱۵-بهمن-۱۳۸۸, ۱۵:۴۴:۴۵
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

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

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #7
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
type mismatch رو به کدوم ارگومان گیر میده؟
احتمالا به (hex(i ادرس رو به صورت Integer وارد کنین در ضمن کدتونو کامل بزارین تا بهتر بشه نظر داد

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۵-بهمن-۱۳۸۸, ۲۰:۴۲:۰۳
وب سایت ارسال‌ها
پاسخ
CRazYFULL غایب
مدیر بازنشسته
*****

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

تشکرها : 1546
( 2836 تشکر در 593 ارسال )
ارسال: #8
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
با جون جد مردم چه کار داری!!
اينو امتحان کن

کد:
Dim Buffer As String, DATLen As Long, I As Long
Buffer = Space(250000)

For I = 0 To 30
Call ReadProcessMemory(Handle, I * 290000, Buffer, 290000, DATLen)
    If DATLen > 0 Then
        If InStr(Buffer, "extra.dll") > 0 Then
        
        Text4.Text = Replace(Buffer, Chr(0), " ")
        
        Exit For
        End If
    End If

Next


بجای استفاده از textbox از متغير استفاده کن تأثير زيادی تو سرعت داره
۱۵-بهمن-۱۳۸۸, ۲۰:۴۵:۲۱
ارسال‌ها
پاسخ
sylvester آفلاین
تازه وارد

ارسال‌ها: 19
موضوع‌ها: 7
تاریخ عضویت: شهریور ۱۳۸۷

تشکرها : 5
( 2 تشکر در 2 ارسال )
ارسال: #9
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
(۱۵-بهمن-۱۳۸۸, ۲۰:۴۲:۰۳)lord_viper نوشته است: type mismatch رو به کدوم ارگومان گیر میده؟
احتمالا به (hex(i ادرس رو به صورت Integer وارد کنین در ضمن کدتونو کامل بزارین تا بهتر بشه نظر داد

بله همون HEX(i) خطا را ایجاد میکنه
کد نمونه که درست کار میکنه و به افست استایک اشاره داره در زیر میزارم.
افست مثال هست &H74760400

کد:
Dim hwnd As Long
Dim pid As Long
Dim pHandle As Long
Dim hProcess As Long
Dim buf As String * 16

hwnd = FindWindow(vbNullString, "alcohol 120%")
If (hwnd = 0) Then
MsgBox "Window not found!"
Exit Sub
End If
Text1.Text = hwnd & " " & Hex(hwnd)

GetWindowThreadProcessId hwnd, pid
Text2.Text = pid & " " & Hex(pid)

pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (pHandle = 0) Then
MsgBox "Couldn't get a process handle!"
Exit Sub
End If
Text3.Text = pHandle & " " & Hex(pHandle)
ReadProcessMemory pHandle, &H74760400, buf, 17, 0&
CloseHandle pHandle
Text4.Text = buf

حالا میخوام آدرس افست ها داینامیک بشه طبق اصلوبی که در تصویری که در پست 1 در ستون افست ها میبینید
توسط روالی مانند حلقه آدرسها طوری جایگزین آدرس ثابت بشن اینطوری
کد:
&H10000
&H10010
&H10020
&H10030

الی آخر.
(۱۵-بهمن-۱۳۸۸, ۲۰:۴۵:۲۱)CRazYFULL نوشته است: با جون جد مردم چه کار داری!!
اينو امتحان کن

[code]
.
.
.
.
.
بجای استفاده از textbox از متغير استفاده کن تأثير زيادی تو سرعت داره

دوست عزیز مقدار I * 290000 داره به آدرسی اشاره میکنه که ظاهرا وجود نداره و هیچ چیز جز رشته بلندی از فضای خالی برگشت داده نمیشه
با F8 نگاه کردم کمی هم دستکاری کردم باز نشد
(آخرین ویرایش در این ارسال: ۱۶-بهمن-۱۳۸۸, ۱۳:۲۲:۳۷، توسط sylvester.)
۱۶-بهمن-۱۳۸۸, ۱۳:۰۲:۵۶
ارسال‌ها
پاسخ
CRazYFULL غایب
مدیر بازنشسته
*****

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

تشکرها : 1546
( 2836 تشکر در 593 ارسال )
ارسال: #10
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
(۱۶-بهمن-۱۳۸۸, ۱۳:۰۲:۵۶)sylvester نوشته است: دوست عزیز مقدار I * 290000 داره به آدرسی اشاره میکنه که ظاهرا وجود نداره و هیچ چیز جز رشته بلندی از فضای خالی برگشت داده نمیشه
با F8 نگاه کردم کمی هم دستکاری کردم باز نشد

ميتونی مقدار فضا رو کم کنی، اما هرچه مقدار فضا بيشتر باشه مقدار بيشتری رشته از حافظه بر ميگردنه و تعداد حلقه ها کمتر ميشه و خيلی سريع تر به نتيجه ميرسه

معلومه که در اوايل حلقه مقدار Null بر ميگردنه چون ما مقدار فضا بيشتری از مقدار واقعيی برای خوندن اختصاص داديم
۱۶-بهمن-۱۳۸۸, ۱۸:۴۷:۰۸
ارسال‌ها
پاسخ
sylvester آفلاین
تازه وارد

ارسال‌ها: 19
موضوع‌ها: 7
تاریخ عضویت: شهریور ۱۳۸۷

تشکرها : 5
( 2 تشکر در 2 ارسال )
ارسال: #11
RE: چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟
(۱۶-بهمن-۱۳۸۸, ۱۸:۴۷:۰۸)CRazYFULL نوشته است:
(۱۶-بهمن-۱۳۸۸, ۱۳:۰۲:۵۶)sylvester نوشته است: دوست عزیز مقدار I * 290000 داره به آدرسی اشاره میکنه که ظاهرا وجود نداره و هیچ چیز جز رشته بلندی از فضای خالی برگشت داده نمیشه
با F8 نگاه کردم کمی هم دستکاری کردم باز نشد

ميتونی مقدار فضا رو کم کنی، اما هرچه مقدار فضا بيشتر باشه مقدار بيشتری رشته از حافظه بر ميگردنه و تعداد حلقه ها کمتر ميشه و خيلی سريع تر به نتيجه ميرسه

معلومه که در اوايل حلقه مقدار Null بر ميگردنه چون ما مقدار فضا بيشتری از مقدار واقعيی برای خوندن اختصاص داديم

سلام
مقدار i * 29000 یک عدد دسیمال درست میکنه. حتی اگر بافر را 20 کنیم مقدار خواندن هم 19 کنیم باز چیزی بر نمیگرده. یه تستی بگیرین متوجه موضوع میشید
آرگونمان ByVal lpBaseAddress As Any حتما باید عدد هگزا دسیمال باشه نه دسیمال تا درست کار کنه

اصلا صورت مسئله را بسیار ساده میکنم.
شما فقط اگر یک جنریتور بتونید درست کنید (با حلقه یا در چیز ه دیگری) که بتونه اعداد 8 بیتی مانند آنچه در زیر ستون offset در تصویر ضمیمه شده در پست 1 درست کنه کار تمومه :) فقط عدد درست بشه و بس

مثلا ار 0 تا 120 این درست بشه که با فاصله 16 تا 16 تا هست

00010000
00010010
00010020
00010030
00010040
00010050
00010060
00010070
00010080
00010090
000100A0
000100B0
000100C0
000100D0
000100F0
00010100
00010110
00010120
(آخرین ویرایش در این ارسال: ۱۶-بهمن-۱۳۸۸, ۲۱:۵۶:۴۰، توسط sylvester.)
۱۶-بهمن-۱۳۸۸, ۲۱:۵۱:۲۵
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  چگونگی دریافت اطلاعات لحظه ای بورس javad917 10 14,847 ۱۷-فروردین-۱۳۹۹, ۱۹:۰۳:۴۵
آخرین ارسال: mostafa2020
  کد مربوط به خروج برنامه par7_ir 2 6,103 ۱۸-شهریور-۱۳۹۸, ۱۲:۴۰:۳۷
آخرین ارسال: aban56
  خواندن و ارسال کردن اطلاعات با پورت سریال SBRE77 18 20,157 ۱۱-مهر-۱۳۹۷, ۰۹:۴۶:۲۸
آخرین ارسال: reza1354
Wink res چیست چکار میکند و چگونه یک res بسازیم HoseinVig 13 20,460 ۰۶-تير-۱۳۹۵, ۱۷:۵۰:۲۹
آخرین ارسال: Ghoghnus
  نیاز به راهنمایی درباره ارسال اطلاعات reza2010wf 2 3,830 ۲۶-شهریور-۱۳۹۴, ۱۱:۵۸:۰۷
آخرین ارسال: Ghoghnus
  مشکل ماژول گرفتن اطلاعات سیستم hossein161 1 2,792 ۲۰-شهریور-۱۳۹۴, ۱۵:۲۲:۲۲
آخرین ارسال: Payman62
  ارور out of memory مربوط به Adodc aleas 1 2,637 ۲۳-تير-۱۳۹۳, ۰۹:۳۳:۳۰
آخرین ارسال: tanhatarin
  گروه بندی اطلاعات automa 9 6,342 ۲۵-تير-۱۳۹۲, ۲۰:۳۲:۵۱
آخرین ارسال: automa
  اضافه کردن اطلاعات به بانک sql mehrdad8 2 2,877 ۱۹-تير-۱۳۹۲, ۱۴:۴۲:۴۸
آخرین ارسال: Di Di
  مرتب سازی اطلاعات DataGrid sepahbod 4 6,050 ۲۴-اردیبهشت-۱۳۹۲, ۱۲:۱۲:۱۶
آخرین ارسال: isaac23

پرش به انجمن:


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

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