記一次so的加密與踩的坑

  • 原理
    • so文件到底還是ELF文件,思路在于用__attribute__((section("{name}")))這個申明將核心代碼編譯后的二進制放入該section中,同時指定__attribute__((constructor))作為so加載進來的第一段代碼,在這個代碼中對section進行解密。
    • 加密的過程是將打包出來的so文件,進行二進制分析后,將核心代碼的section段的二進制進行加密編碼,在編寫cpp文件時,在初始化函數(shù)中進行解密。
    • 還可以根據(jù)這個原理,參照網(wǎng)上的方法進行二次加工。比如加密解密的方法等。
    • 如果用__attribute__((section("{name}")))指定的方法在申明函數(shù)處是不需要JNIExport和JNICall的,如果加上就會在.text段保存一份,在IDA還是一覽無余。
    • 不要想著因為代碼在編譯后都在.text段所以就想著把.text段加密,既然方法代碼都在.text當然也包括你的解密方法了,就發(fā)生了“死鎖”。

參考資料:
加密脫殼
如果按網(wǎng)上的方法修改了shoff引起的坑
偷so的控件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容