我的jlink破解失败经历
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破解失败经历的更多相关文章
- myeclipse2017破解失败解决办法
最近,笔者安装的myeclipse2017破解出了问题,破解本来是很简单的事,就是几步而已,但是一直出问题,现在安利一波myeclipse2017版破解失败解决办法.诸如下图:()因为笔者已经破解好了 ...
- 怎么找到占用usb的模块,linux下Jlink连接失败
问题是这样产生的,我在linux下安装jlink,启动JLinkExe执行,总是提示不能通过usb连接: SEGGER J-Link Commander V5.10q (Compiled Mar :: ...
- CentOS7下安装Mysql失败经历--CentOS7使用yum安装和卸载Mysql过程
起因 自己租用的BandwagonVPS上安装了个CentOS7,然后开始安装各种软件,结果yum安装MySQL发现MySQL在yum源中的Mysql不对劲,于是自己百度搜索安装方法. 终于我搜到了这 ...
- 记一次腾讯IEG面试失败经历
如果这是一次成功的经历,估计浏览量不会低.无奈本人能力有限,而且一直在实习,准备时间与面试经验有限导致此次失败,不过,失败也是一种宝贵的经验,我希望也相信这里能给大家一些比较珍贵的经验,废话不多说,上 ...
- 失败经历--在windows下安装meld
缘起 在linux下,最早用的比较工具是vim,这是作为一个vimer的自尊(其实没有关系吧).终于有一天,在比较同一个项目的两个版本的时候,比较了两三个文件后,看着vim里面花花绿绿的颜色,实在是受 ...
- myeclipse10破解失败,正解
此文图借用他人的,很是经典 第一步:输入任意用户名 第二步:点击Systemid... 按钮,自动生成本机器的systemid.ps:确定本机的systemid,如果和破解器生成不一致,需要copy本 ...
- 设计Optaplanner下实时规划服务的失败经历
其实本文不知道算不算一个知识点分享,过程很美妙,但结果很失败.我们在利用Optaplanner的Real-Time planning(实时规则)功能,设计实时在线规划服务时,遇到一个属于Optapla ...
- 【转】【JLINK下载失败,STLINK下载失败万能解决方案】JLINK和STLINK都无法下载时的解决办法,此时芯片并没有报废
很多时候都会认为这个板子无法下载了,其实不是的,有解决办法. 原因如下: 由于客户设置的晶振频率和PLL配置错误时,就会出现这种问题,下载一次程序锁住一次板子,搞的人痛不欲生. 还有错误的外设配置,S ...
- loadrunner11破解失败,已解决“ license security violation.Operation is not allowed ”问题
参考链接https://blog.csdn.net/yongrong/article/details/7891738,亲测可以解决问题 在64位win7系统中安装LR11时,采用普通的方法无法授权.最 ...
随机推荐
- UOJ#58/BZOJ 3052【WC2013】糖果公园
好写好调的莫队算法,就算上树了仍然好写好调. 传送门 http://uoj.ac/problem/58 简要做法 将树按照dfs序分块,然后将询问按照(u所在块,v所在块,时间)作为关键字进行排序,依 ...
- java之正则表达式、日期操作
正则表达式和日期操作 正则表达式简介 正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式规则,然后使用该格式规则匹配某个字符串是否符合格式要求. 作用:比如注册邮箱,邮箱有用户名和密码,一 ...
- highcharts自定义导出文件格式(csv) highcharts的一些使用心得
highcharts是国外的一个图表插件,包括各种数据图形展示,柱形图,线性图等等,是手机端和pc端最好的图表插件之一,相比于百度的echarts更加轻便和易懂.链接http://www.hchart ...
- 二、python框架相关知识体系
Django框架 1.django框架.flask框架和Tornado框架的区别? django框架,内置组件多,自身功能强大,是一个大而全的框架,ORM.Admin.中间件.Form.ModelFr ...
- Linux 基础——压缩解压命令
时间过的真快,周末不会学习Linux,每天就是下班后学习.这周工作很忙,要几天总结一次了. 一.处理数据文件 sort dest:将目标文件的内容进行排序,默认是按字符顺序排序的. sort -n d ...
- 在 github 中新建仓库后,如何上传文件到这个仓库里面。
在 github 中新建仓库后,如何上传文件到这个仓库里面. libin@hglibin MINGW64 /e/github.io (master) $ git remote libin@hglibi ...
- Django总叙(转)
Django 千锋培训读书笔记 https://www.bilibili.com/video/av17879644/?p=1 切换到创建项目的目录 cd C:\Users\admin\Desktop\ ...
- vue-router history 模式 iis 配置
首先需要安装 url rewrite模块到IIS点我安装 然后在web.config文件中添加如下配置 <?xml version="1.0" encoding=" ...
- es6导入导出模块
在JavaScript ES6中,export与export default均可用于导出常量.函数.文件.模块等,你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方 ...
- laravel框架安装过程中遇到的问题
1.安装laravel框架之前的必要环境 php环境:网上有集成好的服务器,例如wamp,phpstudy.当然你可以自己搭建属于自己的环境.其中php必须是7.1版本以上: compose:php的 ...