.so 库如何在运行时获取自己的 SHA-2? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
paparika
V2EX    Linux

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

  •  
  •   paparika 2018 年 2 月 1 日 4851 次点击
    这是一个创建于 3004 天前的主题,其中的信息可能已经有所发展或是发生改变。
    24 条回复    2018-02-03 00:05:42 +08:00
    dirtycold
        1
    dirtycold  
       2018 年 2 月 1 日
    没办法获取自身的路径吧...
    ipoh
        2
    ipoh  
       2018 年 2 月 1 日
    先获取当前运行程序的路径,然后获取依赖的.so 文件列表
    在.so 源文件中定义一段字符串,查找哪个.so 文件包含该字符串
    VYSE
        3
    VYSE  
       2018 年 2 月 1 日
    cat /proc/self/maps
    sha256sum {path}
    paparika
        5
    paparika  
    OP
       2018 年 2 月 1 日
    @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
        6
    Arnie97  
       2018 年 2 月 1 日 via Android
    算储存 Hash 区域以外部分的 Hash 不就行了
    blless
        7
    blless  
       2018 年 2 月 1 日 via iPhone
    可以联网吗,可以联网就用请求的方式发到服务端校验
    undeflife
        8
    undeflife  
       2018 年 2 月 1 日
    用自己的证书对库文件签名?
    paparika
        9
    paparika  
    OP
       2018 年 2 月 1 日
    @Arnie97 这思路不错,实际操作的话,用 readelf 之类的工具定位一下各个区的位置,然后计算的时候跳过去?
    paparika
        10
    paparika  
    OP
       2018 年 2 月 1 日
    @blless 联网确实是一种思路
    paparika
        11
    paparika  
    OP
       2018 年 2 月 1 日
    @undeflife 能具体点吗
    qmm0523
        12
    qmm0523  
       2018 年 2 月 1 日
    so 库不加固的话,单纯检查哈希没有意义,直接把你哈希改掉就可以了。
    还不如上个 vmp 壳
    paparika
        13
    paparika  
    OP
       2018 年 2 月 1 日
    @qmm0523 有什么免费的加固方案推荐吗
    Technetiumer
        14
    Technetiumer  
       2018 年 2 月 1 日
    hash 被非加密名后存成立文件,so 取 hash 文件解密名以保 hash 文件有被篡改,判自身是否 hash 文件解密后的果相符
    zckevin
        15
    zckevin  
       2018 年 2 月 1 日
    判断的逻辑和校验值都可以直接被改掉,还是得加壳吧。
    tylerdurden
        16
    tylerdurden  
       2018 年 2 月 1 日
    @Arnie97 这个方法赛高
    ghostheaven
        17
    ghostheaven  
       2018 年 2 月 1 日 via Android
    文件签名?
    kaneg
        18
    kaneg  
       2018 年 2 月 1 日
    java jarsigner 的思路是否可行?
    ysc3839
        19
    ysc3839  
       2018 年 2 月 1 日   1
    @paparika 编译的时候 Hash 写一段固定的 Pattern,比如 AAAAAAAAAA,然后计算 Hash,把 Hash 覆盖掉这段 Pattern。计算的时候把 Hash 替换成 Pattern 然后算。
    VYSE
        20
    VYSE  
       2018 年 2 月 2 日
    @paparika #5 读 /proc/self/maps 找到自己 so 内存地址,然后把指针,长度传到 SHA256()函数里就行了
    VYSE
        21
    VYSE  
       2018 年 2 月 2 日
    @VYSE #20 至于文件真 SHA256,通过版本号联网,本地太容易被改,除非上证书签名
    BXLR
        22
    BXLR  
       2018 年 2 月 2 日
    app 拿来测试下
    paparika
        23
    paparika  
    OP
       2018 年 2 月 2 日
    @ysc3839 偷天换日,聪明!
    ysc3839
        24
    ysc3839  
       2018 年 2 月 3 日
    @paparika 这也是在网上看到的思路
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1219 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 66ms UTC 17:48 PVG 01:48 LAX 10:48 JFK 13:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86