[讨论]ULINK2的固件破解技术讨论帖

发布: 2009-1-09 10:41 | 作者: wenunit | 来源: StmFans思蜕盟 OPELC 自由电子联盟

起个头,不知道成不成,以及其它相关问题,所以这里只限技术讨论。
wenunit (2009-1-09 10:43:43)
最近网上关于ULINK2破解炒得很热,其实一直也想研究一下到底是个什么情况'发表点看法。   
     研究了一下ULINK2,发现固件是由ULINK LOADER和ULINK FIRMWARE组成,这里先将ULINK FIRMWARE成为升级固件吧,其实升级固件是嵌在DLL文件里的,这也是一般的固件自动升级的做法。经过反汇编DLL,很快可以跟到升级固件处,还有升级固件中的升级标志,这里称之为固件版本号吧,还有固件长度,以及固件的校验(放在固件最后的四字节处)。再将升级部分固件从DLL中提取出来后反汇编可以发现,固件的起始偏移地址(实际上是固件在FLASH中的绝对地址)为0x8000,还有一些跳转地址和真正的复位地址信息,没有深入研究。因为对于破解,以上基本上找出了应该知道的信息:固件其始地址,固件长度,固件的版本号,固件的校验,还有部分参考信息(不是必要,但是可以更安全些),其中前三项已经确认,现在的问题就是校验的方式,从DLL中没有找到相应的固件校验信息,可以猜想可能是在ULINK LOADER中进行,这样难度就偏大了些,不过根据DLL中的STRING信息,可以知道ULINK LOADER是很健壮的,有很强的免疫性,所以,即使使用了不合法的“伪固件”,也不会损坏ULINK LOADER,它会直接拒绝,并且会提示固件升级失败信息。
    回到前面,我们找出了供破解的大部分重要信息,现在的问题就是找出固件校验的具体算法,根据固件最后的四个字节的,个人猜想很有可能是CRC32,但是不是一般的CRC32算法,为了更具有迷惑性,可能会是使用了初值或者经过其他运算(固定方法)的CRC32。所以,只要能尝试出这个固件校验方法,ULINK2就算是“显出原形”了。
    为了避免误导和损害您的利益,最后提示一下,要破解ULINK2,需要有一只功能正常的ULINK2,也希望有兴趣的朋友在进行此项实验时慎重。进一步研究中。。。
aleyn (2009-1-09 13:53:28)
顶,要做这项工作,估计参与者需要懂一定的上位机编译知识,和下位机的一些汇编代码知识才行。大家加油!
boycn (2009-1-09 17:39:41)
没有用过ULINK,但还是支持一下
catwill (2009-1-09 17:43:06)
弱弱的问一句:不是有便宜的J-LINK吗?
还是纯娱乐?
binglin (2009-1-09 21:17:11)
呵呵,纯技术性的娱乐,呵呵。

支持龙兄弟的ULINK2 DIY活动。
superwangyang (2009-1-09 21:28:39)
要是做的话算我一个,虽然我是菜鸟,但是我想学习
wenunit (2009-1-09 21:37:26)
固件代码已经找到了,固件代码的执行地址也知道了。
明天可以测试一下让他直接运行,如果可以的话,再看看他是怎么进行升级的。
只要他能运行,其它的都不成问题了,本人做LPC的芯片还是比较熟悉的,
不会像当初AT的芯片那种郁闷。
wenunit (2009-1-09 21:39:58)
我可以写一段代码,让加JTAG的加密位失效。
这样就可以读出里边的程序了。。。所谓升级也就可以了吧。
catwill (2009-1-10 08:27:38)
唉、楼主真高人也,像我要什么时候才能有楼主1成功力啊,打击。
jasonjee (2009-1-10 08:41:22)
顶楼主
eiglxl (2009-1-10 13:27:17)
顶,加油。
taoist (2009-1-10 13:46:22)
让我们DIY属于自己的OUR-LINK

具体信息请用google搜索
eiglxl (2009-1-15 21:43:49)
wenunit: 成功没有?
SDUATI (2009-1-15 23:37:08)

QUOTE:

原帖由 wenunit 于 2009-1-9 21:39 发表
我可以写一段代码,让加JTAG的加密位失效。
这样就可以读出里边的程序了。。。所谓升级也就可以了吧。
意思是lpc的arm7程序是不安全的?可以读出来?不会吧
wenunit (2009-1-16 13:30:33)
过几天放假了搞吧,现在还没空。。




这个方法在不是用自己的BOOT程序的情况下是无效的,所以ARM7的程序还是安全的。
wenunit (2009-2-10 22:32:16)
搞定了不可升级的版本!

现在是直接在LPC2148的最小系统板上引出JTAG,来测试。

没有使用电平转换等芯片,结果有些不稳定,出现下载和仿真有时会出错。

不过仿真和下载都测试通过了。

可升级版本有难度,不过如果肯下点本,用钓鱼方式读出现成的,倒是有可能。

但不保证,不然我就拿自己的ULINK2开刀了。

[ 本帖最后由 wenunit 于 2009-2-10 22:33 编辑 ]
wenunit (2009-2-10 22:42:40)
如果这个程序经测试没问题的话,

可以DIY做一个山寨版的ULINK2。。。

我可以自己写一个BOOT升级程序来搞定升级。。。

而不使用官方的升级程序。
wenunit (2009-2-10 22:46:36)
不过这样要写一个上位机程序用来支持这个,官方的KEIL肯定是不行的。

接口吗,USB不熟悉,串口倒是可以。


嗨,太土了。
sunke9 (2009-2-11 08:38:02)
支持!!!!!!!
wenunit (2009-2-11 09:36:50)
不兼容原版的升级BOOT,好像没有意义.

兼容原版的BOOT,自己来写,几乎不可能,

写个钓鱼程序,看能不能读出原版的BOOT,

有点风险,冲动的时候再试.