打印

另外一个**思路

[复制链接]
10614|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cchenbin|  楼主 | 2007-10-7 17:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的jlink破解失败经历 

邮购了一个d版的jlink,尝试在升级的.dll中加入一段代码,用于读出0x00100000 flash的内容,失败了。求助卖方,需要收费才给我重写,算了,不玩了,可惜我的1k多大洋。 
        希望下面的内容对想破解的人有帮助,哪位要是搞定了,帮我烧一下flash中内容,我出邮费,不甚感激。联系wh.chxh#gmail.com 

这个jlink的版本是v5.2,硬件是一片AT91SAM7S64 加一片LVC16245。S64片内Flash加密过,不可以直接读出。 

下面是我对该设备的了解,有些错误,不然的话,我的破解就应该成功。 
        基本思路就是所谓的“特洛伊木马”,升级部分加入一下段串口打印代码,将flash内容打印出来。 
当jlink连上pc时,执行Jlink.exe,会自动检查jinkarm.dll中部分firmware和硬件中的firmware版本,如果dll中的版本新,就会升级硬件中的部分。 
比较的依据是字符串“J-Link compiled Jun 14 2007 14:36:33 ARM Rev.5”中的年月日,如果dll中的该串年月日大于硬件中的,就会自动升级。如将”Jun 14”改为”Jun 15”, 也会在次升级写入。 
下面看dll中的固件程序究竟是什么样的,dll是用upx压缩了的,解压就可以了。下面是提取出来的升级部分内容,长度为0x5400。 
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F 
00000000   2E 00 00 EA 14 F0 9F E5  14 F0 9F E5 14 F0 9F E5   ...?馃?馃?馃? 
00000010   14 F0 9F E5 FF FF FF FF  10 F0 9F E5 10 F0 9F E5   .馃????.馃?馃? 
00000020   04 54 10 00 08 54 10 00  0C 54 10 00 10 54 10 00   .T...T...T...T.. 
00000030   F8 38 20 00 1C 54 10 00  FF FF FF FF FF FF FF FF   ? ..T..???????? 
00000040   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................ 
00000050   4A 2D 4C 69 6E 6B 20 63  6F 6D 70 69 6C 65 64 20   J-Link compiled  
00000060   4A 75 6E 20 31 34 20 32  30 30 37 20 31 34 3A 33   Jun 14 2007 14:3 
00000070   36 3A 33 33 20 41 52 4D  20 52 65 76 2E 35 00 00   6:33 ARM Rev.5.. 
00000080   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................ 
00000090   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................ 
000000A0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................ 
000000B0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................ 
000000C0   00 00 0F E1 1F 00 C0 E3  12 00 80 E3 00 F0 21 E1   ...?.楞..???? 
000000D0   14 D0 9F E5 1F 00 C0 E3  1F 00 80 E3 00 F0 21 E1   .袩?.楞..???? 
000000E0   08 D0 9F E5 08 00 9F E5  10 FF 2F E1 98 3E 20 00   .袩?.熷.?/針> . 
000000F0   58 3E 20 00 00 50 10 00  70 B5 0C 4C 0C 4E 82 B0   X> ..P..p?L.N偘 

用ida反汇编: 
ROM:00100000                 AREA ROM, CODE, READWRITE, ALIGN=0 
ROM:00100000                 ; ORG 0x100000 
ROM:00100000                 CODE32 
ROM:00100000 
ROM:00100000 loc_100000                          ; DATA XREF: ROM:001050FC o 
ROM:00100000                 B       loc_1000C0 
ROM:00100004 ; --------------------------------------------------------------------------- 
ROM:00100004                 LDR     PC, =0x105404 
ROM:00100008 ; --------------------------------------------------------------------------- 
ROM:00100008                 LDR     PC, =0x105408 
ROM:0010000C ; --------------------------------------------------------------------------- 
ROM:0010000C                 LDR     PC, =0x10540C 
ROM:00100010 ; --------------------------------------------------------------------------- 
ROM:00100010                 LDR     PC, =0x105410 
ROM:00100010 ; --------------------------------------------------------------------------- 
ROM:00100014                 DCD 0xFFFFFFFF 
ROM:00100018 ; --------------------------------------------------------------------------- 
ROM:00100018                 LDR     PC, =0x2038F8 
ROM:0010001C ; --------------------------------------------------------------------------- 
ROM:0010001C                 LDR     PC, =0x10541C 
ROM:0010001C ; --------------------------------------------------------------------------- 
ROM:00100020 dword_100020    DCD 0x105404       ; DATA XREF: ROM:00100004 r 
ROM:00100024 dword_100024    DCD 0x105408        ; DATA XREF: ROM:00100008 r 
ROM:00100028 dword_100028    DCD 0x10540C        ; DATA XREF: ROM:0010000C r 
ROM:0010002C dword_10002C    DCD 0x105410        ; DATA XREF: ROM:00100010 r 
ROM:00100030 dword_100030    DCD 0x2038F8        ; DATA XREF: ROM:00100018 r 
ROM:00100034 dword_100034    DCD 0x10541C        ; DATA XREF: ROM:0010001C r 
ROM:00100038                 DCB 0xFF 
ROM:00100039                 DCB 0xFF 
ROM:0010003A                 DCB 0xFF 
ROM:0010003B                 DCB 0xFF 
ROM:0010003C                 DCB 0xFF 
ROM:0010003D                 DCB 0xFF 
ROM:0010003E                 DCB 0xFF 
ROM:0010003F                 DCB 0xFF 
ROM:00100040                 DCB    0 
ROM:00100041                 DCB    0 
ROM:00100042                 DCB    0 
ROM:00100043                 DCB    0 
ROM:00100044                 DCB    0 
ROM:00100045                 DCB    0 
ROM:00100046                 DCB    0 
ROM:00100047                 DCB    0 
ROM:00100048                 DCB    0 
ROM:00100049                 DCB    0 
ROM:0010004A                 DCB    0 
ROM:0010004B                 DCB    0 
ROM:0010004C                 DCB    0 
ROM:0010004D                 DCB    0 
ROM:0010004E                 DCB    0 
ROM:0010004F                 DCB    0 
ROM:00100050 aJLinkCompiledJ DCB "J-Link compiled Jun 14 2007 14:36:33 ARM Rev.5",0 
ROM:0010007F                 DCB    0 
ROM:00100080                 DCB    0 
ROM:00100081                 DCB    0 
ROM:00100082                 DCB    0 
ROM:00100083                 DCB    0 
ROM:00100084                 DCB    0 
ROM:00100085                 DCB    0 
ROM:00100086                 DCB    0 
ROM:00100087                 DCB    0 
ROM:00100088                 DCB    0 
ROM:00100089                 DCB    0 
ROM:0010008A                 DCB    0 
ROM:0010008B                 DCB    0 
ROM:0010008C                 DCB    0 
ROM:0010008D                 DCB    0 
ROM:0010008E                 DCB    0 
ROM:0010008F                 DCB    0 
ROM:00100090                 DCB    0 
ROM:00100091                 DCB    0 
ROM:00100092                 DCB    0 
ROM:00100093                 DCB    0 
ROM:00100094                 DCB    0 
ROM:00100095                 DCB    0 
ROM:00100096                 DCB    0 
ROM:00100097                 DCB    0 
ROM:00100098                 DCB    0 
ROM:00100099                 DCB    0 
ROM:0010009A                 DCB    0 
ROM:0010009B                 DCB    0 
ROM:0010009C                 DCB    0 
ROM:0010009D                 DCB    0 
ROM:0010009E                 DCB    0 
ROM:0010009F                 DCB    0 
ROM:001000A0                 DCB    0 
ROM:001000A1                 DCB    0 
ROM:001000A2                 DCB    0 
ROM:001000A3                 DCB    0 
ROM:001000A4                 DCB    0 
ROM:001000A5                 DCB    0 
ROM:001000A6                 DCB    0 
ROM:001000A7                 DCB    0 
ROM:001000A8                 DCB    0 
ROM:001000A9                 DCB    0 
ROM:001000AA                 DCB    0 
ROM:001000AB                 DCB    0 
ROM:001000AC                 DCB    0 
ROM:001000AD                 DCB    0 
ROM:001000AE                 DCB    0 
ROM:001000AF                 DCB    0 
ROM:001000B0                 DCB    0 
ROM:001000B1                 DCB    0 
ROM:001000B2                 DCB    0 
ROM:001000B3                 DCB    0 
ROM:001000B4                 DCB    0 
ROM:001000B5                 DCB    0 
ROM:001000B6                 DCB    0 
ROM:001000B7                 DCB    0 
ROM:001000B8                 DCB    0 
ROM:001000B9                 DCB    0 
ROM:001000BA                 DCB    0 
ROM:001000BB                 DCB    0 
ROM:001000BC                 DCB    0 
ROM:001000BD                 DCB    0 
ROM:001000BE                 DCB    0 
ROM:001000BF                 DCB    0 
ROM:001000C0 ; --------------------------------------------------------------------------- 
ROM:001000C0 
ROM:001000C0 loc_1000C0                              ; CODE XREF: ROM:loc_100000 j 
ROM:001000C0                 MRS     R0, CPSR 
ROM:001000C4                 BIC     R0, R0, #0x1F 
ROM:001000C8                 ORR     R0, R0, #0x12 
ROM:001000CC                 MSR     CPSR_c, R0 
ROM:001000D0                 LDR     SP, =0x203E98 
ROM:001000D4                 BIC     R0, R0, #0x1F 
ROM:001000D8                 ORR     R0, R0, #0x1F 
ROM:001000DC                 MSR     CPSR_c, R0 
ROM:001000E0                 LDR     SP, =0x203E58 
ROM:001000E4                 LDR     R0, =loc_105534 
ROM:001000E8                 BX      R0 
ROM:001000E8 ; --------------------------------------------------------------------------- 
ROM:001000EC dword_1000EC    DCD 0x203E98       ; DATA XREF: ROM:001000D0 r 
ROM:001000F0 dword_1000F0    DCD 0x203E58       ; DATA XREF: ROM:001000E0 r 
ROM:001000F4 off_1000F4      DCD loc_105534       ; DATA XREF: ROM:001000E4 r 
ROM:001000F8                 DCB 0x70 ; p 
ROM:001000F9                 DCB 0xB5 ; ? 
ROM:001000FA                 DCB  0xC 
ROM:001000FB                 DCB 0x4C ; L 
ROM:001000FC                 DCB  0xC 

看ROM:001000E4       LDR     R0, =loc_105534,BX R0这里就跳转到AT91Sam7s64 bootloader部分了。后面的代码不具有可读性,应该是加密了的。 
我就修改LDR     R0, =loc_105534 为LDR     R0, =loc_105000, 
在loc_105000加入一小段设置串口的代码并将0x1000000,64k内容用串口传出。结果就挂了!!! 
我想可能是bootloader程序将升级部分读入后,将后面的不可读部分还原,我增加的部分代码也变了,所以没有将64k flash内容通过串口传出来。 
如果再尝试的话,我觉得应该将串口传送的代码部分增加到ROM:0010007F处,或再上面一点,这里可能不会被bootloader改写。 
嵌入的代码,加入到dll中时,要适度修改。如果要放到dll中的代码前面,还要精简一下。 
#include <AT91SAM7S64.H>                    /* AT91SAM7S64 definitions */ 

#define EXT_OC          18432000   // Exetrnal ocilator MAINCK 
#define MCK             48054857   // MCK (PLLRC div by 2) 

#define BR    115200                        /* Baud Rate */ 

#define BRD  (MCK/16/BR)                    /* Baud Rate Divisor */ 

int sendchar (int ch); 
void AT91F_LowLevelInit(void); 
void init_serial (void); 

int main(void) 

        int i; 
        char *p; 

        AT91F_LowLevelInit(); 

        *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA) |  /* Enable Clock for PIO    */ 
                    (1 << AT91C_ID_US1);    /* Enable Clock for USART0 */ 

        init_serial(); 

        p = (char*)0x100000; 
         
        for(i = 0; i < 65536; i++) 
        { 
                sendchar(*p); 
                p++; 
        } 
        while(1); 

void AT91F_LowLevelInit( void) 


         AT91PS_PMC     pPMC = AT91C_BASE_PMC; 
    //* Set Flash Waite sate 
        //  Single Cycle Access at Up to 30 MHz, or 40 
            AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS ; 

    //* Watchdog Disable 
        AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS; 

        //* Set MCK at 48 054 850 
    // 1 Enabling the Main Oscillator: 
        // SCK = 1/32768 = 30.51 uSecond 
            // Start up time = 8 * 6 / SCK = 56 * 30.51 = 1,46484375 ms 
       pPMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x06 <<8) | AT91C_CKGR_MOSCEN )); 
        // Wait the startup time 
        while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS)); 
        // 2 Checking the Main Oscillator Frequency (Optional) 
        // 3 Setting PLL and divider: 
                // - div by 14 Fin = 1.3165 =(18,432 / 14) 
                // - Mul 72+1: Fout =        96.1097 =(3,6864 *73) 
                // for 96 MHz the erroe is 0.11% 
                // Field out NOT USED = 0 
                // PLLCOUNT pll startup time estimate at : 0.844 ms 
                // PLLCOUNT 28 = 0.000844 /(1/32768) 
       pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 14 ) | 
                         (AT91C_CKGR_PLLCOUNT & (28<<8)) | 
                         (AT91C_CKGR_MUL & (72<<16))); 


        // Wait the startup time 
        while(!(pPMC->PMC_SR & AT91C_PMC_LOCK)); 
        while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY)); 
         // 4. Selection of Master Clock and Processor Clock 
         // select the PLL clock divided by 2 
             pPMC->PMC_MCKR =  AT91C_PMC_PRES_CLK_2 ; 
             while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY)); 

             pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK  ; 
             while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY)); 



void init_serial (void) {                   /* Initialize Serial Interface */ 

        AT91S_USART * pUSART = AT91C_BASE_US1;      /* Global Pointer to USART1 */ 
  *AT91C_PIOA_PDR = //AT91C_PA5_RXD0 | AT91C_PA6_TXD0;         /* Enalbe TxD0 Pin */ 
                                        AT91C_PA21_RXD1 | AT91C_PA22_TXD1; 

  pUSART->US_CR = AT91C_US_RSTRX |          /* Reset Receiver      */ 
                  AT91C_US_RSTTX |          /* Reset Transmitter   */ 
                  AT91C_US_RXDIS |          /* Receiver Disable    */ 
                  AT91C_US_TXDIS ;          /* Transmitter Disable */ 


  pUSART->US_MR = AT91C_US_USMODE_NORMAL |  /* Normal Mode */ 
                  AT91C_US_CLKS_CLOCK    |  /* Clock = MCK */ 
                  AT91C_US_CHRL_8_BITS   |  /* 8-bit Data  */ 
                  AT91C_US_PAR_NONE      |  /* No Parity   */ 
                  AT91C_US_NBSTOP_1_BIT;    /* 1 Stop Bit  */ 

  pUSART->US_BRGR = BRD;                    /* Baud Rate Divisor */ 

  pUSART->US_CR = AT91C_US_RXEN  |          /* Receiver Enable     */ 
                  AT91C_US_TXEN;            /* Transmitter Enable  */ 


int sendchar (int ch)   

  /* Write character to Serial Port */ 
  AT91S_USART * pUSART = AT91C_BASE_US1;      /* Global Pointer to USART1 */ 
  while (!(pUSART->US_CSR & AT91C_US_TXRDY));   /* Wait for Empty Tx Buffer */ 
  return (pUSART->US_THR = ch);                 /* Transmit Character */ 


Pc License部分,看下面就可以了,很简单的 

.text:00413DF0 sub_413DF0      proc near           ; CODE XREF: sub_4144F0+6C p 
.text:00413DF0                                    ; sub_4146A0+105 p 
.text:00413DF0 
.text:00413DF0 arg_0           = dword ptr  14h 
.text:00413DF0 arg_4           = dword ptr  18h 
.text:00413DF0 arg_8           = dword ptr  1Ch 
.text:00413DF0 arg_C           = dword ptr  20h 
.text:00413DF0 
;         License_RDI_V11_S12345678_Eyymmdd _Kabcdabcd 
;    arg_0 = "RDI",  arg_4 = 11, arg_8 = 12345678, arg_c = yymmdd 
.text:00413DF0                 push    ebx             ;  
.text:00413DF1                 push    ebp             ;  
.text:00413DF2                 push    esi 
.text:00413DF3                 push    edi 
.text:00413DF4                 mov     edi, [esp+arg_0] 
.text:00413DF8                 or      ecx, 0FFFFFFFFh 
.text:00413DFB                 xor     eax, eax 
.text:00413DFD                 mov     edx, [esp+arg_8] 
.text:00413E01                 repne scasb 
.text:00413E03                 mov     edi, [esp+arg_4] 
.text:00413E07                 xor     ebp, ebp 
.text:00413E09                 not     ecx 
.text:00413E0B                 dec     ecx 
.text:00413E0C                 xor     edi, edx 
.text:00413E0E                 mov     ebx, ecx 
.text:00413E10                 mov     ecx, [esp+arg_C] 
.text:00413E14                 xor     edi, ecx 
.text:00413E16                 xor     esi, esi 
.text:00413E18                 test    ebx, ebx 
.text:00413E1A                 jle     short loc_413E42 
.text:00413E1C 
.text:00413E1C loc_413E1C:                        ; CODE XREF: sub_413DF0+50 j 
.text:00413E1C                 mov     eax, [esp+arg_0] 
.text:00413E20                 mov     ecx, esi 
.text:00413E22                 and     ecx, 80000003h 
.text:00413E28                 movsx   eax, byte ptr [esi+eax] 
.text:00413E2C                 jns     short loc_413E33 
.text:00413E2E                 dec     ecx 
.text:00413E2F                 or      ecx, 0FFFFFFFCh 
.text:00413E32                 inc     ecx 
.text:00413E33 
.text:00413E33 loc_413E33:                        ; CODE XREF: sub_413DF0+3C j 
.text:00413E33                 shl     ecx, 3 
.text:00413E36                 shl     eax, cl 
.text:00413E38                 cdq 
.text:00413E39                 xor     edi, eax 
.text:00413E3B                 xor     ebp, edx 
.text:00413E3D                 inc     esi 
.text:00413E3E                 cmp     esi, ebx 
.text:00413E40                 jl      short loc_413E1C 
.text:00413E42 
.text:00413E42 loc_413E42:                       ; CODE XREF: sub_413DF0+2A j 
.text:00413E42                 mov     eax, edi 
.text:00413E44                 pop     edi 
.text:00413E45                 imul    eax, 36DF45Dh 
.text:00413E4B                 pop     esi 
.text:00413E4C                 pop     ebp 
.text:00413E4D                 add     eax, 14718ABh                ;eax就是实际校验 
.text:00413E52                 pop     ebx 
.text:00413E53                 retn 
.text:00413E53 sub_413DF0      endp 
 
   

相关帖子

沙发
cchenbin|  楼主 | 2007-10-7 17:26 | 只看该作者

1

好好研究JLINK的加密和自动升级机制,然后了解一下AT91SAM7S64这颗芯片,你会有所发现的。把上位机软件PATCH一下,把升级的东西换成你自己的东西,然后把内部的程序全部送出来。。。这就是“特洛伊木马”的思想。

使用特权

评论回复
板凳
微风| | 2007-10-8 09:08 | 只看该作者

楼主,这篇帖子原本就出自21IC

人家已经**成功了,我买了一个

使用特权

评论回复
地板
cchenbin|  楼主 | 2007-10-8 11:36 | 只看该作者

最好是象ULINK一样,大家都有得用

使用特权

评论回复
5
cchenbin|  楼主 | 2007-10-8 19:06 | 只看该作者

今天试了一个程序

生成的二进制文件如图,覆盖dll中的相应内容后,升级成功。
但jlink并没有运行我的程序,而且jlink还可以正常使用。
在jlink command中看到的版本号已经升级。不知为什么我的程序
没有运行起来?这个程序我已经在开发板上试过,可以正常运行。

????


明天再试,还好jlink没有坏掉.

使用特权

评论回复
6
cchenbin|  楼主 | 2007-10-9 19:50 | 只看该作者

今天忙了一天没空去试,呵呵,**后我会公布原理图和固

使用特权

评论回复
7
王紫豪| | 2007-10-9 20:37 | 只看该作者

支持!!!!

使用特权

评论回复
8
xwj| | 2007-10-9 20:40 | 只看该作者

呵呵,等待LZ的好消息...

使用特权

评论回复
9
zhongyb| | 2007-10-10 08:36 | 只看该作者

GOOD!

使用特权

评论回复
10
cchenbin|  楼主 | 2007-10-10 10:15 | 只看该作者

别只口头支持啊,手上有jlink的朋友帮忙一起试吧

使用特权

评论回复
11
kent_gwk| | 2007-10-10 15:34 | 只看该作者

另一个**思路

我手上没有JLINK,没办法做试验,但我提供另外一种更安全破解思路:在上位机升级JLINK的时候,下载的代码应该已从升级的.dll中读出,如果运气好的话,IAR可能会在内存中把这段代码还原,我们可以在内存中把这段数据读出,就是JLINK里面的代码了;
   具体操作可以先运行SOFT-ICE,在系统下载代码到JLINK的过程中,激活SOFT-ICE,然后在整个内存中寻找标志性的数据,例如"J-Link compiled  Jun 14 2007 6:33 ARM Rev.5",找到以后再把这段数据截下来就可以了,
   有一点要确认,下载(注意是下载,不是在烧写)代码JLINK的过程被中断了,之后JLINK是否还能够使用,你要先确认,不然这个方法失败的话,你的JLINK可能会变成废物,但我想,JLINK设计的时候应该考虑过升级JLINK的过程失败的问题,不然哪怕是正常的升级JLINK,也有可能由于各种原因导致下载失败啊,如果这个下载失败也会导致JLINK无法工作,那有点说不过去

使用特权

评论回复
12
xwj| | 2007-10-10 15:42 | 只看该作者

是的,只要有办法中断、监听和注入数据,那就肯定能**

只是首先要确定试验的安全性(重复操作可行性)



偶也没有JLINK,没法试:-)

使用特权

评论回复
13
微风| | 2007-10-10 16:01 | 只看该作者

在jinkarm.dll中找不到相同的代码

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F 
00000000   2E 00 00 EA 14 F0 9F E5  14 F0 9F E5 14 F0 9F E5   ...?馃?馃?馃? 
00000010   14 F0 9F E5 FF FF FF FF  10 F0 9F E5 10 F0 9F E5   .馃????.馃?馃? 
00000020   04 54 10 00 08 54 10 00  0C 54 10 00 10 54 10 00   .T...T...T...T.. 
00000030   F8 38 20 00 1C 54 10 00  FF FF FF FF FF FF FF FF   ? ..T..???????? 
00000040   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................ 
00000050   4A 2D 4C 69 6E 6B 20 63  6F 6D 70 69 6C 65 64 20   J-Link compiled  
00000060   4A 75 6E 20 31 34 20 32  30 30 37 20 31 34 3A 33   Jun 14 2007 14:3 
00000070   36 3A 33 33 20 41 52 4D  20 52 65 76 2E 35 00 00   6:33 ARM Rev.5.. 

upx解压后只找到了类似“J-Link compiled Jun 14 2007 14:36:33 ARM Rev.5”那段,修改了日期的确可以升级。用ida反汇编后的代码差别太大,我水平不够,不敢再试。

使用特权

评论回复
14
cchenbin|  楼主 | 2007-10-10 17:45 | 只看该作者

=


===============================================================
另一个**思路 

我手上没有JLINK,没办法做试验,但我提供另外一种更安全**思路:在上位机升级JLINK的时候,下载的代码应该已从升级的.dll中读出,如果运气好的话,IAR可能会在内存中把这段代码还原,我们可以在内存中把这段数据读出,就是JLINK里面的代码了;
   具体操作可以先运行SOFT-ICE,在系统下载代码到JLINK的过程中,激活SOFT-ICE,然后在整个内存中寻找标志性的数据,例如"J-Link compiled  Jun 14 2007 6:33 ARM Rev.5",找到以后再把这段数据截下来就可以了,
   有一点要确认,下载(注意是下载,不是在烧写)代码JLINK的过程被中断了,之后JLINK是否还能够使用,你要先确认,不然这个方法失败的话,你的JLINK可能会变成废物,但我想,JLINK设计的时候应该考虑过升级JLINK的过程失败的问题,不然哪怕是正常的升级JLINK,也有可能由于各种原因导致下载失败啊,如果这个下载失败也会导致JLINK无法工作,那有点说不过去 
 ====================================================================


这种方法不可取,我们并不需要jlink把加密代码还原后的代码,我们要的是可以直接写到FLASH的固件。

我没明的你“激活SOFT-ICE”怎么用,如果可以的话那就以更简单,在升级固件时jlink会解锁内部FLASH(3秒),如果这里可以设置断点的话,就可以直接用ice读jlink中flash的内容了。读出来的就是我们要的固件了。

使用特权

评论回复
15
harlemjia| | 2007-10-10 20:44 | 只看该作者

一定要成功啊,呵呵

使用特权

评论回复
16
kent_gwk| | 2007-10-11 13:16 | 只看该作者

soft-ice

soft-ice 是一个**软件常用的工具,具体你可以到网上查一下,它可以早于操作系统先进入内存,不要说一般的应用软件,哪怕是WINDOWS内核都可以被它停下来.然后可以随意查看内存,修改CPU的寄存器和内存里的代码.但哪怕程序停下来了,SOFT -ICE 不能从通过USB读取jlink中flash的内容,因为USB的读写牵涉复杂的协议,只能从内存里读取数据喔

使用特权

评论回复
17
kent_gwk| | 2007-10-11 13:19 | 只看该作者

还有

SOFT-ICE在XP下面用的话,要比较新的版本才行,我手上这个是Compuware.DriverStudio.3.2.完全版(1百多M)试过是没问题的,

使用特权

评论回复
18
kent_gwk| | 2007-10-11 13:28 | 只看该作者

在升级固件时jlink会解锁内部FLASH(3秒),

如果在升级固件时jlink会解锁内部FLASH(3秒),那在这三秒中途把JLINK从USB拔掉,那理论上不会断了电也可以从新把内部FLASH锁起来吧,如果没有锁的话,那这时候直接通过JLINK上的ATMEL CPU 的JTAG口应该就可以读出里面的代码了.

但我所知的FLASH更新之前一般是先擦除,然后再写入,我怀疑你所说的3秒不是解锁,而是在擦除里面的FLASH.

使用特权

评论回复
19
xwj| | 2007-10-11 13:44 | 只看该作者

一般的重新烧录必然是:擦除--重写--加密

如果能监听JTAG口的数据,在加密指令前停下来....

使用特权

评论回复
20
zhongyb| | 2007-10-11 14:05 | 只看该作者

kent_gwk的理论好象不靠边

IAR可能会在内存中把这段代码还原,我们可以在内存中把这段数据读出,就是JLINK里面的代码了。
上面的是kent_gwk原话,试想BOOTLOADER在升级固件的时候怎么可能要把自己复制到PC的内存里去呢?这又是何道理?执行升级操作不是PC负责,PC只是发送升级命令和固件校验,升级的工作完全由BOOTLOADER来执行。

使用特权

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

本版积分规则

1

主题

10

帖子

1

粉丝