說到逆向工程這個(gè)名詞,對很多人來說是很難理解的。今天我就手把手教大家怎么用逆向工程整MM。
嘻嘻,開始前先講一下思路。大家只要明白思路,再拓展開來就會(huì)有很多意想不到的收獲哦。我們在一個(gè)正常合法的程序上附加一段代碼。通過修改原程序的入口點(diǎn)跳到我們加的那段代碼上。執(zhí)行完成我們的代碼之后再跳回原來那個(gè)正常程序繼續(xù)執(zhí)行。
做以上的操作,我們需要的工具是Peid(偵殼工具),OllyDebug(動(dòng)態(tài)反匯編工具,以下簡稱OD)和LordPE(一個(gè)修改程序入口的工具)還有一個(gè)精彩的exe格式的Flash。
舉個(gè)簡單的例子,我們要做的就是Flash播放時(shí)。MM的QQ自動(dòng)退出。完成這個(gè)功能要用到一個(gè)DOS命令“taskkill/im QQ.exe/f”。還要調(diào)用一個(gè)WinExec函數(shù),這個(gè)函數(shù)的定義是運(yùn)行一個(gè)指定的應(yīng)用程序,即我們剛才的那個(gè)DOS命令。WinExec函數(shù)有兩個(gè)參數(shù),第一個(gè)是命令行。第二個(gè)是應(yīng)用程序的窗口(當(dāng)然是隱藏拉即SW__HIDE)
用Peid查Flash的殼。呵,當(dāng)然是沒殼!我們要用的是它的另外一個(gè)功能:在Flash中找一段O區(qū)域來寫入我們的代碼。,單擊“EP區(qū)段”右邊的“>”按鈕打開“節(jié)查看器”。按鼠標(biāo)右鍵選擇“搜索全0處”,彈出一個(gè)“全O處信息”,一共有4個(gè)空段,在里面我們只需記住“RVA”,RVA+基址400000=內(nèi)存偏移地址(即后面我們要用的OD的地址)。
現(xiàn)在我選取text區(qū)段的O區(qū)域。RVA為0013CC98,RVA+基址400000=0053CC98就是O區(qū)域的起點(diǎn),好了確定退出。
我們再用OD載入Flash,OD停下(如圖4),記住程序模塊入口004DC300,我們等下要跳回來哦!按“Ctrl+G”在彈出的輸入框中輸入剛才那個(gè)O區(qū)域的起點(diǎn)即0053CC98。點(diǎn)確定后快步來到O區(qū)域,不要在起點(diǎn)這里寫哦,向下3行來到0053CC9B。再把字符串“taskkill/im QQ.exe/f”寫入這個(gè)地址,很顯然這個(gè)地址不夠?qū)?,我們就往下拉一塊區(qū)域,然后點(diǎn)擊“二進(jìn)制編輯”,寫入代碼。
我們不能把字符串壓入堆棧,只能壓入存放字符串的地址,所以等下把存放這些字符串的首地址壓入就行了,即壓入0053CC98(記住這個(gè)地址)。
好繼續(xù)往下跳3行來到0053CCB7(記住這個(gè)地址成了新程序的入口!),現(xiàn)在我們要調(diào)用API函數(shù)。而API函數(shù)是從右到左調(diào)用的,即反過來我們就要把第二個(gè)參數(shù)先壓進(jìn)去。先寫“PUSH SW_HIDE”(也可以是PUSH 0,數(shù)字0代替SW_HIDE),再到“PUSH0053CC9B”(壓入剛才寫字符串的首地址)。最后“CALL WinExec”,再來一個(gè)大跳轉(zhuǎn)回到原來程序的入口即“jmp 004DC300”。
最后鼠標(biāo)左鍵拉取全部已經(jīng)修改過的代碼,按右鍵依次選擇“復(fù)制到可執(zhí)行文件”-“選擇”,保存退出。
再將剛才PUSHO的那個(gè)地址作為新程序入口。用LordPE修改保存。運(yùn)行一下,QQ自動(dòng)退出,F(xiàn)lash精彩播放,嘿嘿。
大家拓展一下,添帳號(hào)、開端口、刪文件都可以。