打印
[AVR单片机]

奇怪的问题

[复制链接]
3602|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjz2000|  楼主 | 2008-1-26 16:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用ICC写AVR的程序,因要用到一个字符串(比如:ABCDEFG),程序中unsigned char *str="ABCDEFG";我并没有加CONST修饰,可ABCDEFG还是直接存放在Flash中,所以在生成的HEX码中可以直接看出ABCDEFG字符串.而我希望在HEX中看不到这串字符,各位高手,有没有好的办**

相关帖子

来自 2楼
lwtlwt| | 2008-2-9 15:11 | 只看该作者

re.

ICC里有一个选项:选择将字符串放在FLASH或RAM中,自己去看一个就明白了.
不过,即使在RAM中,也是从FLASH加载的,如果你不想被人看到,可以有N种方法:
1,使用FLASH地址绝对定位,将字符串中的各个字符不要放在连续的地址,在显示时再将它读取RAM的连续地址中.
2,将字符串中的每个字符加上一个固定的偏移量,显示时再减去这个偏移量,即使放在连续的地址中,别人也不能直接看到
3,使用查表法,将字符串的ASCII编码打乱.
4,将编译后的二进制代码的全部或部分作CRC运算,并将这个运算值存在一个特定的地方,系统启动时会重新计算一次CRC,并与之前保存的值作比较,如果不同则说明程序被修改.
 

5...
6...

使用特权

评论回复
来自 3楼
lwtlwt| | 2008-2-16 16:37 | 只看该作者

re.

将编译后的二进制代码的全部或部分作CRC运算,并将这个运算值存在一个特定的地方,系统启动时会重新计算一次CRC,并与之前保存的值作比较,如果不同则说明程序被修改.

使用特权

评论回复
地板
dai_weis| | 2008-1-26 17:22 | 只看该作者

好像不光是ICC,其他的也要放吧?

既然在定义的时候给了明确的结果,那么该字符串自然要保存在程序中,要不然放到哪里呢?如果用来加密要使用字典和加密算法

使用特权

评论回复
5
NE5532| | 2008-1-26 18:56 | 只看该作者

程序不放ROM放哪里啊

自己做数据加密吧

使用特权

评论回复
6
avr| | 2008-1-27 10:35 | 只看该作者

如果ROM中没有数据,装载什么到SRAM中去?

使用特权

评论回复
7
xjz2000|  楼主 | 2008-1-28 08:54 | 只看该作者

或许我没有说清楚问题关键点

当然要放在ROM中,我的意思是只要在HEX中不能直接看出我的字符串就行.当然是要加密,问题是怎么加密的问题.难道非得要人工将一个个字母加密,加到程序中(这样在源和序里就不能直接看到这串字符串,而只能在注释中注明)?因为写程序加密就会地HEX中看到.而我的字符串很长,又要常改动,人工加密不是办法的办法.所以是一个很麻烦的问题.请高手指点.

使用特权

评论回复
8
xjz2000|  楼主 | 2008-2-10 15:33 | 只看该作者

请问lwtlwt???

你的N种方法,说穿了也就是给字符加密。比如:*str="ABCDEFG",如果要用+5偏移量加密,就要写成*str="FGHIJK",变成自己看不懂的字符串,后面再加注释让自己看懂。我现在也是这样做的,我只是想问各位有没的更好的方法。

使用特权

评论回复
9
音乐乐乐| | 2008-2-10 16:25 | 只看该作者

呵呵,lz别费劲了,没有其他好办法.

使用特权

评论回复
10
hotpower| | 2008-2-10 16:46 | 只看该作者

HEX码能显示字符串真乃奇迹~~~

使用特权

评论回复
11
yewuyi| | 2008-2-11 08:45 | 只看该作者

同意LS

估计LZ是调到什么编程软件里面看的把

使用特权

评论回复
12
dld2| | 2008-2-11 09:00 | 只看该作者

参考Enigma加密机

使用特权

评论回复
13
啊龙| | 2008-2-11 17:37 | 只看该作者

LZ估计是让别人看不出来,那你加多点,或减多点,或有加有减,

ASIIC码字母字母区就行了.

使用特权

评论回复
14
xjz2000|  楼主 | 2008-2-15 09:17 | 只看该作者

我将问题再说清楚一点:

回复:"HEX码能显示字符串真乃奇迹~~~"  简单地,在烧录软件打开HEX码就可以看到字符.很多软件都有这功能.这个都不知道,请不要发言.
我的问题再说清楚一点:比如,我写一个软件,为了预防被人**直接用,就要在显示屏上显示我的公司名.可是因为**后的HEX文件上可以看到字符,**者只要简单地将我公司名改成他的公司名,只要保证字符数不变,软件就可以用了.他还可以轻易地将别的要显示的字符作修改.使用户觉得是一个完全不同的软件.实际上它只不过是我的软件的解密.**者也可以是一个完全不懂软件的人,因为不需要作任何反编译也能改软件.
所以才有要将字符加密的问题.但在源程序加密,非得手工加,写程序加密在HEX中还是可以看到字符而没有效果,但手工加密后我自己又看不懂了,变成只能加注释.并且多个字符的手工加密也麻烦,这不是一个好方法.
所以才有请问各位高手有没有更好的办法?

使用特权

评论回复
15
孤星119| | 2008-2-15 16:45 | 只看该作者

这个估计是要看怎么写代码了.

都能在HEX中看到字符了,不通过自己加密恐怕不行吧

使用特权

评论回复
16
dld2| | 2008-2-15 16:50 | 只看该作者

有多麻烦?没看出来

还可以用校验码

使用特权

评论回复
17
xjz2000|  楼主 | 2008-2-15 17:56 | 只看该作者

DLD2还是不知道我的问题所在

当然麻烦得很,因为程序中有主菜单和多级子菜单,每个菜单又有多个字符,而要手工一个一个加密当然麻烦了.现在不是讲加密方式,加密方法实在太多,用校验码也只是加密的方式之一.

使用特权

评论回复
18
xwj| | 2008-2-15 18:47 | 只看该作者

唉,人笨就是没办法啊....

1、去网上随便找个可逆的编码转换工具,编译前转换即可
2、自己随便写个小工具程序,想怎么玩就怎么玩

使用特权

评论回复
19
dai_weis| | 2008-2-15 22:05 | 只看该作者

晕,HEX文件一直我都是用记事本看,所以

呢当然看不出了
程序基本通过ISP下载,已经好久没有用过编程器器,而且威龙的编程器根本在界面下看不到HEX内容必须另行打开,呵呵,麻烦呀。

如果不想让人修改你的文字内容可以使用明文,但增加一个校验的办法,或者使用加密字典对字符进行一个加密的值,这样即使他人修改了文字但是校验结果不对自然不工作不就行了

使用特权

评论回复
20
dai_weis| | 2008-2-15 22:08 | 只看该作者

增加一个LS的说明

好像根据法律软件或者硬件经过加密后如果因加密失效时该硬件或者软件在自我保护的时候不得损害用户的权益,否则可能会有麻烦的。至于用户权益的包含内容不记得了

使用特权

评论回复
21
xjz2000|  楼主 | 2008-2-16 09:11 | 只看该作者

HEX转成BIN格式后,用记事本打开也能看到字符.

看来只有如17楼所说的自已写个小工具了.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

94

帖子

0

粉丝