11

プロセスの開始/ベースアドレスを取得するにはどうすればよいですか? 例として Solitaire.exe (solitaire.exe+BAFA8)

#-*- coding: utf-8 -*-
import ctypes, win32ui, win32process


PROCESS_ALL_ACCESS = 0x1F0FFF
HWND = win32ui.FindWindow(None,u"Solitär").GetSafeHwnd()
PID = win32process.GetWindowThreadProcessId(HWND)[1]
PROCESS = ctypes.windll.kernel32.OpenProcess(PROCESS_ALL_ACCESS,False,PID)

print PID, HWND,PROCESS

メモリ アドレスを計算したいのですが、そのためには solitaire.exe のベース アドレスが必要です。

これが私が意味することの写真です:

メモリアドレス

4

3 に答える 3

2

GetModuleHandleによって返されるハンドルは、実際には指定されたモジュールのベースアドレスだと思います。NULLを渡すことにより、exeのハンドルを取得します。

于 2012-10-24T09:01:20.347 に答える
1

GetModuleHandleの HMDOULE 値は、ロードされたモジュールのベース アドレスであり、おそらくオフセットを計算するために必要なアドレスです。

そうでない場合、そのアドレスはモジュール (DLL/EXE) のヘッダーの開始であり、dumpbinVisual Studio に付属のユーティリティを使用して表示するか、Microsoft PE および COFF 仕様AddressOfEntryPointを使用して自分で解釈し、 andBaseOfCodeを決定することができます。ベースアドレスからのオフセット。モジュールのベース アドレスが必要なものでない場合は、これら 2 つのうちの 1 つが別のオプションになります。

例:

>>> BaseAddress = win32api.GetModuleHandle(None) + 0xBAFA8
>>> print '{:08X}'.format(BaseAddress)
1D0BAFA8

AddressOfEntryPointorBaseOfCodeが必要な場合は、PE 仕様に従ってctypes呼び出してオフセットを見つけるか、単に を使用してオフセットを学習する必要があります。ReadProcessMemorydumpbin /headers solitaire.exe

于 2012-10-28T02:07:15.033 に答える
1

pydbg をインストールする

ソース: https://github.com/OpenRCE/pydbg

非公式のバイナリはこちら: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pydbg

from pydbg import *
from pydbg.defines import *

import struct

dbg = pydbg()

path_exe = "C:\\windows\\system32\\calc.exe"

dbg.load(path_exe, "-u amir")
dbg.debug_event_loop()

parameter_addr = dbg.context.Esp #(+ 0x8)

print 'ESP (address) ',parameter_addr


#attach not working under Win7 for me

#pid = raw_input("Enter PID:")
#print 'PID entered %i'%int(pid)
#dbg.attach(int(pid)) #attaching to running process not working

現在はあまり活発ではありませんが、PaiMei をご覧になることをお勧めします https://github.com/OpenRCE/paimei

attach() を機能させることができず、代わりに load を使用しました。Pydbg には、read_process_memory、write_process_memory などの機能がたくさんあります。

オペレーティング システムは他のプロセスのメモリをプロセスから保護するため (保護モード)、ランダムにメモリを変更することはできないことに注意してください。x86 プロセッサの前には、すべてのプロセッサがリアル モードで実行できるもの、つまりすべてのプログラムがメモリに完全にアクセスできるものもありました。悪意のないソフトウェアは、通常 (常に?) 他のプロセスのメモリを読み書きしません。

于 2012-10-24T14:05:06.107 に答える