frida 出現 expected a pointer 的原因及解決辦法


py腳本直接注入的話,cocos2d游戲會暫停在黑屏導致hook失敗。

一開始以為是有反調試,采用 https://www.jianshu.com/p/87769bc0f19e 的辦法,

frida -U -f com.app -l script.js --no-pause 

(,其中-f 即spwan,在程序最先啟動的時候注入。--no-pause是不暫停。這里就可以繞過正常程序反附加的保護措施,但是如果程序中還存在基於frida特征檢測的代碼,那么我們就需要根據其檢測點,來bypass檢測。)

確實是不暫停了,但加載的test1.js:

Interceptor.attach(Module.findExportByName("libcocos2dlua.so" , "luaL_loadbuffer"), {
onEnter: function(args) {
send("Function called!");
},
onLeave:function(retval){
send("Bye bye!");
}
});

卻出了

error:expected a pointer
at frida/runtime/core.js:502
at /test1.js

的錯誤提示。

從 https://www.codeleading.com/article/40892488269/ 發現是在剛啟動的時候, libcocos2dlua.so 還沒有加載,於是frida找不到這個 libcocos2dlua.so ,導致attach 失敗了,報了這個錯誤。該網頁但沒有解決方案。

最后在https://www.2cto.com/kf/201708/671160.html 發現,“再次運行代碼,保持應用處於啟動狀態,我們的代碼就能正常執行。具體操作為,先結束第一次運行的腳本,保持應用處於打開狀態,再次運行腳本,點擊“inspect using native code”按鈕后,程序的運行狀態如下圖所示。”

由此,嘗試了:

1、先運行frida服務端,端口進行轉發;
2、再在手機中運行目標apk,等一會,讓它加載上 libcocos2dlua.so 【經測試,啟動界面過后,到出現“進入游戲”這些字樣時候,就
加載上 libcocos2dlua.so
3、再 frida -U com.app -l script.js --no-pause,
(去掉了 -f 因為其中-f 即spwan,在程序最先啟動的時候注入,帶了F會從頭啟動一次,這時libcocos2dlua還沒來得及加載所以會報錯。)
然后會attch上,等待so的調用然后hook之……就可以了

--------------------

ps:利用objecttion 可觀察該程序在運行時都加加載了哪些so,觀察so都有哪些導出函數,從而有的放矢hook到真正的函數名。(當然也可以反編譯apk后找到 libcocos2dlua,再用IDA)https://www.anquanke.com/post/id/197657#h3-10

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM