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

2018-02-01 11:09:24 +08:00
 paparika
4274 次点击
所在节点    Linux
24 条回复
dirtycold
2018-02-01 12:07:20 +08:00
没办法获取自身的路径吧...
ipoh
2018-02-01 15:48:28 +08:00
先获取当前运行程序的路径,然后获取依赖的.so 文件列表
在.so 源文件中定义一段字符串,查找哪个.so 文件包含该字符串
VYSE
2018-02-01 15:56:24 +08:00
cat /proc/self/maps
sha256sum {path}
blahgeek
2018-02-01 16:40:31 +08:00
paparika
2018-02-01 17:22:54 +08:00
@ipoh @VYSE @blahgeek
谢谢几位,其实我本来想 so 库通过校验 hash 是否一致来判定自己是否被篡改,不过这个思路好像逗逼了,因为要提前编译好 so,然后会得到一个 hash 值,代码运行时找到 so 路径然后判断 hash 值是否一致,但是一旦把这个 hash 值编译进 so 库,库被改变,其 hash 也会变。。。。

其实是之前参考 stackoverflow 上的一个帖子: https://stackoverflow.com/questions/15318795/android-shared-library-integrity-protection

from Freedom_Ben:
'The best way to protect from modification is to take a SHA-2 of the .so after you compile it, and rehash each time at runtime, matching it against the known value.'

不过他没详细说怎么个操作
Arnie97
2018-02-01 17:25:13 +08:00
算储存 Hash 区域以外部分的 Hash 不就行了
blless
2018-02-01 17:28:24 +08:00
可以联网吗,可以联网就用请求的方式发到服务端校验
undeflife
2018-02-01 17:39:47 +08:00
用自己的证书对库文件签名?
paparika
2018-02-01 17:44:25 +08:00
@Arnie97 这思路不错,实际操作的话,用 readelf 之类的工具定位一下各个区的位置,然后计算的时候跳过去?
paparika
2018-02-01 17:44:54 +08:00
@blless 联网确实是一种思路
paparika
2018-02-01 17:45:16 +08:00
@undeflife 能具体点吗
qmm0523
2018-02-01 18:12:16 +08:00
so 库不加固的话,单纯检查哈希没有意义,直接把你哈希改掉就可以了。
还不如上个 vmp 壳
paparika
2018-02-01 18:23:15 +08:00
@qmm0523 有什么免费的加固方案推荐吗
Technetiumer
2018-02-01 20:55:01 +08:00
hash 被非對稱加密並簽名后存成獨立文件,so 庫讀取 hash 文件解密並驗證簽名以保證 hash 文件沒有被篡改,判斷自身是否與 hash 文件解密后的結果相符
zckevin
2018-02-01 21:05:01 +08:00
判断的逻辑和校验值都可以直接被改掉,还是得加壳吧。
tylerdurden
2018-02-01 21:06:33 +08:00
@Arnie97 这个方法赛高
ghostheaven
2018-02-01 22:25:21 +08:00
文件签名?
kaneg
2018-02-01 22:30:54 +08:00
java jarsigner 的思路是否可行?
ysc3839
2018-02-01 23:11:41 +08:00
@paparika 编译的时候 Hash 写一段固定的 Pattern,比如 AAAAAAAAAA,然后计算 Hash,把 Hash 覆盖掉这段 Pattern。计算的时候把 Hash 替换成 Pattern 然后算。
VYSE
2018-02-02 10:53:56 +08:00
@paparika #5 读 /proc/self/maps 找到自己 so 内存地址,然后把指针,长度传到 SHA256()函数里就行了

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

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

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

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

© 2021 V2EX