每一個EXE程式,大家知道里面有各種段,如執行代碼段TEXT,資源段,資料段等,在未運行時的代碼,我想它叫靜態代碼,如果運行,系統為其分配空間,各段分配在不同的地址空間,EXE程式有一個CALL函式,我除錯時跟進去,反匯編獲取這個函式的代碼(十六進制),將這代碼在靜態EXE程式內搜索(用WINHEX打開的),卻怎么也搜不到這段代碼,有時候哪怕內個位元組,也搜不到,能決議一下為什么找不到嗎,我知道EXE加載到記憶體后一些指令的運算元會變,我盡量不用有操作的代碼來搜,也難搜到,請指點,謝謝!
uj5u.com熱心網友回復:
是否有加殼或加密?uj5u.com熱心網友回復:
不是字串 搜索 ! 是 binary 搜索 !uj5u.com熱心網友回復:
即 是 機器碼 搜索 (不是 JNC xx)uj5u.com熱心網友回復:
殼 或 虛擬機uj5u.com熱心網友回復:
是機器碼搜索,沒錯的,反匯編出來的十六進制碼,另外,是一個普通的MFC編譯的EXE,程式也沒有優化選項,自己編的,沒殼uj5u.com熱心網友回復:
那可能你定位的CALL的在EXE外的DLL空間范圍中, 設定斷點看呼叫堆疊uj5u.com熱心網友回復:
“是機器碼搜索,沒錯的,反匯編出來的十六進制碼”“十六進制碼” 不是 機器碼,要 回到 2進制
uj5u.com熱心網友回復:
需要搜代碼的二進制值,即機器碼,而不是匯編碼uj5u.com熱心網友回復:
請使用“ IDA “ is the Interactive DisAssembler:uj5u.com熱心網友回復:
不知為什么,最近老不能上圖
這樣的,假設代碼在記憶體中看到的是:
8b f4 6a 00 ff 15 9c 7c 33 01 3b f4 e8 38 dc,我不能用這個來搜索嗎
uj5u.com熱心網友回復:
“假設代碼在記憶體中看到的是:8b f4 6a 00 ff 15 9c 7c 33 01 3b f4 e8 38 dc,”那么 應該 是 0x8B (139 , 是一個位元組 )而 “8B” 是 是 字串 ,是 2個 位元組 即 0x38 0x42 ,
WINHEX 把 binary 轉換為 Hex 格式 了。
在記憶體中看到的 都已經 轉換 為 Hex 了
uj5u.com熱心網友回復:
短一點uj5u.com熱心網友回復:
記憶體中其實已經是二進制了,只是他以十六進制的形式表示出來,WINHEX也是用HEX來顯示的,我搜的時候也是用HEX來搜,而不是字串
我再試試,有時候也只是搜七八個位元組,搜太少也不好,重復多,搜多了就搜不到
uj5u.com熱心網友回復:
運行代碼最終都是生成二進制形式,0xaa 0xff 那些機器碼了。按道理是應該能搜到的,如果搜不到靜態代碼,說明代碼加密了,虛擬機vmprotect那些殼,讓你搜不到原始代碼,uj5u.com熱心網友回復:
//BYTE HexValue(BYTE a)
{
a -= 48;// '0' 0x30
if(a >32) a -=32;// 'a' 0x61
if(a > 9 ) a -= 7;// 'A' 0x41
return a;
}
// "8b" = 139
BYTE Hex2Bytes(BYTE s[2])
{
BYTE v=0;
for(int ii=0 ;ii<2; ii++)
{
v <<=4;
v += HexValue(s[ii]);
}
return v;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/62486.html
標籤:進程/線程/DLL
下一篇:VC6中鏈接時出現error LNK2001: unresolved external symbol _rts_go
