当前位置:文档之家› python操作

python操作

修改进程内存
# -*- coding:utf-8 -*-
# file: ModifyMemory.py
#
from ctypes import *
# 定义_PROCESS_INFORMATION结构体
class _PROCESS_INFORMATION(Structure):
_fields_ = [('hProcess', c_void_p),
('hThread', c_void_p),
('dwProcessId', c_ulong),
('dwThreadId', c_ulong)]
# 定义_STARTUPINFO结构体
class _STARTUPINFO(Structure):
_fields_ = [('cb',c_ulong),
('lpReserved', c_char_p),
('lpDesktop', c_char_p),
('lpTitle', c_char_p),
('dwX', c_ulong),
('dwY', c_ulong),
('dwXSize', c_ulong),
('dwYSize', c_ulong),
('dwXCountChars', c_ulong),
('dwYCountChars', c_ulong),
('dwFillAttribute', c_ulong),
('dwFlags', c_ulong),
('wShowWindow', c_ushort),
('cbReserved2', c_ushort),
('lpReserved2', c_char_p),
('hStdInput', c_ulong),
('hStdOutput', c_ulong),
('hStdError', c_ulong)]
# 定义NORMAL_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS = 0x00000020
# 加载kernel32.dll
kernel32 = windll.LoadLibrary("kernel32.dll")
# 获得CreateProcess函数地址
CreateProcess = kernel32.CreateProcessA
# 获得ReadProcessMemory函数地址ReadProcessMemory = kernel32.ReadProcessMemory # 获得WriteProcessMemory函数地址WriteProcessMemory = kernel32.WriteProcessMemory TerminateProcess = kernel32.TerminateProcess
# 声明结构体
ProcessInfo = _PROCESS_INFORMATION()
StartupInfo = _STARTUPINFO()
# 要进行修改的文件
file = 'ModifyMe.exe'
# 要修改的内存地址
address = 0x0040103c
# 缓冲区地址
buffer = c_char_p("_")
# 读入的字节数
bytesRead = c_ulong(0)
# 缓冲区大小
bufferSize = len(buffer.value)
# 创建进程
if CreateProcess(file, 0, 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, byref(StartupInfo), byref(ProcessInfo)):
# 读取要修改的内存地址,以判断是否是要修改的文件
if ReadProcessMemory(ProcessInfo.hProcess, address, buffer, bufferSize, byref(bytesRead)): if buffer.value == '\x74':
# 修改缓冲区内值,将其写入内存
buffer.value = '\x75'
# 修改内存
if WriteProcessMemory(ProcessInfo.hProcess, address, buffer, bufferSize, byref(bytesRead)):
print '成功改写内存!'
else:
print '写内存错误!'
else:
print '打开了错误的文件!'
# 如果不是要修改的文件,则终止进程
TerminateProcess(ProcessInfo.hProcess,0)
else:
print '读内存错误!'
else:
print '不能创建进程!'
批量重命名
# -*- coding:utf-8 -*-
# file: rename.py
#
import os
perfix = 'Python' # perfix 为重命名后的文件起始字符
length = 2 # length 为除去perfix后,文件名要达到的长度base = 1 # 文件名的起始数
format = 'mdb' # 文件的后缀名
# 函数PadLeft将文件名补全到指定长度
# str 为要补全的字符
# num 为要达到的长度
# padstr 未达到长度所添加的字符
def PadLeft(str , num , padstr):
stringlength = len (str)
n = num - stringlength
if n >=0 :
str=padstr * n + str
return str
# 为了避免误操作,这里先提示用户
print 'the files in %s will be renamed' % os.getcwd()
input = raw_input('press y to continue\n') # 获取用户输入
if input != 'y': # 判断用户输入,以决定是否执行重命名操作exit()
filenames = os.listdir(os.curdir) # 获得当前目录中的内容
# 从基数减1,为了是下边i = i + 1在第一次执行时等于基数
i = base - 1
for filename in filenames: # 遍历目录中内容,进行重命名操作
i = i+1
# 判断当前路径是否为文件,并且不是“rename.py”
if filename != "rename.py" and os.path.isfile(filename):
name = str(i) # 将i转换成字符
name = PadLeft(name,length,'0') # 将name补全到指定长度
t = filename.split('.') # 分割文件名,以检查其是否是所要修改的类型
m = len(t)
if format == '': # 如果未指定文件类型,则更改当前目录中所有文件
os.rename(filename,perfix+name+'.'+t[m-1])
else: # 否则只修改指定类型
if t[m-1] == format:
os.rename(filename,perfix+name+'.'+t[m-1])
else:
i = i - 1 # 保证i连续
else:
i = i - 1 # 保证i连续。

相关主题