我們在計算機建築學教授給我們,詢問密碼的示例程序。任務是在比較輸入的密碼並決定是否正確後更改跳轉操作碼。 我寫了一個程序,它可以在給定的二進制文件的特定位置更改任何字節。獲取二進制文件中的特定操作碼的準確位置
這裏的pasword程序的代碼:
int main(int argc, char* argv[]){
char *pw = "12441233";
char pass[32];
printf("Enter password:\n");
scanf("%s", pass);
if(strncmp(pass,pw,8))
{
printf("Password wrong\n");
exit(-1);
}
printf("Welcome\n");
}
所以我在控制檯中輸入$ objdump -d task
和得到這個:
...
400703:|| 48 8b 5d e8 || MOV -0x18(%RBP),%RBX
400707:|| 64 48 33 1c 25 28 00 || XOR%FS:0×28,%RBX
40070e:|| 00 00
400710:|| 74 05 || JE 400717
400712:|| e8 29 fe ff ff || callq 400540 < __stack_chk_fail @ PLT>
400717:|| 48 83 c4 58 ||加$將0x58,%RSP
40071b:|| 5b ||流行%RBX
...
74
是JE我想更改爲75
爲JNE字節。 我怎樣才能讓我的74
字節的確切位置在相應的二進制文件,這樣我可以把它改成一個新的價值?
在內存中的位置已經很少做在文件中的位置。你知道74 05之前和之後的字節值。搜索這些文件。 –
我知道內存地址與它無關,這就是爲什麼我問我還應該做些什麼。我需要它用於我的更改程序,它看起來像這樣:changebyte -d POSITION BYTE OLDFILE NEWFILE。我想我通過二進制編輯器搜索功能找到了相應的字節,但對於所需的解決方案,我需要一個可重複的wy來查找二進制文件中的位置。 – Max
這是linux還是windows?我可以給你一個Windows可執行文件的答案。 – Pyjong