Brumo |
Отправлено: 09 Марта, 2021 - 19:10:53
|
Наблюдатель
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2020
Репутация: 7
|
Kibor пишет: Ну получили указатель. Что делать будете с указателем?
через python изменить значение string
p.s. чтобы не получать указатель в python, думал может есть возможность сразу в kibore
p.p.s. начинаю думать что это плохая идея)
(Добавление)
Brumo пишет: p.p.s. начинаю думать что это плохая идея)
одна из причин, второй день не могу понять как передать нуль-символ в конец строки,с новым значением, как только не пробовал, все равно выводит с мусором после него
с int, char проблем не было, а тут облом..(Отредактировано автором: 09 Марта, 2021 - 19:16:51) |
|
|
Brumo |
Отправлено: 10 Марта, 2021 - 13:44:10
|
Наблюдатель
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2020
Репутация: 7
|
Zireael , прямую запись в переменную,
для управления скриптом, без использования pipe, буфера, чтение из файла и т.д. и т.п., на данный момент из python.
не изменяя, не добавляя ничего в сам скрипт, ну максимум, для упрощения кода python: fwrite(address(#s)); - записать указатель в файл, потом считать пайтоном
p.s. повторюсь, с int, char[0] проблем нет, но если в скрипте имеются строки, хотелось бы иметь возможность менять и их, не переписывая скрипт
(Добавление)
в чем загвоздка на данный момент:
CODE:
string s="aaaaaaa";
messagebox (s);
textout(0, 100, 100, s, 1);
pause(5000);//на это этапе записываем в переменную bbb
resettextout(1);
messagebox (s);
textout(0, 100, 100, s, 1);
Отладчик:
Цитата:
messagebox ( s'aaaaaaa' )
textout ( 0 , 100 , 100 , s'aaaaaaa' , 1 )
pause ( 5000 ) //на это этапе записываем в переменную bbb
resettextout ( 1 )
messagebox ( s'bbb' )
textout ( 0 , 100 , 100 , s'bbb' , 1 )
messagebox выводит новое значение
а вот texout мусор
до изменения
после(Отредактировано автором: 10 Марта, 2021 - 13:52:24) |
|
|
Brumo |
Отправлено: 10 Марта, 2021 - 21:53:57
|
Наблюдатель
Покинул форум
Сообщений всего: 28
Дата рег-ции: Февр. 2020
Репутация: 7
|
test.py (Отобразить)
CODE:
import ctypes as c
from ctypes import wintypes as w
from ctypes import *
from subprocess import getoutput
process_info = getoutput('wmic process where "name like \'%{}%\'" get Processid'.format('kibor.exe')) # name process kibor.exe
pid = int(process_info.split()[1])
print('pid: {}'.format(pid))
k32 = c.windll.kernel32
OpenProcess = k32.OpenProcess
OpenProcess.argtypes = [w.DWORD,w.BOOL,w.DWORD]
OpenProcess.restype = w.HANDLE
ReadProcessMemory = k32.ReadProcessMemory
ReadProcessMemory.argtypes = [w.HANDLE,w.LPCVOID,w.LPVOID,c.c_size_t,c.POINTER(c.c_size_t)]
ReadProcessMemory.restype = w.BOOL
WriteProcessMemory = k32.WriteProcessMemory
WriteProcessMemory.argtypes = [w.HANDLE,w.LPVOID,w.LPCVOID,c.c_size_t,c.POINTER(c.c_size_t)]
WriteProcessMemory.restype = w.BOOL
GetLastError = k32.GetLastError
GetLastError.argtypes = None
GetLastError.restype = w.DWORD
CloseHandle = k32.CloseHandle
CloseHandle.argtypes = [w.HANDLE]
CloseHandle.restype = w.BOOL
processHandle_r = OpenProcess(0x10, False, pid)
e = GetLastError()
print('processHandle_read: {}, err code: {}'.format(processHandle_r,e))
processHandle_w = OpenProcess(0x20|0x0008, False, pid)
e = GetLastError()
print('processHandle_write: {}, err code: {}'.format(processHandle_w,e))
bytesRead = c.c_ulong()
f = open('pointer.txt')
read_pointer = f.read()
print('read_pointer: {}'.format(read_pointer))
addr = int(read_pointer)
string_read = c.c_ulong()
# прочитать указатель
result_read = ReadProcessMemory(processHandle_r, addr, c.byref(string_read), 4, c.byref(bytesRead))
e = GetLastError()
print('result read: {}, err code: {}, string_read: {}'.format(result_read,e,string_read.value))
addr = string_read.value
string_write = b"bbb"
size_string = len(string_write)
# записать строку
result_write = WriteProcessMemory(processHandle_w, addr, string_write, size_string, c.byref(bytesRead))
e = GetLastError()
print('result write_string: {}, err code: {}'.format(result_write,e))
# записать null(bytes(0)) в конец строки
result_write_null = WriteProcessMemory(processHandle_w, addr+size_string, [color=red]bytes(0)[/color], 1, c.byref(bytesRead))
e = GetLastError()
print('result write_null: {}, err code: {}'.format(result_write_null,e))
CloseHandle(processHandle_r)
CloseHandle(processHandle_w)
скрипт kibor (Отобразить)
CODE:
string s="aaaaaaa";
string s1;
fopen ("C:\python_test\pointer.txt", "w");
fwrite(address(#s));
fclose();
textout(0, 760, 320, "string s=^""+s+"^"", 1);
messagebox ("string s=^""+s+"^""+"^n^n"+"============"+"^n^nзапустить python");
resettextout(1);
textout(1, 760, 340, "string s=^""+s+"^"", 1);
messagebox ("string s=^""+s+"^"");
s1=s;
textout(2, 760, 360, "string s1=^""+s1+"^"", 1);
messagebox ("string s1=^""+s1+"^"");
(Добавление)
пока правил, заметил что messagebox тоже некорректно выводит, затирает кавычки, выводит bbb+4 пробела
(Добавление)
в test.py надо добавить f.close()
Цитата:
f = open('pointer.txt'
read_pointer = f.read()
f.close()
print('read_pointer: {}'.format(read_pointer))
|
|
|
|