有没有会单片机时间程序又有一点时间的朋友

在天涯社区里面有没有朋友学习单片机和嵌入式的啊????希望可以交流学习心得。。。。。
12-06-25 &
终于找到知音了,我就是的兄弟/blogger/blog_main.asp?BlogID=4382749我的博客,记得常来
请登录后再发表评论!有熟悉单片机的朋友吗,自己想学一点工控,闲于时间有能指导一下的朋友吗?【比亚迪吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:195,016贴子:
有熟悉单片机的朋友吗,自己想学收藏
有熟悉单片机的朋友吗,自己想学一点工控,闲于时间有能指导一下的朋友吗?
注册即可领取万元福利!!!免费注册成为租号玩会员!
可以呀。打算用单片机做啥
登录百度帐号推荐应用只要单片机具有真正唯一ID,就可以让加密坚不可摧
本帖最后由 smset 于
16:24 编辑
ID--&F1(ID) -----》IDX,
将ID通过自定义的一个算法F1,转换为一个整数IDX , F1为不可逆运算,也不能被轻易分析,这个实际上是容易实现的。
然后,将IDX保存到EEPROM或FLASH的任何地方,我们通过编一个函数 GET_IDX()能够读出这个数即可。
再编一个函数:
int getmy_1(){
return F1(ID)-GET_IDX()+1;
int getmy_0(){
return F1(ID)-GET_IDX();
还有一些其他自定义的函数内:都可以直接使用(F1(ID)-GET_IDX()) 来替代0;
直接用(F1(ID)-GET_IDX()+1)来替代1;
在程序任何需要使用到1的地方,都可以考虑使用getmy_1()代替。
或即使本不使用1,也可以来用上一下:
如: x=(x+1-getmy_1())*getmy_1();
或把 for(i=0;i&=count-1;i++)
改为: for(i=getmy_0();i&=count-getmy_1();i++)
指针 p++;可以改为: p=p+getmy_1();
或者:给函数传递变量时,传递方在 变量上+F1(ID), 被调用的函数在 变量上--GET_IDX():
比如本来是
void f1(){
int f2(i){
return i*2;
void f1(){
j=f2(i+F1(ID));
int f2(i){
return (i-GET_IDX())*2;
如程序被非法复制:从ID无法得到IDX,那么IDX和F1(ID)不相等,
那么getmy_0不再是0,getmy_1不再是1,
程序将出现什么结果,谁都无法预料了。
---------------------------------------------------------
特点: 由于整个程序的加密,采用了“运算加密”的思路, 而非判断加密, 又没有用到任何一行
if判断,让解密者去想破脑袋吧。
即使猜测到有可能是这种加密思路,但是程序并不是基于if判断跳转,加密的作用自然分布在程序的各个地方,怎么去改,也很伤脑筋了。
直接修改getmy_1和getmy_0,这个首先是得分析出加密思路时才能作出的。
另外修改getmy_1和getmy_0只是干掉简单的部分。
还有一些是很难干掉的:
给函数传递变量时,传递方在 变量上+F1(ID), 被调用的函数在 变量上--GET_IDX():
比如本来是
void f1(){
int f2(i){
return i*2;
void f1(){
j=f2(i+F1(ID));
int f2(i){
return (i-GET_IDX())*2;
另外,包括一些全局部变量的处理,可以在一些函数里面加上F1(ID);
在;另外一些地方进行-GET_IDX()的操作,并不会将代码简单集中放到一点的。
当然,如果精准的理解了整个程序的加密思路来说,这个也可以花时间干掉,不过这种加密方式本身目前是很少有人用的。
总之这种加密强度远高于简单的if比较方式。这个是一个新的基本思路,我举的例子只是一些简单的例子,完全可以自己做得更加灵活。
F1当然是一样的啊。只是ID不同。
顺便回复上楼,我有个前提: 只要单片机具有真正唯一ID,这个意思包含: 单片的ID不可以复制。
你说那个地方只是怎么去拷贝程序出来, 如果单片机具有真正唯一ID, 拷贝程序是没有用的。
大家先别拍砖头,思路很不错。从复杂度上已经增加到了一定程度。
建议做成强制in-line,否则对破解人来说太明显……因为大量的逻辑都指向某一个或某两个函数……
别低估干这行的智商——所谓没有金刚钻,不揽瓷器活。另外,用减法做比较也是业内常识……其它还有用异或结果是否为0……这些都是常见的特征……
对, inline!好思路, 必须的!
代码尺寸就上去了哦~ 执行效率也随之受到影响……不过如果有内部的什么1~4个周期的硬件CRC之类,就可以
解决效率问题,并且彻底把算法隐藏好……问题是……这个CRC硬件最好是不公开的才行……有一些芯片还有一些特殊矩阵转置(permutation)外设——也都没有对外公开……
隐藏加密算法的加密应用范围受到影响,因为用的人多了,自然就公开了,公开加密算法,没有密钥但依然很难解密的才有生命力,楼主这种思路是能够增加破解的困难,不过只能给盗版者加工资。当然有些小产品,利润和市场本来不大,盗版的成本太高也的确能保护可怜的程序员
所有的单机程序都是可以破解的,真正要保护自己的成果其实并不是通过加密,而是通过网络服务,
这就像杀毒软件,只要联上网,主动权永远掌握在自己手中,这样的软件根本就永不着加密。
就像微软的WINXP,再怎么加密也会被破解,但是只要联网,就可以黑你屏,
就像单机游戏,今天做出来,明天就被破解,可是网络游戏,你见过破解的吗?除非入侵服务器,只要一入侵就被发现。所以单片机要想完全保护产权,就要提供网络化服务。
首先不要忙着拍砖,我来整理一下思路。利用全球唯一ID(每颗MCU都有一个唯一ID)的加密精髓在于防止程序轻易读出的情形,甚至HEX
ROM根本无需加密,和破解读出HEX code的难易程度没有关系。实际上只需要两步:
1.自己想一个认为非常好的算法,利用MCU的GUID生成另外一个ID(可变长),再自己设计一个下载器(加密算法也在里边)烧录到EEPROM或Program
ROM里边。保管好烧录器,不要外泄。你的烧录器就是一个加密工具!
2.在你的程序当中分布式的对用烧录器烧进去的加密后ID解密。这个比较重要,因为解密代码写的过于集中便于反汇编分析。比如不要解密后不正确不要进入死循环,不要立刻封杀所以功能,如果是盗版你故意给他几个致命BUG,让他抄袭后生产退货,损失更大。加密的结果就是烧录到每个MCU的HEXCODE是不相同的,即使读出了一个MCU的HEXCODE,烧到另外的MCU是不能通过解密算法验证的。唯一的解密的方法是去分析你得HEXCODE,分析出加密算法,破解者再设计出和你一样的烧录器!总之,这个方法只能对比较大的Program
ROM有效果,如果是小的MCU,比如只有1KB
ROM就很难做好,毕竟代码少,容易分析。说实话,如果有这样的功底的工程师去反汇编你的代码,说不定他就正向设计来得更快!这只是防盗防火防小人而已。
用simlator去跟踪程序。然后找到GUID。替换掉即可。
STM32的UID有一部分是说明这个片子在晶圆的XY坐标位置的,一个晶圆上面所有的片子UID都不一样,至于不同晶圆的UID如何实现不同我就不知道了。。在晶圆上实现个唯一ID又难了?激光几闪,随机割断96个硅片的导线就获得了96bit的唯一ID了------------------------
楼主这个加密方法确实不错,不过前提是inline的方式,否则频繁调用某个函数很快就会被发现,另外加密后的IDX最好在启动时就读取到RAM中,否则频繁读取某个FLASH或EEPROM位置也很容易被发现,最后,还需要选用解密成本较高的单片机,如最近一个朋友想解密一款NEC的单片机,读出ROM的费用就需要近20万。
另外楼上说这个方法简单的,只是因为你已经看到了楼主的加密思路,如果现在是先给个用这种方法加密的固件出来,我想就不会有人轻易下结论了。如果是inline函数并上去的话,那么有个小问题就是代码量会超大。
楼主要研究软件的加密算法,建议先去学习一下现在windows下一般应用软件加壳的各种原理,唯一ID在这个领域是完全不新鲜的一个东西,最常见的就是软件根据CPU、硬盘或网卡的MAC来生成一个所谓硬件ID让用户注册。
而算法加密更是五花八门,除了加密条件判断外,还有代码的动态解码,就是用正确的KEY来解密函数A的代码,再跳过去执行,下次解码函数B时又会覆盖函数A的空间等等。
还有虚拟机加密,把一段x86代码转换为MIPS代码,在虚拟机中运行,这样如果破解不知道虚拟机模拟的是哪种汇编指令的话,反编译就会很累,代价就是运行速度下降。
适合有很大rom的mcu
可以加入一些垃圾代码。读取硬件id或软件id的这两个点是爆破的主要地方。例如固件整体验证的就是硬件id,
就算自己编写编程器变换固件内的其它key位置等, 整个算法验证的还是当前的mcu的硬件id是不是与这个固件匹配
只要找到读取这个id的地方补丁一下就完了。这个其实就类似与pc机上绑定机器的软件的加密时一样的。
你的方法必须保证你读唯一ID的行为不被破解者看出。像STM32的独立ID在某个固定地址,那么只要找出访问那个地址的语句就可以了。
现在有不少量产编程器都支持根据唯一ID变换一些数据写入指定地址,甚至支持自己编写变换插件,每个单片机的程序都不一样是完全可以做到的。
你算法设计的越复杂,如果不是用来直接保护你自己的利益,那么就是为他们谋福利了。
什么坚不可摧。专业的加密芯片都可以摆平。何况这玩意儿?
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。需要定制一件单片机:3个二极管交替闪烁:具体闪烁间隙待定:有时间的朋友请联系:李_单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:143,910贴子:
需要定制一件单片机:3个二极管交替闪烁:具体闪烁间隙待定:有收藏
需要定制一件单片机:3个二极管交替闪烁:具体闪烁间隙待定:有时间的朋友请联系:李:有尝
开发宝-靠谱的电子产品研发众包平台.单片机,电子技术,嵌入式软件,结构设计等电子产品研发领域外包服务.
#include &reg51.h&#define uint unsigned int#define uchar unsigned charconst table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
//正向流水灯
0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,
//反向流水灯
0xaa,0x55,0xaa,0x55,0xaa,0x55,0xff,
//隔灯闪烁
0xf0,0x0f,0xf0,0x0f,0xff,
//高四盏闪烁,低四盏闪烁
0x33,0xcc,0x33,0xcc,0x33,0xcc,0xff};
//隔两盏闪烁void delay(uint z)
//delay 1ms{ uint x,y; for(x=z;x&0;x--)
for(y=124;y&0;y--);}void main(void){
for(x=0;x&35;x++)
P2=table[x];
P0=table[x];
delay(1000);
}} 时间灯的方式,引脚自己改
加我包你满意
无偿,交流学习,我qq
登录百度帐号推荐应用烟台邦文教育培训学校
400-656-1390
烟台哪里有学单片机的|朋友间的承诺
烟台哪里有学单片机的|朋友间的承诺
[ 11:10:09]
浏览量:511
&单片机C语言全科班是一个结合了Protel电子线路板设计与单片机C语言编程的综合
型课程,由于单片机C语言编程要想发挥出极致就必须至少了解电子线路板的设计,同时理
解布线的原理,所以两门课程也是一种不能分割的集合。单片机技术是一门涉及智能控制的
学科,以后的社会将是智能化的社会,今天的单片机已经应用得非常广泛,可是说是无处不
在。很多城市都缺少这样的人才,特别像嵌入式应用的高级人才,一般他们的年薪都可以达
到10万以上,当然如果有实力可以进到更好的公司,那工资将会更高。
1、单片机行业学会/协会管理者;
  2、单片机企业的C语言程序设计者;
  3、中高等院校欲从事单片机C语言程序设计的领导、教师和学生;
  4、民办教育机构单片机职业岗位培训的工作人员。
  理论内容:
1、单片机组成、应用领域及开发特点;
  2、单片机结构和原理:包括51单片机的构成、微处理器及其时序、最小应用系统、地址分配、管脚
功能、复位电路等;
  3、C-51语言及编程方法;
  4、单片机的内部编程:I/O控制、定时器、中断、串口通信;
  5、单片机的外围接口及编程:WATCHDOG、EEPROM接口、串行扩展、并行扩展、DAC及ADC接口;
  6、单片机其他设计:通信协议设计;抗干扰设计。
  实验内容:
用专用设备试验:包括硬件设计、软件设计、定时器的使用,EEPROM的读写功能,有红、绿、黄灯的控制。
串行通信、多机通信,A/D变换等。
真正自己动手实验:包括自己动手设计硬件、焊接电路板,软件调试等。
上一篇:烟台建筑弱电工程师培训|学习弱电知识
下一篇:烟台平面设计培训|领先在于你的魄力
厚学为您推荐
价格:电话咨询
价格:电话咨询
厚学推荐学校
课程数量:54
人气:71211
培训机构:
&&&&机构导航:
Copyright & 2007-
All Rights Reserved. 江苏厚学网信息技术股份有限公司.
苏公网安备55

我要回帖

更多关于 单片机时间程序 的文章

 

随机推荐