環(huán)境搭建
安裝frida
python3.9 -m pip install frida
安裝frida-tools
pip3 -m pip install frida-tools
下載運行在目標(biāo)機上的frida-sever端,下載時要選擇對應(yīng)的版本下載拿诸,例如我的機器是模擬器波桩,架構(gòu)位x86_64拆吆,就選擇ffrida-server-14.2.18-android-x86_64下載排龄,然后解壓,把解壓的文件通過ADB命令push到手機的/data/local/tmp目錄下甲葬,同時通過chmod命令給文件夾賦予權(quán)限庭呜。
做完以上幾步后,新開一個命令行輸入命令frida-ps -U查看手機進程钢颂,如果出現(xiàn)以下結(jié)果钞它,則frida安裝成功。
hook java層
public class MainActivity extends AppCompatActivity {
private TextView textView;
private String hallo = "Hello World!!!!";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//xposed_init
textView = (TextView) findViewById(R.id.tv_text);
textView.setText(hallo);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(testFrida());
}
});
}
public String testFrida(){
return textView.getText().equals(hallo)? "change str" : hallo;
}
}
Python代碼
import frida #導(dǎo)入frida模塊
import sys #導(dǎo)入sys模塊
jscode = """ #從此處開始定義用來Hook的javascript代碼
Java.perform(function(){
var MainActivity = Java.use('com.example.testfrida.MainActivity'); //獲得MainActivity類
MainActivity.testFrida.implementation = function(){ //Hook testFrida函數(shù)殊鞭,用js自己實現(xiàn)
send('Statr! Hook!'); //發(fā)送信息遭垛,用于回調(diào)python中的函數(shù)
return 'Change String!' //劫持返回值,修改為我們想要返回的字符串
}
});
"""
def on_message(message,data): #js中執(zhí)行send函數(shù)后要回調(diào)的函數(shù)
print(message)
process = frida.get_remote_device().attach('com.example.testfrida') #得到設(shè)備并劫持進程com.example.testfrida(該開始用get_usb_device函數(shù)用來獲取設(shè)備操灿,但是一直報錯找不到設(shè)備锯仪,改用get_remote_device函數(shù)即可解決這個問題)
script = process.create_script(jscode) #創(chuàng)建js腳本
script.on('message',on_message) #加載回調(diào)函數(shù),也就是js中執(zhí)行send函數(shù)規(guī)定要執(zhí)行的python函數(shù)
script.load() #加載腳本
sys.stdin.read()
現(xiàn)在python腳本編寫完畢趾盐,我們來執(zhí)行該腳本庶喜,首先手機端執(zhí)行frida,然后通過命令adb forward tcp:27043 tcp:27043和adb forward tcp:27042 tcp:27042來轉(zhuǎn)發(fā)這兩個端口救鲤,接著在手機上運行該應(yīng)用程序久窟,在命令行中執(zhí)行腳本(python3.9 test_frida.py),最后點擊應(yīng)用的按鈕本缠,即可看到字符串已經(jīng)被替換成我們要替換的了3饪浮!丹锹!