so 库如何在运行时获取自己的 SHA-2?

2018-02-01 10:47:18 +08:00
 paparika
4727 次点击
所在节点    Android
8 条回复
enenaaa
2018-02-01 10:48:50 +08:00
找到自身的文件路径,读出来, 算。
paparika
2018-02-01 11:13:50 +08:00
@enenaaa 感谢,那就是直接去 /data/data/packagename/..下面找吗?有函数可以动态获取路径吗?
paparika
2018-02-01 11:29:39 +08:00
可以用这个 getApplicationInfo().nativeLibraryDir,感谢 @enenaaa
cs8425
2018-02-01 12:17:22 +08:00
我記得有 api 可以找出已載入的 section/segment 位址&大小
再去讀出來+計算
cs8425
2018-02-01 12:24:57 +08:00
再補充一下, 也可以解析'/proc/self/maps'找出 so 庫的路徑、segment 位址&大小, 看是要從記憶體還是從路徑讀取+計算
paparika
2018-02-01 12:30:54 +08:00
@cs8425。。。如果能直接对内存数据 hash 会更安全,那么 so 文件会原封不动映射到内存中吗( so 文件的 hash 和其被加载到内存中的 hash 一致)?
cs8425
2018-02-01 13:00:58 +08:00
@paparika #6
不會原封不動的映射整個 so,
會以 section/segment 當成單位(可能會有對齊的 padding), 有些一致有些不一定
舉例來說.text 會一致(除了某些奇葩程式自己去改自己的.text)
.data 是放資料的,會隨變數改變而改變
.rodata 是唯讀資料,理論上會一致(同.text)
詳細要去翻 elf 格式、各 section 用途、執行期間是怎載入
零零總總細節一堆...個人還是一知半解的狀態 orz
只能提供你一些思路了
paparika
2018-02-01 13:19:52 +08:00
@cs8425 学到了新知,十分感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/427635

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX