控制程式碼--而不是跟隨程式碼--脫殼隨想
kongfoo/2004.4.11
多數情況下,脫殼時跟蹤程式碼通常都是讓程式碼帶著走,當然,在不
瞭解這個殼時只能跟著走。
控制程式碼在非常瞭解殼的程式碼流程的基礎上才有可能實現的。但這
是一種很有用的想法。
在掌握了殼的流程後,掌握了殼的原理後,你就可以隨心所欲地控
制程式碼流程了,因為你知道了哪些程式碼根本不需要執行,哪些必需執行。
兩者都要兼備--掌握殼的流程,掌握殼的原理。殼的流程就是指
某個殼的流程,殼的原理卻是泛指,加殼器的原理。通常加殼器都一樣:
解碼、加密、去原程式。只有具體技巧運用不同,有些用特殊指令解碼,
有些用驅動解碼。。。
有例子才好理解:對付COOLcryptor的父程式解碼。
在判斷是否作為子程式後,程式就要生成子程式並解碼了,這時直
接改EIP去解碼的程式碼,執行解碼。解碼後再改EIP去執行解了碼的程式碼,
這樣就完成人為控制解碼的操作了。
另外一個例子:對付用驅動解碼的殼。
解碼程式碼中會有特權指令,執行的話就會藍色畫面,第一次跟只能一個
一個地跳過特權指令,跟完解碼程式碼。這時將解碼結果儲存起來,再來
的時候就可以直接跳過解碼的一大段程式碼,直接去目的地把儲存了的代
碼打上去。
控制程式碼流程,執行需要的程式碼。感受在程式碼中任意遊走的快意。