zhang_mike2000 发表于 2009-11-11 13:31:17

【93楼】 zhxzhx 一丁
前几天,这个论坛有一个帖子,说出1万找个对一个MCU反汇编破解,这个case你接了?

kclc 发表于 2009-11-11 14:13:44

虽然不是很懂 还是学习下

hugeice 发表于 2009-11-11 14:27:09

这个片子单纯监视I2C的数据是不能破解的,访问这个片子要经过双向认证和加密,我们用了好几年了,不过听我们做硬件的同事说现在这个片子也能被破解了。

zhxzhx 发表于 2009-11-11 23:56:24

【105楼】 zhang_mike2000
在哪?有人接没?

zhang_mike2000 发表于 2009-11-12 08:00:26

to:LS

你既然是汇编高手,希望下面的事能成,并与大家分享经验。

大家好,10000元寻ATMEGA128反汇编高手,急,联系电话:13711522312,陈先生
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3595849&bbs_page_no=1&search_mode=4&search_text=zhang_mike2000&bbs_id=9999

qianhng 发表于 2009-11-12 08:24:09

【104楼】 zhxzhx 一丁
积分:493
派别:
等级:------
来自:辽宁,沈阳
【94楼】 qianhng

   看来你是不会汇编的
===================================================
你真是健忘啊,建议你看看
《关于开发产品的一些个人看法,我现在使用51和AVR单片机 》
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=533488
看看【172楼】到【217楼】我们争论汇编和C效率高低的帖子

zhxzhx 发表于 2009-11-16 00:19:30

我用C语言,并不意味着我不会汇编
那你应该知道,看汇编,也不是很难得,至少不能用汇编的难读来作为加密的手段

qianhng 发表于 2009-11-16 08:28:03

我在【94楼】提到““反汇编不难,和看汇编的源程序一样”这个不认同,基本上差别很大,不然那些老板谁会反对用汇编?!”
反汇编出来的汇编是很难读的,特别是用汇编写的为加密绕了几个弯的程序(可不像C写的那样有规律),请看【81楼】,你认为不难是因为你没这么做过或碰到的是不防小人的加密,有的加密是连小人都要阴一把的。^_^

zhxzhx 发表于 2009-11-17 22:57:52

【112楼】 qianhng
那个一万的我看了,不应该是加密,基本就是一个通讯

qianhng 发表于 2009-11-17 23:15:55

我倒没去看程序,那是【109楼】 zhang_mike2000 让你看的。

zhang_mike2000 发表于 2009-11-18 08:46:16

我同意“反汇编出来的汇编是很难读的,特别是用汇编写的为加密绕了几个弯的程序(可不像C写的那样有规律),”
如果zhxzhx 一丁你认为不是这样的话,请用实际案例说明这个过程是如何的“简单”!

fnems 发表于 2009-11-18 14:59:19

本人喜欢反向工程,曾多次调试修改破解x86程序
望寻有51/AVR环境下的爱好者共同交流

^_^

myfaith 发表于 2009-11-18 17:48:28

这个其实就是智能卡SAM安全模块了

zhxzhx 发表于 2009-11-18 18:27:53

【115楼】 zhang_mike2000

    你看病毒,都是看反汇编分析出来的,而且PC的程序在RAM里运行,可以一边解密,一边运行,相对于在ROM里运行的静态程序,这个复杂多了,而且在DOS时代,MSDOS,的资料全是靠反汇编分析出来的,有一本书,叫PC中断调用大全就是在反汇编的基础上写的

    AVR的反汇编,简单的可以用reAVR,复杂的可以利用IDA,我现在就使用IDA5.0

zhang_mike2000 发表于 2009-11-18 20:31:27

to:【118楼】 zhxzhx 一丁
反汇编原理很简单,这是地球人都知道的,现在的问题是,客户愿意为这个工作花多少钱?

愿意花的多,说明这件事难度大,愿意花的少,说明这事难度小。我们只能以货币的多少来量化此工作的难度。否则没办法量化呀。

zhxzhx 发表于 2009-11-18 22:10:04

问题是,这个的代价没有你想象的高,难度也没有你想象的大
    比如IDA,可以把C的数据结构分析出来,同时,还能区分出功能模块,形成流程图,加上对功能的了解,很快就能了解大致的处理思路,然后针对特定的部分修改,因为你是在ROM里的静态代码,是不能隐藏程序的分支的,而在pC上,你可以把程序代码伪装成数据,也可以动态调整段,即便是这样还有softICE可用,他可以设定条件断点,比如修改某个数据,就产生断点.这样和你说吧,解一个PC机上的加密狗,和你的原理是一样的东西,几乎就是0 DAY.其实我们身边有很多解密的东西,比如盗版,我们用的破解软件,都是这样来的,你可以感觉一下从新版本出来到有破解补丁,需要多长时间.
    我认为.单片机的加密,要从防止破解的人得到BIN代码入手,我遇到过一个软件,只要你把她从设备上取下来,一通电,它就自己把自己的代码清除,你解出来也是不完整的代码,即便是这样,我认识的一帮人也能得到BIN文件,他们可以不给芯片加电而得到二进制代码

zhxzhx 发表于 2009-11-18 22:19:03

搜索了一下,网站上就有介绍IDA反汇编的

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=842197&bbs_page_no=1&search_mode=1&search_text=反汇编&bbs_id=9999

qianhng 发表于 2009-11-19 08:32:03

【120楼】“比如IDA,可以把C的数据结构分析出来,同时,还能区分出功能模块”
=====================================================================
问题是:有的整个程序都不是用C而是用汇编写的呀!“很快就能了解大致的处理思路”这一点不成立。

fan313220 发表于 2009-11-26 21:40:01

mark

leafboy77 发表于 2009-12-8 19:53:59

保护知识产权,与国于民是有利的,从长远来说也是必须的,看过CCTV大国崛起中"英国"这一篇,就有这个感觉。


该芯片用于AVR加密:
CryptoMemory Development Library for AVR core (WinAVR-20090313) (2 MB)
For AVR core (WinAVR-20090313).

下载
http://www.atmel.com/dyn/resources/prod_documents/lib_CM-WinAVR20090313-090513.exe


安装后的文件列表
C:\Atmel\EmbeddedCrypto\DevLib\AVR\WinAVR-20090313 的目录

2009-12-0816:39    <DIR>          .
2009-12-0816:39    <DIR>          ..
2007-12-0410:33         300,318 Cmem.ico
2009-05-1210:07             3,406 Example.c
2009-12-0816:39    <DIR>          libref
2009-05-1309:40            25,050 lib_CM.a
2009-05-1209:02            56,791 lib_Crypto.h
2009-05-1209:02            19,397 lib_Support.c
2008-12-1915:50             8,821 ll_port.c
2008-12-1915:49             2,826 ll_port.h
2009-05-1311:22             1,263 README-AVR.txt
               8 个文件      417,872 字节

这是其中的Example.c
#include <stdio.h>

#include "ll_port.h"
#include <lib_Crypto.h>

#define DEFAULT_ADDRESS 0xb ///< Default address for CryptoMemory devices

void main(void){

   unsigned char ucData, ucG;
   unsigned char i;
   RETURN_CODE ucReturn;

   ll_PowerOn();

   if( cm_Init() == SUCCESS) // Initialize the CM
      printf("CM Init Success...\n");
   else
      printf("CM Init Failed !!!\n");

   printf("Library Version is:%s\n", getLibVersNum());
   printf("\n");

   // Test write config zone
   ucData = 0x5A;
   ucData = 0xA5;
   printf("Write MTZ\n");
   ucReturn = cm_WriteConfigZone(DEFAULT_ADDRESS, 0x0A, ucData, 2, FALSE);
   if (ucReturn != SUCCESS) printf("fail\n");
                                                                              
   // Test Read config zone
   ucData = 0x00;
   ucData = 0x00;
   printf("Read MTZ\n");
   ucReturn = cm_ReadConfigZone(DEFAULT_ADDRESS, 0x0A, ucData, 2);
   if (ucReturn != SUCCESS) printf("fail\n");
   
   // Test write config zone w/a-t
   ucData = 0x5A;
   ucData = 0xA5;
   printf("Write MTZ w/a-t\n");
   ucReturn = cm_WriteConfigZone(DEFAULT_ADDRESS, 0x0A, ucData, 2, TRUE);
   if (ucReturn != SUCCESS) printf("fail\n");

   // Verify Read password 0
   for (i = 0; i < 3; ++i) ucData = 0xFF;
   ucReturn = cm_VerifyPassword(DEFAULT_ADDRESS, ucData,0, 1);
   if (ucReturn != SUCCESS) printf("fail\n");
                                                                                                                                                               
   // Verify Write password 0
   ucData = 0xFF;
   ucData = 0xFF;
   ucData = 0xFF;
   ucReturn = cm_VerifyPassword(DEFAULT_ADDRESS, ucData,0, 0);
   if (ucReturn != SUCCESS) printf("fail\n");
   
   // Set User Zone
   ucReturn = cm_SetUserZone(DEFAULT_ADDRESS, 3, FALSE);
   if (ucReturn != SUCCESS) printf("fail\n");
   
   // Write data to user zone
   for (i = 0; i < 16; ++i) ucData = 0xEE;
   ucReturn = cm_WriteUserZone(DEFAULT_ADDRESS, 0, ucData, 16);
   if (ucReturn != SUCCESS) printf("fail\n");
   
   // Read user zone
   for (i = 0; i < 16; ++i) ucData = 0x00;
   ucReturn = cm_ReadUserZone(DEFAULT_ADDRESS, 0, ucData, 16);
   if (ucReturn != SUCCESS) printf("fail\n");
   
   // Read Device Fuse Register
   ucReturn = cm_ReadFuse(DEFAULT_ADDRESS, ucData);
   if (ucReturn != SUCCESS) printf("fail\n");

   // Verify authentication
   for (i = 0; i < 8; ++i) ucG = 0xFF;
   ucReturn = cm_VerifyCrypto(DEFAULT_ADDRESS, 1, ucG, NULL, FALSE);
   if (ucReturn != SUCCESS) printf("fail\n");
   
   // Verify encryption
   for (i = 0; i < 8; ++i) ucG = 0xFF;
   ucReturn = cm_VerifyCrypto(DEFAULT_ADDRESS, 1, ucG, NULL, TRUE);
   if (ucReturn != SUCCESS) printf("fail\n");

   // Test ReadChecksum
   ucReturn = cm_ReadChecksum(DEFAULT_ADDRESS, ucData);
   if (ucReturn != SUCCESS) printf("fail\n");

   // Set User Zone w/a-t
   ucReturn = cm_SetUserZone(DEFAULT_ADDRESS, 3, TRUE);
   if (ucReturn != SUCCESS) printf("fail\n");

   // Try to deactivate security
   ucReturn = cm_ResetCrypto(DEFAULT_ADDRESS);
   if (ucReturn != SUCCESS) printf("fail\n");

   while(1);

}

chinamanzhong 发表于 2009-12-9 21:41:38

mark

skyxjh 发表于 2009-12-9 23:00:48

mark

kcfoo1 发表于 2009-12-12 09:53:40

""""我遇到过一个软件,只要你把她从设备上取下来,一通电,它就自己把自己的代码清除,你解出来也是不完整的代码,""'
这个思路好,靠检测原电路中的信号来自动清除代码,再作成SMD的。那还是不错的好方法哟

asdasd 发表于 2010-4-8 19:52:54

mark

feng200808 发表于 2010-5-27 14:33:00

参考参考。。。

eric001 发表于 2010-7-26 16:16:54

谁有at88sc104Linux下的驱动

dujun168 发表于 2010-11-9 19:58:28

mark

wsygb 发表于 2010-11-16 10:18:39

mark

gxy508 发表于 2010-11-16 12:37:22

mark

mcuandme 发表于 2010-11-17 11:35:41

EEPROM加密码

zhizhiyu 发表于 2010-11-17 12:32:33

学习学习

agon 发表于 2010-11-17 16:15:25

AT88SC系列的API是要跟ATMEL签协议的,开发也比较难。现在新产品设计的话,可以考虑用AT88SA系列,源码和算法都是公开的。

wwwdege 发表于 2010-11-19 19:37:02

mark学习了

GuDaoFan 发表于 2010-11-19 20:25:18

记号了迟些再看

coolwater 发表于 2011-2-13 17:57:08

MARK

adongliu 发表于 2011-2-13 20:44:06

最好的加密就是让解密者觉得已解密,实际随机的出点问题,找不到头.

jack_yu 发表于 2011-2-14 17:21:40

mark!

ndust 发表于 2011-2-14 21:34:04

jh

wuyya 发表于 2011-2-14 22:24:48

我也介绍一个方法,凑凑热闹。
找人把IC打磨掉,然后重新打字。题外话,这个方法汉芯用过,不过教授不懂,走了不少弯路,最后还是要请民工才搞定。实际一颗IC打磨重新刻字只需不到一毛钱即可。
这个方法其实也不保险,但是可以迷惑敌人,重新打的字要打一个似是而非的型号,封装要相同(电源、晶振等管脚排列相同就更妙),要很冷门的,却又真实存在的型号。

snakevip 发表于 2011-2-19 20:11:19

我觉得11楼的办法不错。
能不能这样,让MCU每次根据时间计算出一个索引号,这样的索引号每秒变化一次,要跟踪IIC就很难了。如果是用在电力上,利用过零检测,10ms就能变化一次,这个破_解难度就更大了。

netting 发表于 2011-2-26 20:46:52

HCS301简单便宜

zhangcm530 发表于 2011-6-20 11:12:13

mark

akman2012 发表于 2011-6-20 16:15:21

flow chart
MCU                     read --->    EEPROM code
MCU                     <----returnEEPROM code
if match than pass
if not match than do something else


我有一种想改成

if not match then pass 的感脚。

zhangcm530 发表于 2011-6-29 10:09:12

mark

caodemao 发表于 2011-7-4 21:43:00

学习!

wmm20031015 发表于 2011-7-5 15:27:07

MCU部分要加自宫程序,检测不到就自宫了事,保密性还是有保证。抗干扰不够的话,怕误伤。

yyaa6712 发表于 2011-7-5 19:50:38

nark

Swordman 发表于 2011-7-12 15:24:32

现在Atmel有新的ATSHA204加密芯片来替代AT88SC0104了..加密强度更高

blacknewnew 发表于 2011-8-21 16:09:53

ATSHA204
http://www.dzsc.com/news/html/2011-3-8/125438.html

stoneee 发表于 2011-8-24 14:26:45

原来AT88SC还是这么受关注。。。。

曾经有个时间段研究过这个,写过其烧写器。
此种方法防止在线监听破_解关键数据是非常不错的选择。
但是如果只是存储密钥之类,读到单片机内比对的话,还是会存在以下的问题:如果别人把你的单片机程序完全反汇编过来,那么程序内容,密钥内容也就都一目了然了。

songhuangong 发表于 2011-8-25 10:20:01

不错

wang1979 发表于 2011-8-26 11:51:56

加密和破_解都是可以实现的,关键是他用不着破_解,他直接破_解编程的那个人就行了!

zfx19890921 发表于 2011-12-23 11:23:49

mark

taojie 发表于 2011-12-24 13:35:49

我用AD的

yfgww 发表于 2011-12-24 16:27:34

mark

omlarn 发表于 2012-3-3 21:35:39

顶!

john_8 发表于 2012-5-12 14:34:54

加密方法,mark

eryueniao 发表于 2012-5-26 16:51:07

呵呵   厉害                                 

cj33 发表于 2012-8-15 15:40:03

plank 发表于 2009-6-8 13:55 static/image/common/back.gif
我觉得用处不大,mcu中的代码都读出来了,程序改一下就可以跳过eeprom中的密码,这样连eeprom的成本都省了 ...

这兄弟说的深刻,希望国人好好思考,为什么你用着破解的win系统,而微软并没有死掉。

wangku001wei 发表于 2012-8-18 09:11:39

不错不错 学习啦!

chengying 发表于 2012-8-31 10:18:18

mark


rom 发表于 2012-9-27 21:57:42

zhang_mike2000 发表于 2009-6-13 17:00 static/image/common/back.gif
又找到一种东东,ISL9206 & ISL9206A SOT-23 封装, 1-wire通讯

国内成交价在4RMB左右。


哪里有购买的?

cumtgao 发表于 2012-9-28 09:10:55

关注有时间学下。

gzcc 发表于 2013-8-15 16:50:15


最好的加密就是让解密者觉得已解密,实际随机的出点问题,找不到头.

crazy_horse 发表于 2013-8-15 17:01:58

mark 学习学习

huangqi412 发表于 2013-9-17 13:53:50

plank 发表于 2009-6-8 13:55 static/image/common/back.gif
我觉得用处不大,mcu中的代码都读出来了,程序改一下就可以跳过eeprom中的密码,这样连eeprom的成本都省了 ...

别人都能研究你的反汇编码了,绝大多数情况下也没必要去破解你的了。大部分的破解是取出HEX然后烧写,不做修改。

littlemouse11 发表于 2013-9-17 13:58:16

通过CPU的ID号经过某种算法算出来的密钥,拿这个密钥加密通信协议
还是感觉这样的加密最可靠

abcd200844 发表于 2013-9-17 17:25:34

如果是低档产品,对成本敏感的,这些都不适合,我有个方法,应该还行的,但是不能说。

气球 发表于 2013-9-17 23:10:37

{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}

holyman 发表于 2013-9-18 02:11:53

长见识了,谢谢楼主

二进制 发表于 2013-9-22 23:52:37

没有接触过   

Feco 发表于 2013-9-23 08:17:28

MARK,值得研究!

acmilannast 发表于 2013-9-23 08:22:26

直接拿cpld模拟一个一模一样的时序就好了。。。

ningting06 发表于 2013-11-18 17:08:38

ATSC88用密文传输?这种密文 你都识别不了 让单片机如何识别?

mdj-fish 发表于 2014-7-9 13:58:58

想怎么玩就怎么玩

lpandadp 发表于 2014-7-10 10:21:00

mark,好资料,顶,学习中

lubing521 发表于 2015-1-27 18:16:43

这个值得研究下,最近在搞atsha204

yoofe 发表于 2015-1-27 18:47:08

这个可以有,觉得前面一位网友好,发送索引数据,而不是明码不错

34071417 发表于 2015-1-27 23:02:54

如果芯片具备非对称加密的话,基本上破解是无望的,但是这个非对称加密很贵

willy8688 发表于 2015-1-28 01:03:31

谢谢分享!

suny1022 发表于 2015-1-28 09:16:00

以前还真没关注过这一块,不知道楼主方法到底怎么样

片羽之神 发表于 2015-1-28 10:53:54

有机会试试!mark

heicnhei3 发表于 2015-1-28 11:52:23

外接EEPROm加密,时序破解不难

gxay2000 发表于 2015-1-28 12:40:58

加密的最高境界--不加密

mcupro 发表于 2015-1-29 20:47:17

我只是一个便宜的STC芯片,跟FPGA通讯,FPGA主动发起对话,发送一串随机生成的数,MCU收到后返回运算结果,FPGA收不到数或者数据错误就罢工。
一直在使用这个思路保护FPGA板子被抄。这个方法简单,但是破解难度肯定不如LZ提到的器件。
如果FPGA里面有DNA号的话,只要外接一个EEPROM就行,DNA和EEPROM 存在换算关系,这个关系难一些,别人只要琢磨不出这个关系,就抄不了板子。因为DNA号唯一。

TongIC 发表于 2015-1-29 23:35:01

单片机加密一直是一个值得探讨的问题!

stevenh 发表于 2015-1-30 01:11:54

谢谢分享 !! 加密很重要。

poppop123 发表于 2015-1-30 04:32:52

楼主的想法,值得研究

yuwangwangyu 发表于 2015-1-30 12:17:57

见过以前以为是EEPROM

xd785 发表于 2015-1-30 12:27:54

思路也挺好的………………

steaven2000 发表于 2015-1-30 12:40:57

zhang_mike2000 发表于 2009-6-8 14:06
我会试着写一下程序,如果成功了。会放到这里与大家分享。
AT88SC功能很多,对MCU加密只是其功能的一部分。 ...

5K USD可以不?如果可以吗,你加密有意义?

yfgww 发表于 2015-2-2 16:35:44

值得关注{:smile:}{:smile:}

wsh 发表于 2015-2-2 21:12:41

cicnx 发表于 2009-6-8 17:29
在两边放一张密码表. 读取的时候只发送索引号, 每次的索引号不一样..这样分析I2C的难度加大... ...

这个想法不错,不知道有没有用在实际产品中呢?
页: 1 [2]
查看完整版本: 介绍一种便宜,易用的MCU加密方法