Belfigor au3
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору sproxy, спасибо! Сейчас буду разбираться Этот скрипт опирается на NomadMemory.au3 на команду MemoryRead: Код: ;================================================================================== ; Function: _MemoryRead($iv_Address, $ah_Handle[, $sv_Type]) ; Description: Reads the value located in the memory address specified. ; Parameter(s): $iv_Address - The memory address you want to read from. It must ; be in hex format (0x00000000). ; $ah_Handle - An array containing the Dll handle and the handle ; of the open process as returned by _MemoryOpen(). ; $sv_Type - (optional) The "Type" of value you intend to read. ; This is set to 'dword'(32bit(4byte) signed integer) ; by default. See the help file for DllStructCreate ; for all types. An example: If you want to read a ; word that is 15 characters in length, you would use ; 'char[16]' since a 'char' is 8 bits (1 byte) in size. ; Return Value(s): On Success - Returns the value located at the specified address. ; On Failure - Returns 0 ; @Error - 0 = No error. ; 1 = Invalid $ah_Handle. ; 2 = $sv_Type was not a string. ; 3 = $sv_Type is an unknown data type. ; 4 = Failed to allocate the memory needed for the DllStructure. ; 5 = Error allocating memory for $sv_Type. ; 6 = Failed to read from the specified process. ; Author(s): Nomad ; Note(s): Values returned are in Decimal format, unless specified as a ; 'char' type, then they are returned in ASCII format. Also note ; that size ('char[size]') for all 'char' types should be 1 ; greater than the actual size. ;================================================================================== Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword') If Not IsArray($ah_Handle) Then SetError(1) Return 0 EndIf Local $v_Buffer = DllStructCreate($sv_Type) If @Error Then SetError(@Error + 1) Return 0 EndIf DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '') If Not @Error Then Local $v_Value = DllStructGetData($v_Buffer, 1) Return $v_Value Else SetError(6) Return 0 EndIf EndFunc | К великому несчатью эта команда позволяет лишь извлекать данные кранящиеся в ячейке памяти. К примеру я знаю что в ячейке с адресом 0х12345678 хранится нужное мне число. С помощью этой команды я могу его запросить и работать с ним. Но мне нужен вариант, когда я знаю число, но незнаю где в памяти оно хранится (после перезапуска программы все данные меняют свои адреса). Тоесть я хотел спросить можно ли написать скрипт который будет находить мне в памяти процесса ту ячейку к которой я в последствии буду о бращаться. Как пример я привожу программу артмани. Тоесть в процессе проводится поиск всех ячеек памяти которые например содержат значение Х, и выводится их список. Потом значение изменяется и поиск проводится в уже найденном, и так постепенно сокращая область поиска найти нужное значение. | Всего записей: 20 | Зарегистр. 14-02-2009 | Отправлено: 14:09 04-03-2009 | Исправлено: Belfigor au3, 14:21 04-03-2009 |
|