امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 3
  • 1
  • 2
  • 3
  • 4
  • 5
خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
نویسنده پیام
vb.civil آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 2
تاریخ عضویت: اردیبهشت ۱۳۹۵

تشکرها : 5
( 3 تشکر در 3 ارسال )
ارسال: #1
خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
سلام دوستان

من میخوام یک عبارت متنی رو در اطلاعات موجود در حافظه رم مربوط به یک پراسس در حال اجرا جستجو کنم و آدرس اونو برداشت کنم و بعد مقدارشو عوض کنم

مشکلم جستجو کردن اون عبارت در حافظه هستش و گرفتن آدرسش در حافظه ؟
۰۴-فروردین-۱۳۹۷, ۱۱:۵۰:۲۷
ارسال‌ها
پاسخ
babyy آفلاین
مدیر بخش لینوکس
*****

ارسال‌ها: 3,063
موضوع‌ها: 146
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 34439
( 25354 تشکر در 9363 ارسال )
ارسال: #2
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
با نحوه اجرای برنامه های ویندوزی اشنا بشید
بعد نحوه ی کار با توابع API ویندوز رو یاد بگیرید
و تکنبکهای مربط با اینجکت رو درک کنید

و بعدش تمرین کنید و تلاش کنید بنویسیدش

۰۴-فروردین-۱۳۹۷, ۲۳:۱۴:۱۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1نفر
lord_viper غایب
مدیر کل انجمن
*****

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

تشکرها : 5123
( 9812 تشکر در 2642 ارسال )
ارسال: #3
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
با توابع read_process_memory میتونین یه بخش از حافظه برنامه رو بخونین و با تابع write_process_memory هم میتونین اون بخش رو تغییر بدین
البته قبلش با تابع open_process باید هندل اون پروسه رو بدست بیارین و آدرس محلی که اطلاعات اونجا هست تو حافظه رو داشته باشین

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۰۶-فروردین-۱۳۹۷, ۱۲:۳۴:۴۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1نفر, babyy, vb.civil
nImaarek آفلاین
badtrip
****

ارسال‌ها: 93
موضوع‌ها: 42
تاریخ عضویت: مهر ۱۳۸۹

تشکرها : 242
( 147 تشکر در 55 ارسال )
ارسال: #4
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
فکر کنم مشکل ایشون جست و جوی عبارت مورد نظر هست.

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them

Tell me, what you think about me
۰۷-فروردین-۱۳۹۷, ۲۳:۴۸:۴۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1نفر, babyy, vb.civil
vb.civil آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 2
تاریخ عضویت: اردیبهشت ۱۳۹۵

تشکرها : 5
( 3 تشکر در 3 ارسال )
ارسال: #5
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید تعجب - بهینه شده برای ورژن جدید 

اصلا نفهمیدم باید از کجا شروع کنم !

من میخوام آدرس مربوط به یه عبارت متنی رو در حافظه پیدا کنم . . .

کار با توابع API رو تا حدودی بلدم
۰۸-فروردین-۱۳۹۷, ۱۵:۴۱:۳۸
ارسال‌ها
پاسخ
vb.civil آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 2
تاریخ عضویت: اردیبهشت ۱۳۹۵

تشکرها : 5
( 3 تشکر در 3 ارسال )
ارسال: #6
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
نقل قول: فکر کنم مشکل ایشون جست و جوی عبارت مورد نظر هست.


بله دقیقا مشکلم همین هست

"جستجوی عبارت مورد نظر و گرفتن آدرس اون عبارت در حافظه "

چون با نرم افزار هایی مثل OllyDBG تونستم آدرس رو بگیرم و با توابعی که دوستمون بالا گفت مقدار رو تغییر دادم ولی اینکه اون آدرس رو من خودم با کد نویسی چه جوری بدست بیارم برام سواله
(آخرین ویرایش در این ارسال: ۰۸-فروردین-۱۳۹۷, ۱۵:۴۵:۱۴، توسط vb.civil.)
۰۸-فروردین-۱۳۹۷, ۱۵:۴۳:۰۳
ارسال‌ها
پاسخ
تشکر شده توسط : babyy
nImaarek آفلاین
badtrip
****

ارسال‌ها: 93
موضوع‌ها: 42
تاریخ عضویت: مهر ۱۳۸۹

تشکرها : 242
( 147 تشکر در 55 ارسال )
ارسال: #7
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
اینو تو stackoverflow پیدا کردم
کد:
#include <Windows.h>
#include <iostream>
#include <string>
#include <vector>

char* GetAddressOfData(DWORD pid, const char *data, size_t len)
{
   HANDLE process = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, FALSE, pid);
   if(process)
   {
       SYSTEM_INFO si;
       GetSystemInfo(&si);

       MEMORY_BASIC_INFORMATION info;
       std::vector<char> chunk;
       char* p = 0;
       while(p < si.lpMaximumApplicationAddress)
       {
           if(VirtualQueryEx(process, p, &info, sizeof(info)) == sizeof(info))
           {
               p = (char*)info.BaseAddress;
               chunk.resize(info.RegionSize);
               SIZE_T bytesRead;
               if(ReadProcessMemory(process, p, &chunk[0], info.RegionSize, &bytesRead))
               {
                   for(size_t i = 0; i < (bytesRead - len); ++i)
                   {
                       if(memcmp(data, &chunk[i], len) == 0)
                       {
                           return (char*)p + i;
                       }
                   }
               }
               p += info.RegionSize;
           }
       }
   }
   return 0;
}

int main()
{
   const char someData[] = "SomeDataToFind";
   std::cout << "Local data address: " << (void*)someData << "\n";

   //Pass whatever process id you like here instead.
   DWORD pid = GetCurrentProcessId();
   char* ret = GetAddressOfData(pid, someData, sizeof(someData));
   if(ret)
   {
       std::cout << "Found: " << (void*)ret << "\n";
   }
   else
   {
       std::cout << "Not found\n";
   }

   return 0;
}

اول با OpenProcess پروسس باز کرده بعد با VirtualQueryEx (فکر کنم خنده بلد − بهینه شده برای ورژن جدید ) برای دسترسی برای حافظه استفاده کرده و در نهایت با ReadProcessMemory حافظه و خونده و شروع به جست و جو کرده

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them

Tell me, what you think about me
۱۰-فروردین-۱۳۹۷, ۰۵:۰۳:۵۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, 1نفر, vb.civil
vb.civil آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 2
تاریخ عضویت: اردیبهشت ۱۳۹۵

تشکرها : 5
( 3 تشکر در 3 ارسال )
ارسال: #8
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
مرسی دوست عزیز

من این مقاله رو هم پیدا کردم که قراره حافظه اختصاص یافته به Notepad رو در یک فایل متنی ذخیره کنه

کدش با کدی که شما گذاشتید فرق داره؟ این با #C هست

http://www.codingvision.net/security/c-h...ess-memory
۱۱-فروردین-۱۳۹۷, ۰۹:۴۰:۵۵
ارسال‌ها
پاسخ
تشکر شده توسط : babyy
nImaarek آفلاین
badtrip
****

ارسال‌ها: 93
موضوع‌ها: 42
تاریخ عضویت: مهر ۱۳۸۹

تشکرها : 242
( 147 تشکر در 55 ارسال )
ارسال: #9
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
کدش که مسلما فرق داره خنده بلد − بهینه شده برای ورژن جدید 
ولی آره جفتشون از یه روش استفاده کردن

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them

Tell me, what you think about me
۱۱-فروردین-۱۳۹۷, ۰۹:۴۶:۲۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1نفر, vb.civil, babyy
vb.civil آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 2
تاریخ عضویت: اردیبهشت ۱۳۹۵

تشکرها : 5
( 3 تشکر در 3 ارسال )
ارسال: #10
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
متاسفانه من هر کاری کردم نتونستم از این کد جواب بگیرم غمگین - بهینه شده برای ورژن جدید

http://www.codingvision.net/security/c-h...ess-memory

این کد تبدیل شده هست

کد:
Imports System.Diagnostics
Imports System.IO
Imports System.Runtime.InteropServices
Public Class Form1
   ' REQUIRED CONSTS
   Private Const PROCESS_QUERY_INFORMATION As Integer = 1024
   Private Const MEM_COMMIT As Integer = 4096
   Private Const PAGE_READWRITE As Integer = 4
   Private Const PROCESS_WM_READ As Integer = 16

   ' REQUIRED METHODS
   Public Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Boolean, ByVal dwProcessId As Integer) As IntPtr
   Public Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByVal lpBuffer() As Byte, ByVal dwSize As Integer, ByRef lpNumberOfBytesRead As Integer) As Boolean
   Private Declare Sub GetSystemInfo Lib "kernel32.dll" (ByRef lpSystemInfo As SYSTEM_INFO)
   Private Declare Function VirtualQueryEx Lib "kernel32.dll" (ByVal hProcess As IntPtr, ByVal lpAddress As IntPtr, ByRef lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As UInteger) As Integer

   ' REQUIRED STRUCTS
   Public Structure MEMORY_BASIC_INFORMATION
       Public BaseAddress As Integer
       Public AllocationBase As Integer
       Public AllocationProtect As Integer
       Public RegionSize As Integer
       Public State As Integer
       Public Protect As Integer
       Public lType As Integer
   End Structure

   Public Structure SYSTEM_INFO
       Public processorArchitecture As System.UInt16
       Private reserved As System.UInt16
       Public pageSize As UInteger
       Public minimumApplicationAddress As IntPtr
       Public maximumApplicationAddress As IntPtr
       Public activeProcessorMask As IntPtr
       Public numberOfProcessors As UInteger
       Public processorType As UInteger
       Public allocationGranularity As UInteger
       Public processorLevel As System.UInt16
       Public processorRevision As System.UInt16
   End Structure
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       ' getting minimum & maximum address
       Dim sys_info As SYSTEM_INFO
       GetSystemInfo(sys_info)
       Dim proc_min_address As IntPtr = sys_info.minimumApplicationAddress
       Dim proc_max_address As IntPtr = sys_info.maximumApplicationAddress

       ' saving the values as long ints so I won't have to do a lot of casts later
       Dim proc_min_address_l As Long = CType(proc_min_address, Long)
       Dim proc_max_address_l As Long = CType(proc_max_address, Long)

       ' notepad better be runnin'
       Dim process As Process = Process.GetProcessesByName("ETABS")(0)

       ' opening the process with desired access level
       Dim processHandle As IntPtr = OpenProcess((PROCESS_QUERY_INFORMATION Or PROCESS_WM_READ), False, process.Id)
       Dim sw As StreamWriter = New StreamWriter("dump.txt")

       ' this will store any information we get from VirtualQueryEx()
       Dim mem_basic_info As MEMORY_BASIC_INFORMATION = New MEMORY_BASIC_INFORMATION
       Dim bytesRead As Integer = 0

       ' number of bytes read with ReadProcessMemory

       While (proc_min_address_l < proc_max_address_l)
           ' 28 = sizeof(MEMORY_BASIC_INFORMATION)
           VirtualQueryEx(processHandle, proc_min_address, mem_basic_info, 28)
           ' if this memory chunk is accessible
           If ((mem_basic_info.Protect = PAGE_READWRITE) AndAlso (mem_basic_info.State = MEM_COMMIT)) Then
             
               Dim buffer() As Byte = New Byte((mem_basic_info.RegionSize) - 1) {}
               ' read everything in the buffer above
               ReadProcessMemory(CType(processHandle, Integer), mem_basic_info.BaseAddress, buffer, mem_basic_info.RegionSize, bytesRead)
               ' then output this in the file
               Dim i As Integer = 0
               Do While (i < mem_basic_info.RegionSize)
                   'sw.WriteLine("0x{0} : {1}", (mem_basic_info.BaseAddress + i).ToString("X"), CType(buffer(i), Char))
                   sw.WriteLine("0x{0} : {1}", (mem_basic_info.BaseAddress + i).ToString("X"), Microsoft.VisualBasic.AscW(buffer(i)))
                   i = (i + 1)
               Loop
           End If

           ' move to the next memory chunk
           proc_min_address_l = (proc_min_address_l + mem_basic_info.RegionSize)
           proc_min_address = New IntPtr(proc_min_address_l)

       End While

       sw.Close()
       Console.ReadLine()
   End Sub
End Class
(آخرین ویرایش در این ارسال: ۱۶-فروردین-۱۳۹۷, ۱۲:۴۴:۳۳، توسط vb.civil.)
۱۶-فروردین-۱۳۹۷, ۱۲:۳۹:۳۶
ارسال‌ها
پاسخ
nImaarek آفلاین
badtrip
****

ارسال‌ها: 93
موضوع‌ها: 42
تاریخ عضویت: مهر ۱۳۸۹

تشکرها : 242
( 147 تشکر در 55 ارسال )
ارسال: #11
RE: خواندن اطلاعات یک پراسس در حال اجرا از رم ؟
کد که با زبان سی نوشته شده مشکلی نداره، حالا تو سی شارپ دیگه من نمیدونم
بهتره بگی هدفت چیه؟
میخوای چیکار کنی ؟

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them

Tell me, what you think about me
۱۷-فروردین-۱۳۹۷, ۲۰:۱۹:۱۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : 1نفر


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  جستجوی یک کلمه و کپی آن در تکس باکس Rain_Saeid 1 1,405 ۲۴-اسفند-۱۳۹۲, ۱۵:۳۴:۴۴
آخرین ارسال: Di Di
  اضافه کردن Button در حال اجرا برنامه robojalal 1 1,563 ۲۶-آبان-۱۳۹۲, ۰۹:۳۱:۵۷
آخرین ارسال: babyy
  جلوگیری از پاک شدن متن زمان رسیدن به یک کاراکتر مخصوص omidi1024 1 1,112 ۲۰-مهر-۱۳۹۲, ۱۰:۱۵:۲۳
آخرین ارسال: lord_viper
  [سوال] دریافت متن در حال تایپ از RichTextBox و غیر فعال بودن بقیه متن omidi1024 2 2,399 ۱۸-مهر-۱۳۹۲, ۲۰:۵۰:۳۲
آخرین ارسال: omidi1024
  مشکل در گرفتن اطلاعات از کام پورت kimiafars 6 6,209 ۲۹-تير-۱۳۹۲, ۲۰:۳۴:۴۱
آخرین ارسال: morrning
  اجرا کردن بازی یا برنامه Super Robot 4 3,322 ۲۹-تير-۱۳۹۲, ۲۰:۲۶:۲۰
آخرین ارسال: morrning
  [سوال] گزارش گیری 9 رکورد در یک صفحه گزارش Fery666 0 977 ۱۴-تير-۱۳۹۲, ۲۳:۲۲:۰۷
آخرین ارسال: Fery666
  يه سوال در مورد ذخيره كردن اطلاعات در يه txt es_7005 4 4,357 ۰۳-اسفند-۱۳۹۰, ۲۲:۴۶:۱۵
آخرین ارسال: جلالی
  تکه کد ویرایش اطلاعات در vb.net بانک اکسس yahoo1234 1 3,295 ۰۳-دى-۱۳۹۰, ۱۷:۳۱:۱۶
آخرین ارسال: parviz2012
  اطلاعات فارسی فرم در تمام ویندوز ها hamed_Arfaee 6 5,064 ۱۱-فروردین-۱۳۹۰, ۰۰:۲۹:۰۲
آخرین ارسال: hamed_Arfaee

پرش به انجمن:


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

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