我目前使用python腳本來運行AC可執行類似殺死一個C程序由python腳本
os.system("./a.out \"%s\" " %p)
有很多可用的二進制指令,我(I1,I2,I3執行.... I10準確地說)。我使用python中的itertools生成這些指令(長度爲1,2,3 ... 10)的排列組合。字符串有效載荷p(在上面的片斷中)就是這樣一種排列。我測量對各排列的時間如下:(這可能不是來測量時間最好的方法,但是這是另外一個問題一個問題。)
現在對於一些排列我得到分割故障並且python腳本繼續到另一個排列。但對於一些置換,我沒有得到任何響應(如卡在一個無限循環),如:
58 60 452 547 583 649 756 777 932 965
key Not found
(Nothing happens after this. This is due to bad combination
of instructions or bad payload.
I have to press ctrl C to proceed to next permutation)
^C---------------[9 8 ]------------
The gadget seq is [mov,ret xor eax,eax,ret ] and time taken is
0.000254 (this is the bad permutation of instructions)
(Next permutation..)
我按後按Ctrl + C,Python腳本去下一個排列。更清楚地說明
perm = itertools.permutations(gadget_list,2) #perm is list of all permutations of 2 instructions
for string in list(perm):
#generate the payload p from string which is one of the permutation
#feed it to c program and measure time
start = time.clock()
os.system("./a.out \"%s\" " %p)
print time.clock() - start
現在,對於更長的置換長度,對每個錯誤的有效載荷按Ctrl C變得單調乏味。有沒有什麼辦法可以自動化殺死/停止C程序(我按Ctrl C),由於有效負載卡住了,並繼續進行下一個排列?
那麼,我要用上面的代碼替換我的os.system()行?我應該在哪裏寫我的start = time.clock並打印time.clock() - 開始? – shane
'開始'''在Popen行之後,'''end'''在底部 –