bryan_lia 发表于 2019-12-25 09:30:00

咨询下RTT动态库的问题

请问大家谁用过RTthread的动态库,动态库的对程序代码的安全性如何评价?

我曾用IDA研究过,貌似.mo文件可以清楚的看出来调用的逻辑过程和逻辑关系,包括底层函数。
这一点让我对此做法的安全性存疑。
如果对方直接破解我的应用代码和动态库,知道底层的情况下就会非常不安全。

尤其是在别人的平台上开发自己的应用,这个非常存疑。

另外,据我的经验RTthread的动态库和动态应用,必须使用系统提供的函数,才能去实现预定的功能,这个逻辑是否正确呢?

nongxiaoming 发表于 2019-12-25 10:13:44

模块应用是需要在系统编译的时候导出相应的函数才行,如果有些函数没有导出,mo文件是跑不起来的,模块内部本身也可以实现一些自己的私有函数,要求跟系统无关的。但如果你确定了自己的芯片类型,也可以是自己去定义一些寄存器去调用的,只是通用性就差些。关于你提到的这个.mo反编译可以看到一些调用逻辑,其实在哪个平台都是可以反汇编看到一些调用关系的,所以像Windows上的一些应用才有了加壳这些操作。RTT内部也有微内核的版本,如果你们企业有这方面的需求或许找他们做些深入的定制比较适合。

huangqi412 发表于 2019-12-25 10:19:20

电脑上一样存在,才有加壳。

MurphyZhao 发表于 2019-12-25 10:33:52

本帖最后由 MurphyZhao 于 2019-12-25 10:35 编辑

没用过,rtthread 应该是支持的,我看到内核代码里很多 RTM_EXPORT,貌似就是用来支持动态模块的。

#define RTM_EXPORT(symbol)                                          \
const char __rtmsym_##symbol##_name[] SECTION(".rodata.name") = #symbol;   \
const struct rt_module_symtab __rtmsym_##symbol SECTION("RTMSymTab")= \
{                                                                     \
    (void *)&symbol,                                                \
    __rtmsym_##symbol##_name                                          \
};

我的理解是,rtthread 将所有内核函数放到 ROM 中统一的段 RTMSymTab 中,然后动态模块在使用内核接口的时候,通过遍历这个段的方式来进行函数调用。

不知道我的理解是否正确,请大神指教。

bryan_lia 发表于 2019-12-25 10:44:11

nongxiaoming 发表于 2019-12-25 10:13
模块应用是需要在系统编译的时候导出相应的函数才行,如果有些函数没有导出,mo文件是跑不起来的,模块内部 ...

好的,谢谢分析。
那个寄存器的操作提醒也是挺绝的

bryan_lia 发表于 2019-12-25 10:45:39

MurphyZhao 发表于 2019-12-25 10:33
没用过,rtthread 应该是支持的,我看到内核代码里很多 RTM_EXPORT,貌似就是用来支持动态模块的。




你的理解基本正确,所以动态模块和动态库,都需要加载进那个列表才可以使用。这我才引申了关于加密逻辑的需求。
逆向这个方法,我也是很熟悉的

bryan_lia 发表于 2019-12-25 10:48:02

huangqi412 发表于 2019-12-25 10:19
电脑上一样存在,才有加壳。

嗯,如果只是自己的产品还好,如果是依托于别人的产品,那就比较麻烦,加壳的话,自己其实也可以加,增加了加密算法就好了{:titter:}

nongxiaoming 发表于 2019-12-25 10:59:33

bryan_lia 发表于 2019-12-25 10:48
嗯,如果只是自己的产品还好,如果是依托于别人的产品,那就比较麻烦,加壳的话,自己其实也可以加,增加 ...

如果系统的BSP是你们自己开发的,那样你可以自己在执行mo文件前做些加解密的处理,然后执行就可以,就是发布mo文件的时候自己按自己的加解密算法处理过就可以了。mo文件本身就是load到内存执行的。

bryan_lia 发表于 2019-12-26 08:56:45

nongxiaoming 发表于 2019-12-25 10:59
如果系统的BSP是你们自己开发的,那样你可以自己在执行mo文件前做些加解密的处理,然后执行就可以,就是 ...

是的,问题就在于BSP 不是自己开发的,自己做的是核心功能和算法,所以用动态库就会被暴露

页: [1]
查看完整版本: 咨询下RTT动态库的问题