咨询下RTT动态库的问题
请问大家谁用过RTthread的动态库,动态库的对程序代码的安全性如何评价?我曾用IDA研究过,貌似.mo文件可以清楚的看出来调用的逻辑过程和逻辑关系,包括底层函数。
这一点让我对此做法的安全性存疑。
如果对方直接破解我的应用代码和动态库,知道底层的情况下就会非常不安全。
尤其是在别人的平台上开发自己的应用,这个非常存疑。
另外,据我的经验RTthread的动态库和动态应用,必须使用系统提供的函数,才能去实现预定的功能,这个逻辑是否正确呢? 模块应用是需要在系统编译的时候导出相应的函数才行,如果有些函数没有导出,mo文件是跑不起来的,模块内部本身也可以实现一些自己的私有函数,要求跟系统无关的。但如果你确定了自己的芯片类型,也可以是自己去定义一些寄存器去调用的,只是通用性就差些。关于你提到的这个.mo反编译可以看到一些调用逻辑,其实在哪个平台都是可以反汇编看到一些调用关系的,所以像Windows上的一些应用才有了加壳这些操作。RTT内部也有微内核的版本,如果你们企业有这方面的需求或许找他们做些深入的定制比较适合。 电脑上一样存在,才有加壳。 本帖最后由 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 中,然后动态模块在使用内核接口的时候,通过遍历这个段的方式来进行函数调用。
不知道我的理解是否正确,请大神指教。
nongxiaoming 发表于 2019-12-25 10:13
模块应用是需要在系统编译的时候导出相应的函数才行,如果有些函数没有导出,mo文件是跑不起来的,模块内部 ...
好的,谢谢分析。
那个寄存器的操作提醒也是挺绝的 MurphyZhao 发表于 2019-12-25 10:33
没用过,rtthread 应该是支持的,我看到内核代码里很多 RTM_EXPORT,貌似就是用来支持动态模块的。
你的理解基本正确,所以动态模块和动态库,都需要加载进那个列表才可以使用。这我才引申了关于加密逻辑的需求。
逆向这个方法,我也是很熟悉的 huangqi412 发表于 2019-12-25 10:19
电脑上一样存在,才有加壳。
嗯,如果只是自己的产品还好,如果是依托于别人的产品,那就比较麻烦,加壳的话,自己其实也可以加,增加了加密算法就好了{:titter:} bryan_lia 发表于 2019-12-25 10:48
嗯,如果只是自己的产品还好,如果是依托于别人的产品,那就比较麻烦,加壳的话,自己其实也可以加,增加 ...
如果系统的BSP是你们自己开发的,那样你可以自己在执行mo文件前做些加解密的处理,然后执行就可以,就是发布mo文件的时候自己按自己的加解密算法处理过就可以了。mo文件本身就是load到内存执行的。 nongxiaoming 发表于 2019-12-25 10:59
如果系统的BSP是你们自己开发的,那样你可以自己在执行mo文件前做些加解密的处理,然后执行就可以,就是 ...
是的,问题就在于BSP 不是自己开发的,自己做的是核心功能和算法,所以用动态库就会被暴露
页:
[1]