http://fallenwind.spaces.eepw.com.cn/articles/article/item/59116

标题:我的jlink破解失败经历
2009-07-12 01:16:56
我的jlink破解失败经历
作者: 苦丁茶

我的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                           A  B  C  D  E  F
2E EA F0 9F E5 F0 9F E5 F0 9F E5 ...?馃?馃?馃?
F0 9F E5 FF FF FF FF F0 9F E5 F0 9F E5 .馃????.馃?馃?
0C .T...T...T...T..
F8 1C FF FF FF FF FF FF FF FF ? ..T..????????
................
4A 2D 4C 6E 6B 6F 6D 6C J-Link compiled
4A 6E 3A Jun :
3A 4D 2E : ARM Rev...
................
................
000000A0 ................
000000B0 ................
000000C0 0F E1 1F C0 E3 E3 F0 E1 ...?.楞..????
000000D0 D0 9F E5 1F C0 E3 1F E3 F0 E1 .袩?.楞..????
000000E0 D0 9F E5 9F E5 FF 2F E1 3E .袩?.熷.?/針> .
000000F0 3E B5 0C 4C 0C 4E B0 X> ..P..p?L.N偘

用ida反汇编:

ROM:                 AREA ROM, CODE, READWRITE, ALIGN=
ROM: ; ORG 0x100000
ROM: CODE32
ROM:
ROM: loc_100000 ; DATA XREF: ROM:001050FC o
ROM: B loc_1000C0
ROM: ; ---------------------------------------------------------------------------
ROM: LDR PC, =0x105404
ROM: ; ---------------------------------------------------------------------------
ROM: LDR PC, =0x105408
ROM:0010000C ; ---------------------------------------------------------------------------
ROM:0010000C LDR PC, =0x10540C
ROM: ; ---------------------------------------------------------------------------
ROM: LDR PC, =0x105410
ROM: ; ---------------------------------------------------------------------------
ROM: DCD 0xFFFFFFFF
ROM: ; ---------------------------------------------------------------------------
ROM: LDR PC, =0x2038F8
ROM:0010001C ; ---------------------------------------------------------------------------
ROM:0010001C LDR PC, =0x10541C
ROM:0010001C ; ---------------------------------------------------------------------------
ROM: dword_100020 DCD 0x105404 ; DATA XREF: ROM: r
ROM: dword_100024 DCD 0x105408 ; DATA XREF: ROM: r
ROM: dword_100028 DCD 0x10540C ; DATA XREF: ROM:0010000C r
ROM:0010002C dword_10002C DCD 0x105410 ; DATA XREF: ROM: r
ROM: dword_100030 DCD 0x2038F8 ; DATA XREF: ROM: r
ROM: dword_100034 DCD 0x10541C ; DATA XREF: ROM:0010001C r
ROM: DCB 0xFF
ROM: 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: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM:0010004A DCB
ROM:0010004B DCB
ROM:0010004C DCB
ROM:0010004D DCB
ROM:0010004E DCB
ROM:0010004F DCB
ROM: aJLinkCompiledJ DCB "J-Link compiled Jun 14 2007 14:36:33 ARM Rev.5",
ROM:0010007F DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM:0010008A DCB
ROM:0010008B DCB
ROM:0010008C DCB
ROM:0010008D DCB
ROM:0010008E DCB
ROM:0010008F DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM: DCB
ROM:0010009A DCB
ROM:0010009B DCB
ROM:0010009C DCB
ROM:0010009D DCB
ROM:0010009E DCB
ROM:0010009F DCB
ROM:001000A0 DCB
ROM:001000A1 DCB
ROM:001000A2 DCB
ROM:001000A3 DCB
ROM:001000A4 DCB
ROM:001000A5 DCB
ROM:001000A6 DCB
ROM:001000A7 DCB
ROM:001000A8 DCB
ROM:001000A9 DCB
ROM:001000AA DCB
ROM:001000AB DCB
ROM:001000AC DCB
ROM:001000AD DCB
ROM:001000AE DCB
ROM:001000AF DCB
ROM:001000B0 DCB
ROM:001000B1 DCB
ROM:001000B2 DCB
ROM:001000B3 DCB
ROM:001000B4 DCB
ROM:001000B5 DCB
ROM:001000B6 DCB
ROM:001000B7 DCB
ROM:001000B8 DCB
ROM:001000B9 DCB
ROM:001000BA DCB
ROM:001000BB DCB
ROM:001000BC DCB
ROM:001000BD DCB
ROM:001000BE DCB
ROM:001000BF DCB
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 = ( << AT91C_ID_PIOA) | /* Enable Clock for PIO */
( << AT91C_ID_US1); /* Enable Clock for USART0 */ init_serial(); p = (char*)0x100000; for(i = ; i < ; i++)
{
sendchar(*p);
p++;
}
while();
}
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 <<) | 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 & ) |
(AT91C_CKGR_PLLCOUNT & (<<)) |
(AT91C_CKGR_MUL & (<<))); // 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+ 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 = , arg_8 = , 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+ 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,
.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

我的jlink破解失败经历的更多相关文章

  1. myeclipse2017破解失败解决办法

    最近,笔者安装的myeclipse2017破解出了问题,破解本来是很简单的事,就是几步而已,但是一直出问题,现在安利一波myeclipse2017版破解失败解决办法.诸如下图:()因为笔者已经破解好了 ...

  2. 怎么找到占用usb的模块,linux下Jlink连接失败

    问题是这样产生的,我在linux下安装jlink,启动JLinkExe执行,总是提示不能通过usb连接: SEGGER J-Link Commander V5.10q (Compiled Mar :: ...

  3. CentOS7下安装Mysql失败经历--CentOS7使用yum安装和卸载Mysql过程

    起因 自己租用的BandwagonVPS上安装了个CentOS7,然后开始安装各种软件,结果yum安装MySQL发现MySQL在yum源中的Mysql不对劲,于是自己百度搜索安装方法. 终于我搜到了这 ...

  4. 记一次腾讯IEG面试失败经历

    如果这是一次成功的经历,估计浏览量不会低.无奈本人能力有限,而且一直在实习,准备时间与面试经验有限导致此次失败,不过,失败也是一种宝贵的经验,我希望也相信这里能给大家一些比较珍贵的经验,废话不多说,上 ...

  5. 失败经历--在windows下安装meld

    缘起 在linux下,最早用的比较工具是vim,这是作为一个vimer的自尊(其实没有关系吧).终于有一天,在比较同一个项目的两个版本的时候,比较了两三个文件后,看着vim里面花花绿绿的颜色,实在是受 ...

  6. myeclipse10破解失败,正解

    此文图借用他人的,很是经典 第一步:输入任意用户名 第二步:点击Systemid... 按钮,自动生成本机器的systemid.ps:确定本机的systemid,如果和破解器生成不一致,需要copy本 ...

  7. 设计Optaplanner下实时规划服务的失败经历

    其实本文不知道算不算一个知识点分享,过程很美妙,但结果很失败.我们在利用Optaplanner的Real-Time planning(实时规则)功能,设计实时在线规划服务时,遇到一个属于Optapla ...

  8. 【转】【JLINK下载失败,STLINK下载失败万能解决方案】JLINK和STLINK都无法下载时的解决办法,此时芯片并没有报废

    很多时候都会认为这个板子无法下载了,其实不是的,有解决办法. 原因如下: 由于客户设置的晶振频率和PLL配置错误时,就会出现这种问题,下载一次程序锁住一次板子,搞的人痛不欲生. 还有错误的外设配置,S ...

  9. loadrunner11破解失败,已解决“ license security violation.Operation is not allowed ”问题

    参考链接https://blog.csdn.net/yongrong/article/details/7891738,亲测可以解决问题 在64位win7系统中安装LR11时,采用普通的方法无法授权.最 ...

随机推荐

  1. selenium启动chrome模拟器模拟手机

    一.如果chrome选项里边有这个模拟设备(比如iPhone 6 Plus): 1.先启动Selenium Grid, 比如命令:java -jar selenium-server-standalon ...

  2. iscsi服务器的搭建

    1.在您的存储服务器上,以 root 用户身份使用 yum 命令安装 scsi-t arget -ut ils 软件包. # yum install -y scsi-target-utils 2.把您 ...

  3. int各种数据类型的表示范围

    计算方法:1.正数部分数部分:2^(字节数*8-1)-1 2.负数部分:-(2^(字节数*8-1)+1) unsign int:正数部分*2+1

  4. EasyUi–7.tab和datagrid和iframe的问题

    1. 多个tab切换,第2个不显示 动态添加tab Iframe页面的方法 展开 折叠 <script type="text/javascript"> $(functi ...

  5. anaconda不错的

  6. Oracle 入门学习笔记

    linux命令 查看linux系统版本号 uname -r 或 uname -a 查看linux发行版本号 cat /etc/redhat-release 查看linux具体版本号 cat /proc ...

  7. IEEEXtreme 10.0 - Flower Games

    这是 meelo 原创的 IEEEXtreme极限编程比赛题解 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank.com/contests/ieeextreme-c ...

  8. HTK训练错误消息意义

    在HTK训练线上数据的时候,遇到了ERROR [+6550] LoadHTKLabels: Junk at end of HTK transcription,这个问题,网上查阅是说有空行,结果根本没有 ...

  9. css绝对居中img

    html: <div id="imgs"> <img src="http://pic.616pic.com/ys_b_img/00/03/60/Kt6Q ...

  10. Oracle 子查询和组函数练习

    SELECT * FROM emp; SELECT * FROM dept; 1.查询公司员工工资的最大值,最小值,平均值和总和. SELECT MAX(sal) AS 工资最大值, MIN(sal) ...