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