OD修改軟件文本字符串內(nèi)容
軟件沒(méi)有殼的狀態(tài)下,可以修改軟件的資源,達(dá)到替換軟件內(nèi)容的功能。下面演示如何使用OD修改內(nèi)容。
要修改的軟件,運(yùn)行效果如圖
要求把內(nèi)容:“大家好” 修改成“你好嗎” 或者“我是古天樂(lè)”
一樣長(zhǎng)度的文本很好修改,不一樣的長(zhǎng)度的文本修改起來(lái)就要困難一點(diǎn)。
修改方法
“大家好” 修改成“你好嗎”
1.使用OD載入軟件,拖到最上面,在旁邊的注釋窗口,已經(jīng)給我們顯示出來(lái)了內(nèi)容了,那么我們就可以很方便的修改了。
修改之前,先看看程序運(yùn)行的原理,這兒拿易語(yǔ)言演示。
信息框 (“大家好”, 0, “我是渣渣輝”, ),這段代碼,在機(jī)器執(zhí)行的時(shí)候,把參數(shù)從右到左推入棧中
所以從上面的OD可以看到先PUSH的是“我是渣渣輝”
入棧后,就會(huì)調(diào)用相關(guān)命令,機(jī)器碼中是使用的CALL方法,如下圖,紅色標(biāo)注的為CALL方法
既然知道了原理,那么我們就動(dòng)手開(kāi)始修改吧。我們的第一個(gè)目標(biāo)是修改“大家好”為“你好嗎”
選擇 0040102C |. 68 8FD54700 push 測(cè)試.0047D58F ; ASCII "大家好"
這行數(shù)據(jù),右鍵->在數(shù)據(jù)窗口中跟隨->立即數(shù)
可以在下面的HEX數(shù)據(jù)窗口看到已經(jīng)跳到了指定的地址0047D58F,和上面機(jī)器碼push 測(cè)試.0047D58F 的十六進(jìn)制數(shù)一樣
選擇要修改的內(nèi)容,雙擊或者任意按鍵內(nèi)容,會(huì)彈出一個(gè)窗口,這個(gè)窗口就可以修改數(shù)據(jù)了
我們?cè)谏厦娴腁SCII窗口輸入要修改的內(nèi)容:“你好嗎”
輸入內(nèi)容顯示為亂碼,沒(méi)關(guān)系,點(diǎn)擊確定即可
【關(guān)于保持大小選項(xiàng),取消勾選,則內(nèi)容可以隨意長(zhǎng)度,不過(guò)可能保存后會(huì)溢出,導(dǎo)致程序運(yùn)行報(bào)錯(cuò)的情況】
可以看到,內(nèi)容已經(jīng)成功的被修改成了你好嗎
這個(gè)時(shí)候運(yùn)行程序,可以看到彈窗提示為“你好嗎”
“大家好” 修改成“我是古天樂(lè)”
上面的修改很簡(jiǎn)單,只要長(zhǎng)度一致就可以任意修改。如果長(zhǎng)度不一致,盡管有些時(shí)候可以取消勾選保持大小,但是很容易報(bào)錯(cuò)。可行的辦法則是在數(shù)據(jù)窗口找一塊空白的數(shù)據(jù)地址,鍵入內(nèi)容。
首先找一塊空白的區(qū)域,可以看到程序尾部有一大段空白的區(qū)域,那么這兒就能隨意的填充內(nèi)容。
按照上面的修改方法,修改內(nèi)容
文本開(kāi)始的地址為0048ED5F,這個(gè)則為數(shù)據(jù)地址,那么入棧也需要把這個(gè)數(shù)據(jù)推入
找到指令0040102C |. 68 8FD54700 push 測(cè)試.0047D58F ; ASCII "大家好"
雙擊修改匯編代碼,默認(rèn)入棧的地址為0047D58F,我們需要修改成我們添加文本的地址:0048ED5F
修改好以后,點(diǎn)擊匯編,則修改成功
運(yùn)行后成功,可以看到如下圖,提示被成功的修改了