春节期间闲着无事,突发奇想

[复制链接]
 楼主| xincun777 发表于 2011-2-5 21:05 | 显示全部楼层 |阅读模式
假设我的产品中用到ARM+Linux系统,其中有一个应用程序的结构如下:
if(  加密芯片数据非法)
{
直接重启系统;
}

这个程序将存储在Nor Flash中,假设有一个“坏人”,他把整片 Flash的内容(.bin文件)都读出来了,他能否直接修改所得.bin文件,以达到如下目的

if(  !加密芯片数据非法)
{
直接重启系统;
}


我大概看了一下ARM的指令集,这里用到的应该是  BE 或者 BNE指令,他能否通过反汇编达到这个 目的。

欢迎大家发言,一起讨论。 祝大家新年快乐
hgjinwei 发表于 2011-2-5 23:11 | 显示全部楼层
直接将你的
if(加密芯片数据非法)
变成
NOP
NOP
不更简单?
mmax 发表于 2011-2-6 01:51 | 显示全部楼层
不需要反汇编,只要知道“直接重启系统”的特征。找到那条if的位置,直接改bin文件,最后再算一下校验。
mohanwei 发表于 2011-2-6 10:04 | 显示全部楼层
加密芯片不会这样用的
brandnew 发表于 2011-2-6 10:25 | 显示全部楼层
恩,最近也有楼主的这个想法,现在抄板的人太多了,不加加密芯片,不敢卖东西。
楼主,你用什么公司的加密芯片?
sinanjj 发表于 2011-2-6 19:01 | 显示全部楼层
联网验证,

彻底解决**问题.


只需要增加20rmb硬件成本! 量大软件免费!
brandnew 发表于 2011-2-7 20:04 | 显示全部楼层
联网验证,
彻底解决**问题.
只需要增加20rmb硬件成本! 量大软件免费!
sinanjj 发表于 2011-2-6 19:01


有的产品,纯利润也就20元。
 楼主| xincun777 发表于 2011-2-10 10:55 | 显示全部楼层
看了楼上的几位XD的回答,都很有帮助,非常感谢,看来有希望了,我正在做实验,等有结果一定告诉大家。
 楼主| xincun777 发表于 2011-2-10 15:35 | 显示全部楼层
我已经验证了我们的猜想:完全可以通过反汇编,修改二进制的方法实现程序的**。其中我用到的工具就是注明的 IDA (Version:5.5),我用了一个很简单的程序,如下:

#include <stdio.h>

int main(void)
{
        int i=0;
       
        if( i==0 )
        {
                printf("Is zero!\n");
                return -1;
        }
        else
        {
                printf("Not zero!\n");
                return 0;
        }
}

我借助IDA  和 UltraEdit,将上述程序的运行结果输出为  Not zero!   。


万变不离其宗,所以我的初衷应该是能实现的。

祝大家新年快乐
jweiok 发表于 2011-2-15 11:33 | 显示全部楼层
就是说这种加密方法是失败的。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

105

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部