目錄
問題如下:
解決:
總結:
問題如下:
脫殼的時候我下了硬體斷點:在PUSHAD的下一步檢視ESP,OD的左下角goto到esp指向的位址,然後右鍵下硬體斷點。
這樣再運作很容易就直接定位到了POPAD,看起來都挺順利的,很容易找到了OEP的位置。但是記憶體轉儲出來的exe打開無效果不運作,在110版本的OD中提示:“has entry point outside the code(as specified in the PE header)”。晚上我和同學讨論了下,他可以正常脫殼,我看到他是直接F8一點點一點點的找,最後找到POPAD的位置,或者CTRL+F直接搜尋POPAD然後找到位址,dump。沒有下斷點,我也用他的電腦試了下,可以。但是我在他的電腦上也設定硬體斷點之後,就和我的狀況一樣了。後來我取消硬體斷點,把硬體斷點都删除,直接dump,因為OEP的位址一直都是1332。也不行了。
我在這個上面發了求助,裡面是我的具體問題:
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1042292&page=1#pid28293988
解決:
解決的文章:https://zhidao.baidu.com/question/691492835131194084.html
https://www.52pojie.cn/thread-525321-1-1.html
WIN7已經驗證可行了,再去我的32位虛拟機看看,順便給虛拟機都做一次spa(把不用的垃圾都去掉,然後整理一下檔案),直接運作程式時出現下面的問題:
解決方法:搜尋Microsoft Visual C++ 2010 Redistributable Package ,安裝即可。https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=5555
還未解決,參照:解決方法:https://www.cnblogs.com/hrhguanli/p/3886490.html
然後就開始脫殼了。
我知道的并且可行的對于UPX的脫殼找OEP的幾種方法:
1.pushad的下一步,找到esp的值,OD左下角goto過去,下硬體斷點。然後再運作,直接定位到了popad那一部分。然後轉到oep即可(即找到oep的位址),dump即可。
然後下斷點:(跳過去選中第一個位元組即可)
2.直接ctrl+f搜尋popad直接看到oep的位置
3.利用ollybdg的dump插件,裡面有一個找oep的選項(但這個偶爾我的不可行。),點選後運作也直接過去了。
4.手動ctrl+f8追蹤,f7進入循環檢視下斷點,f9跳出繼續走。直到看到oep。
以下硬體斷點為例:
1.載入檔案看到如下:
2.F7或者F8單步向下一步:
3.記錄下esp的位址,到左下角goto
4.下硬體斷點:
5.F9運作,直接來到了POPAD的下面:
6.記錄下OEP的位址,或者可以f8一路向下,跳過那些小循環,來到OEP
7.記憶體轉儲
8. 不用手動修改EIP了,因為已經跳過去了,注意下面直接勾選修複IAT的選項,雖然好像說UPX不選這個也沒事,因為殼比較簡單,但選上吧。點選脫殼即可。
9.驗證可否運作:
偶爾可以成功。什麼鬼。dump了好幾個,1是沒有F8到OEP看到位址直接dump的,2是下面選擇方式1的,3是正常跳過去不用自己修改eip的。三個有時候某一個可以正常執行。
出現的錯誤如:
指令引用的記憶體,該記憶體不能為read :
是不是我一次性dump的太多了,删掉重新來。
10.不知道為什麼,發現對于XP系統選擇方式1可以成功,方式二就會出現上面的錯誤
如下:
去找一下方式1和方式2的差別:
https://www.pediy.com/kssd/pediy07/pediy7-659-5.htm
https://max.book118.com/html/2017/0422/101701603.shtm
https://www.docin.com/p-503474373.html
最後看雪:https://bbs.pediy.com/thread-20165.htm
好吧,我其實有點想弄清楚到底差別在哪,現在我不care了?。不選方式就好了!
總結:
1.盡量使用32位系統,win7系統。不要使用win10。
2.對于我等菜鳥,UPX脫殼無需勾選dump的方式1,2,自增煩惱
=====================
額,我又回來了,真是打臉。不選方式一XP系統還是無法執行出現這個錯誤:
啊!(╯‵□′)╯︵┻━┻
我去寫作業了。