pydbg測試例項(三)程序快照的獲取和恢復

2021-06-12 07:25:05 字數 2124 閱讀 6980

**《python灰帽子》第4章

目標:獲取程序快照和恢復程序

思路:開啟兩個執行緒,第一線程建立乙個pydbg偵錯程式物件,並用它載入乙個可執行程式;第二線程通過pydbg的方法process_snapshot()和process_restore()來獲取程序快照和恢復,在獲取快照或恢復的時候都要暫停程序的所有執行緒

snapshot.py

from pydbg  import *

from pydbg.defines import *

import threading

import time

import sys

class snapshotter(object):

def __init__(self,exe_path):

self.exe_path = exe_path

self.pid = none

self.dbg = none

self.running = true

# open debugger thread waiting for pid to be set

pydbg_thread = threading.thread(target=self.start_debugger)

pydbg_thread.setdaemon(0)

pydbg_thread.start()

while self.pid == none:

time.sleep(1)

# open second thread to snapshot the process

monitor_thread = threading.thread(target=self.monitor_debugger)

monitor_thread.setdaemon(0)

monitor_thread.start()

def monitor_debugger(self):

while self.running == true:

input = raw_input("enter: 'snap','restore' or 'quit'")

input = input.lower().strip()

if input == "quit":

print "[*] exiting the snapshotter."

self.running = false

self.dbg.terminate_process()

elif input == "snap":

print "[*] suspending all threads."

self.dbg.suspend_all_threads()

print "[*] obtaining snapshot."

self.dbg.process_snapshot()

print "[*] resuming operation."

self.dbg.resume_all_threads()

elif input == "restore":

print "[*] suspending all threads."

self.dbg.suspend_all_threads()

print "[*] restoring snapshot."

self.dbg.process_restore()

print "[*] resuming operation."

self.dbg.resume_all_threads()

def start_debugger(self):

self.dbg = pydbg()

pid = self.dbg.load(self.exe_path)

self.pid = self.dbg.pid

self.dbg.run()

exe_path = "c:/windows/system32/calc.exe"

snap = snapshotter(exe_path)

測試:

只在xp下可以成功,輸入restore後,計算器視窗並沒變化,要最小化後再開啟就可以看到效果

另外,對計算器記憶功能如ms的恢復不起作用

第三章 AWS快照建立例項啟動失敗排查解決

因業務需求,需要將生產環境的a例項複製乙份出來當做預生產環境使用。但是在aws使用快照的方式建立ec2例項的時候無法正常啟動,通過獲取aws ec2截圖能夠看到已經到了登入介面。在發現問題後嘗試使用ssm登入,但是卻無法登入進系統內部。後再停止例項執行,然後在執行例項,依然無法啟動。為了排查是vpc...

程序管理 三 程序的層次

在系統中,乙個程序建立了另外乙個程序後,父程序和子程序會以某種形式繼續保持一種聯絡。子程序可以建立更多的程序,進而組成乙個程序的層次結構。程序和它的所有子女和後裔程序共同組成乙個程序組。當使用者在從鍵盤發出乙個訊號的時候,該訊號會被送給當前鍵盤相關程序組中的成員,每個程序可以根據需要分別捕獲訊號 忽...

python 的介面測試例項

我們可以用jmeter做介面測試,但是呢個人覺得那個有點侷限性,用python就靈活很多,可以按自己的思路來構建比較靈活,下面給大家介紹乙個簡單的介面測試例項。一 我們的思路如下 首先我們要弄清楚我們的整個思路 1.先把我們的測試資料準備好,即post的資料 當然get方法也可以傳送請求資料 2.然...