程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Home鍵(小房子鍵)

Home鍵(小房子鍵)

編輯:C++入門知識

核心思想:objdump -d 找到關鍵匯編代碼,然後用ghex2 打開可執行程序,修改和匯編對應的機器碼,當然前提是對匯編足夠了解。

下面講一個簡單在linux上的例子:

1.   先建立一個簡單的程序,


[cpp]
#include <iostream>  
using namespace std;  
 
bool abc(){ 
    return false;  

 
int main(int argc, char *argv[]) 

    if(abc()){ 
        cout  <<  "hacked" << endl;  
    }else{ 
        cout  <<  "not hacked" << endl;  
    } 
    return 0;  

#include <iostream>
using namespace std;

bool abc(){
 return false;
}

int main(int argc, char *argv[])
{
 if(abc()){
  cout  <<  "hacked" << endl;
 }else{
  cout  <<  "not hacked" << endl;
 }
 return 0;
}
2.  用g++ main.cpp編譯成可執行程序a.out,

3.    運行./a.out 輸出:

 not hacked

4.  調用 objdump -d a.out > simple.txt

5.  在simple.txt中搜索abc,找到如下代碼


[cpp]
080486f4 <_Z3abcv>: 
 80486f4:   55                      push   %ebp 
 80486f5:   89 e5                   mov    %esp,%ebp 
 80486f7:   b8 00 00 00 00          mov    $0x0,%eax 
 80486fc:   5d                      pop    %ebp 
 80486fd:   c3                      ret  

080486f4 <_Z3abcv>:
 80486f4: 55                    push   %ebp
 80486f5: 89 e5                 mov    %esp,%ebp
 80486f7: b8 00 00 00 00        mov    $0x0,%eax
 80486fc: 5d                    pop    %ebp
 80486fd: c3                    ret 6.   然後用ghex2打開a.out, 搜 55 89  e5 b8 00 00 00 00, 找到這段匯編對應的機器碼的位置,

7.   最後到了關鍵一步, 把上面的一段機器碼改成 55 89  e5 b8 01 00 00 00, 其實只改了一個字,意思是把返回false改成返回true。

8.   再次運行./a.out 輸出: hacked。大功告成。

 

 

 

 


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved