本帖最后由 Simon21ic 于 2013-6-13 19:18 编辑
首先,为别人做个广告,虽然技术很简单,产品也不一定热卖,不过,下面会分析一下他的binary代码:
https://bbs.21ic.com/forum.php?mod=viewthread&tid=434231
既然分析了别人的代码,那也为他贡献一些东西吧:
STM32的uclinux移植,虽然可以使用,但是核心内存管理部分有致命的BUG,修复方法如下:
uClinux-dist/linux-2.6.x/include/asm-arm/memory.h中,找到
#define PHYS_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT)
改成:
#define PHYS_PFN_OFFSET (CONFIG_EXTERNAL_RAM_BASE >> PAGE_SHIFT)
原理是,由于是plat的内存构架,所以linux可管理的内存从0x68000000开始,而不是从0x20000000开始。
当然,只分析一些简单的,ST没有公开的东西(虽然也非常简单),我也不会公开。
另外,本帖只是演示要**cortex-m的binary有多容易,并且,不会回答任何问题。
废话不多说,简单演示一下,怎么分析别人的binary代码,得到想要的东西:
首先,中断向量:
好的,程序入口在0x08000145,去那边看看:
已经经过一些简单的分析了,那个mem_init其实是mem_init_and_jump_to_main
到了main后......
默认9600的baudrate是不是慢了一些?
当然,我不需要分析这么多,我只需要得到载入uclinux的代码,看看是否有什么特殊操作。
说明文档中,jump命令用来进入uclinux,那就简单搜索字符串“jump"
之后貌似就没什么问题了,另外,顺便说一下,真正要**你的程序的人,不是这么看汇编的,而是这么看的:
jump的代码就在这个图中:
jump的代码序号是7,然后,看后面:
分析汇编代码很难吗?随便弄一段短的给你们看看吧:
对于合格的黑客,这种反汇编就像玩一样,**的时间,是用分钟来计算的。
有人可能会说什么AES,DES等加密算法,我说这些公开的算法只是shit。
AES调用前,一般会有s-box和反向的s-box,如果使用标准的,一看s-box,马上就知道,即使使用自定义的,AES_prepare的算法的分析,也可以用分钟来算**时间。
DES的话,就更加简单了,key更短。3DES只不过调用3次DES。
写在后面,你是怎么保护你的产品的呢?
一些基本的扩展阅读:暴力**,花指令
|