搜索
bottom↓
回复: 248

长篇连载:J-Link源代码大公开,做中国人自己的免费ARM仿真器!!!

  [复制链接]
(382131159)

出0入0汤圆

发表于 2009-6-22 09:24:03 | 显示全部楼层 |阅读模式
序:

中国人有世界上最聪明的脑袋,但我们不擅长奉献,不擅长积累。
谨以此帖作为一块砖头,希望大家奉献出自己的研究所得。


一些申明:

1) 本帖所有源代码为taoist大侠和本人一起共同研究,反汇编所得,不保证100%正确,仅供学习参考
2) 本人不解答任何关于源代码的问题
3) 本人不公开联系方式
4) 之所以叫长篇连载,是我一边反汇编一边贴,别催我
(382131003)

出0入0汤圆

 楼主| 发表于 2009-6-22 09:26:39 | 显示全部楼层
第一部分:main函数部分

J-Link(以V8为例)的源代码是由Embos + Emusb写成,当然Pro还有EmTCP。

因此,main函数部分很简单

OS_STACKPTR int   Stack_jlink_task[2408];
OS_TASK           TCB_jlink_task;

void main(void)
{
    OS_DisableInt();
    OS_DICnt ++;
    set_security();
    copy_vender();
    OS_InitKern();
    OS_InitHW();
    OS_CreateTask_DP(&TCB_jlink_task, 100, jlink_task, Stack_jlink_task, (void*)2408);
    OS_Start();
}
(382130789)

出0入0汤圆

发表于 2009-6-22 09:30:13 | 显示全部楼层
不会吧!这也太猛了吧?
(382130566)

出0入0汤圆

发表于 2009-6-22 09:33:56 | 显示全部楼层
nihke2 有联系方式吗/ 给我发个邮件好吗?  500tage@163.com
(382130427)

出0入0汤圆

 楼主| 发表于 2009-6-22 09:36:15 | 显示全部楼层
一些小函数:

__arm __ramfunc void OS_DisableInt(void)
{
    __asm("mrs     r12, CPSR");
    __asm("orr     r12, r12, #128");
    __asm("msr     CPSR_c, r12");
}

__arm __ramfunc void OS_EnableInt(void)
{
    __asm("mrs     r12, CPSR");
    __asm("bic     r12, r12, #128");
    __asm("msr     CPSR_c, r12");
}
(382130359)

出0入0汤圆

发表于 2009-6-22 09:37:23 | 显示全部楼层
这个要 mark
(382129821)

出0入0汤圆

发表于 2009-6-22 09:46:21 | 显示全部楼层
地板坐等。。。
(382129503)

出0入0汤圆

 楼主| 发表于 2009-6-22 09:51:39 | 显示全部楼层
void set_security(void)
{
    if(AT91C_BASE_MC -> MC_FSR & AT91C_MC_SECURITY == 0)
    {
        AT91C_BASE_MC -> MC_FCR = 0x5A00000F;
        while(!(AT91C_BASE_MC -> MC_FSR & AT91C_MC_FRDY));
    }
}
(382129091)

出0入0汤圆

 楼主| 发表于 2009-6-22 09:58:31 | 显示全部楼层
#define PID_PIT   1
void OS_InitHW(void)
{
    OS_DisableInt();
    AT91C_BASE_PITC -> PITC_PIMR = 0x03000BB2;
    OS_ARM_InstallISRHandler(PID_PIT, PIT_handler);
    OS_ARM_EnableISR(PID_PID);
    OS_RestoreI();
}
(382128816)

出0入0汤圆

发表于 2009-6-22 10:03:06 | 显示全部楼层
强,程序是怎么读出来的??
(382128691)

出0入0汤圆

发表于 2009-6-22 10:05:11 | 显示全部楼层
楼主有没有研究JLinkARM.dll?能不能提供接口函数的原型
(382128651)

出0入0汤圆

发表于 2009-6-22 10:05:51 | 显示全部楼层
点击此处下载 ourdev_455194.rar(文件大小:2.38M) (原文件名:embos_arm_iar v3.32.rar)
(382128066)

出0入0汤圆

发表于 2009-6-22 10:15:36 | 显示全部楼层
不建议楼主这么做,太打击正版厂商了,无异于杀鸡取卵。
另外,twentyone开发的usb jtag不就已经是国人自己做的了么,jlink的破解已经严重影响了它的销售,再这么做就太过了。
自己研究可以,但随意公布对任何一方都不利。
(382127497)

出0入0汤圆

发表于 2009-6-22 10:25:05 | 显示全部楼层
搞大了搞大了...
(382126295)

出0入0汤圆

发表于 2009-6-22 10:45:07 | 显示全部楼层
楼主的目的是不是想反汇编出仿真器和pc之间+仿真器和芯片之间的协议,如果是前者的话,建议从PC端入手,后者的话芯片厂家应该会提供。
(382126187)

出0入0汤圆

发表于 2009-6-22 10:46:55 | 显示全部楼层
mark
(382125891)

出0入0汤圆

发表于 2009-6-22 10:51:51 | 显示全部楼层
“做中国人自己的ARM仿真器!!!”这句耐人寻味
(382125694)

出0入0汤圆

发表于 2009-6-22 10:55:08 | 显示全部楼层
呵呵,其实他公布的是一个思路,是伪码,不是真正的源代码的。无法直接简单的用于D版的。
(382125491)

出0入0汤圆

发表于 2009-6-22 10:58:31 | 显示全部楼层
KAO,汇编转换为C,牛X啊!
(382125316)

出0入0汤圆

发表于 2009-6-22 11:01:26 | 显示全部楼层
听说SEGGER公司召开紧急会议,可能不再升级公司的JLINK产品,以后大家就出钱卖正版吧.哈哈
(382125291)

出0入0汤圆

发表于 2009-6-22 11:01:51 | 显示全部楼层
听说SEGGER公司召开紧急会议,可能不再升级公司的JLINK产品,以后大家就出钱卖正版吧.哈哈
(382124888)

出0入0汤圆

发表于 2009-6-22 11:08:34 | 显示全部楼层
楼上说的真的假的啊?
(382124599)

出0入0汤圆

发表于 2009-6-22 11:13:23 | 显示全部楼层
楼主,把这个反汇编成C要三思,其实对于很多人来说做仿真器一点不难,PC与仿真器之间的协议也可以自定,很多做仿真器的被难住的都是RDI这个DLL接口。

所以,破解了JLINK,只造就了一个白菜价的淘宝市场,而且对厂商也好,消费者也好,都好处不大,短时间里有低价的仿真器可以用,可是主导权还是在国外的厂商的手中,更严重的可能产品不再更新;

如果破解RDI,造就的是一个仿真器行业!

不过楼主对反汇编 成C已经给了条很明确的思路,就算楼主不搞下去,也会有人搞出来的了。

PS:楼主太强了, 膜拜中……
(382124528)

出0入0汤圆

发表于 2009-6-22 11:14:34 | 显示全部楼层
还是低调点好
(382123968)

出0入0汤圆

发表于 2009-6-22 11:23:54 | 显示全部楼层
我们不禁要反思一下,LZ若真的能坚持做出中国人自己的ARM仿真器,能有JLINK一样好用吗?能继续升级支持ARM新的内核吗?能不打破现有的市场规则吗?若不能,那结局将可想而知。。。不过现在都已经这个样子了,结局已经可想而知,S公司该如何权衡维护Z版客户的利益和打击D版本(完全伪Z版)用户的行为呢?不升级就是宣布某些版本死缓。
(382120688)

出0入0汤圆

发表于 2009-6-22 12:18:34 | 显示全部楼层
几位说的极有道理,应该把RDI的协议给分析出来。呵呵。
21好像就已经把RDI协议给分析出来了。
(382120134)

出25入4汤圆

发表于 2009-6-22 12:27:48 | 显示全部楼层
RDI协议给分析
这样才能自己做:)
(382119668)

出0入0汤圆

发表于 2009-6-22 12:35:34 | 显示全部楼层
mark
(382119646)

出0入0汤圆

发表于 2009-6-22 12:35:56 | 显示全部楼层
LS几位表光说不练啊...

点击此处下载 ourdev_455250.rar(文件大小:95K) (原文件名:JTAG_RDI.rar)
(382119518)

出0入0汤圆

发表于 2009-6-22 12:38:04 | 显示全部楼层
RDI还用破解,ads 1.2安装目录下就有rdi调用的头文件
根据这些头文件,谁都可以做出rdi兼容的dll
关键是看谁能得到arm的承认而已

其实rdi只是后面的问题,支持谁的问题,属于上层协议
关键是先要做出一个底层的usb-jtag,就是pc到jtag的转换器,至少能够实现jtag操作
然后再谈怎么实现调试和烧写
最后才是支持谁的问题

如果谁真有兴趣去做自主的usb-jtag的仿真器,可以联系我
我目前正在做一个开源的usb-jtag工具
(382119356)

出0入0汤圆

发表于 2009-6-22 12:40:46 | 显示全部楼层
个人感觉,RDI接口效率不高,否则S*e*g*g*e*r干嘛要订属于自己的协议呢
(382119342)

出0入0汤圆

发表于 2009-6-22 12:41:00 | 显示全部楼层
不可能自己做的。
怎么支持最新的芯片型号?得不到Atmel, ST,philips 等等人家的支持,不可能长久的。

把人家的东西搞白菜了,同时也把自己国人的给扼杀了,只此而已。
就像盗版软件,把国内的软件业杀死了。

其实想想jlink只是个很好的设计,并没有多少高技术含量。

这个就应该偷偷自己用用,省点钱就得了,搞大了没有好结果。

最好的结果就是S降点价了,但是不可能6X元。
另外就是AT,ST,IAR放弃与S合作,转而支持国内的某家仿真器厂商新秀,让广大用户实惠一些,只是有这个可能而已。
(382119005)

出0入0汤圆

发表于 2009-6-22 12:46:37 | 显示全部楼层
to 【31楼】 fantaq  

此言差矣

1、做ICE为啥要得到Atmel,ST,Philips的支持呢?跟他们一点关系都没有!
2、J没有多高技术含量?那请问,J出来前为啥没有支持flash里多于2个断点的ICE?
(382118211)

出0入0汤圆

发表于 2009-6-22 12:59:51 | 显示全部楼层
呵呵,to taoist,

我的看法是这样的,

1. AT, ST 这边还好,不靠这个赚钱,并且资料也基本公开,藏着掖着的不多。但是没有正式合作,可能还是有点小麻烦。
2. 断点不能多于2个,比如AT的ARM7, 是因为片内硬件只做了2个。仿真器只是个jtag通讯转换而已,片内才是真正的仿真硬件。片内2个硬件断点,那就只能用2个了。
J是支持了flash里设断点,这本来不是新鲜东西,早先都在ram里跑程序,在ram里设软件断点是常事,VC, GDB什么的都是这么做的。到J这里把这个方法用到flash上了,拿flash擦来写去当ram用了,只此而已。
一般来说,这个需要和调试器紧密结合的,也就是IAR这边。没有IDE厂商的支持,也能做,但是走不远啊,他一升级ICE这边就可能不兼容,玩完阿。当然ICE也可以升级,追上他,但是毕竟是私生子阿。
(382116812)

出0入0汤圆

发表于 2009-6-22 13:23:10 | 显示全部楼层
to 【33楼】 fantaq

1、还是不明白不跟AT,ST合作会有什么麻烦,跟他们有啥关系。
2、flash断点问题,现在看起来是不新鲜了,但在很长一段时间内,没有第2个ICE实现此功能啊。

我的一直看法是:
S*e*g*g*e*r的J-L*i*n*k虽然不是最好的ARM仿真器,但S*e*g*g*e*r公司的不断创立不断改进是绝对值得学习的
想想,一片ARM7,48MHz,速度能超过用CPLD,用FPGA的其他仿真器,不服不行啊
反汇编学学人家的思路,真的很长见识,反正偶是很期待C版源代码的。
(382116405)

出0入0汤圆

发表于 2009-6-22 13:29:57 | 显示全部楼层
呵呵,我也等着看源码呢,J-L*i*n*k确实是个很棒的设计阿。各家都应该拿J-L*i*n*k当公板,凡是用jtag的全用这个设计,比如PIC, FPGA什么的。那就好了,又便宜又好。

不过还是低调点,别把S的人招来了。纯技术交流。
(382115695)

出0入0汤圆

发表于 2009-6-22 13:41:47 | 显示全部楼层
V8 4.xx的版本里加了N多ARM11的控制命令,这一块我还没看懂呢,转成C的就容易多了,哇哈哈
(382096817)

出0入0汤圆

发表于 2009-6-22 18:56:25 | 显示全部楼层
我也觉得RDI那部分其实很容易,配置ads中的rdi的头文件,再加上简单的对rdi接口的反汇编(毕竟x86上的反汇编非常容易),很容易得到的,另外我记得有个基于gdb的调试代理中,有部分arm授权的rdi代码的。

仿真器这方面,我同意taoist的,s的确做得非常好,使用起来很方便,效率也高。我没有仔细硬件过,不过从它的引脚的使用上,其实它利用了at91sam7s的外设的特性,利用了spi、scc(一年多没用s64了)之类的东西的(猜测而已,没有实证,不过以前抄它的图时发现的,应该不是巧好。

我觉得j是一个学习jtag相关知识的一个非常好的例子。以前曾想过仔细研究下,通过上位软件,改造成fpga的下载器,当作一个通用的jtag适配器使用,不过一直没时间动手。从原理上来讲,使用它提供的接口,把它改造成一个支持可编辑逻辑器件下载,51和avr等的下载调试器应该是可能的。

至少代码公开,不知道会不会有法律风险,这个应该考虑下。估计一种变通的方法可以把名字什么的都改了,只是针对某某程序的代码,看的人知道就行了。
(382096151)

出0入0汤圆

发表于 2009-6-22 19:07:31 | 显示全部楼层
这次搞大了
(382088068)

出0入0汤圆

发表于 2009-6-22 21:22:14 | 显示全部楼层
还是希望楼上诸位能考虑下版权问题。

Jlink并不是靠硬件和一次的固件开发就能成功的,它提供的丰富的应用软件是非常重要的因素,应用软件的不断开发更新支持新器件,才是维持着它的优异性的根本原因。一旦segger停止软件的公开下载,楼上又有几人能用反汇编的结果,同时接手开发上位机和下位机的软件、驱动、固件?

国外的设备贵其实更多的是贵在软件部分,都说西门子的PLC功能强,但强大的最主要原因是西门子提供了非常丰富的开发软件、上位机组态软件等一系列的应用软件来支持着它的硬件(去用欧姆龙的CX-One开发,再去用用看Step7/WinCC Flexible就知道差距了)。
(382085661)

出0入0汤圆

发表于 2009-6-22 22:02:21 | 显示全部楼层
不要认为MIPS的技术就能阻挡我们对,CPU技术的研究.大量的技术我们是没有办法得到的.只能从相关的产品中破解.我相信过个2,3年国内肯定会制定新的指令代码集...
(382083401)

出0入0汤圆

发表于 2009-6-22 22:40:01 | 显示全部楼层
mark
(382082287)

出0入0汤圆

发表于 2009-6-22 22:58:35 | 显示全部楼层
我比较相信短期内,在强一点的性能方面不会有自己制定的新的指令集。不过在MCU领域,倒有可能。

制定指令集很容易,关键是要有配置的软件支持:编译器,操作系统,应用软件。因而还是兼容才行,这也是为什么AMD要x86兼容。

所以现在龙芯走mips兼容是非常正确的道路。不知道龙芯可不可以在内核上做过处理,方便进行x86的模拟,这样通过一个软件层,来运行windows呢...
(382080831)

出0入0汤圆

发表于 2009-6-22 23:22:51 | 显示全部楼层
这个强大,期待~~
(382078858)

出0入0汤圆

发表于 2009-6-22 23:55:44 | 显示全部楼层
void OS_InitHW(void) {
  OS_DI();
  _InitVIC();                   /* Initialize interrupt controller */
  /* Initialize PIT as OS timer, enable timer + timer interrupt */
  _PIT_MR = ((OS_TIMER_RELOAD & 0x000FFFFF) | (1 << 25) | (1 << 24));
  OS_ARM_InstallISRHandler(_SYSTEM_IRQ_ID, _OS_SystemIrqhandler);
  OS_ARM_EnableISR(_SYSTEM_IRQ_ID);
  OS_RestoreI();
}
/*********************************************************************
*
*       OS_EnableInt()
*/
OS_INTERWORK __arm __ramfunc void OS_EnableInt(void) {
  __asm("mrs     r12,CPSR");
  __asm("bic     r12,r12,#128");
  __asm("msr     CPSR_c,r12");
}

/*********************************************************************
*
*       OS_DisableInt()
*/
OS_INTERWORK __arm __ramfunc void OS_DisableInt(void) {
  __asm("mrs     r12,CPSR");
  __asm("orr     r12,r12,#128");
  __asm("msr     CPSR_c,r12");
}

/*********************************************************************
*
*       OS_EnableIntSVC()
*/
OS_INTERWORK __arm __ramfunc void OS_EnableIntSVC(void) {
  __asm("msr     CPSR_c,#0x13");
}

/*********************************************************************
*
*       OS_DisableIntSVC()
*/
OS_INTERWORK __arm __ramfunc void OS_DisableIntSVC(void) {
  __asm("msr     CPSR_c,#0x93");
}
(382078627)

出0入0汤圆

发表于 2009-6-22 23:59:35 | 显示全部楼层
mark!
(382077125)

出0入0汤圆

发表于 2009-6-23 00:24:37 | 显示全部楼层
mark
(382046330)

出0入0汤圆

 楼主| 发表于 2009-6-23 08:57:52 | 显示全部楼层
#pragma section="IRQ_STACK"
void jlink_task(void)
{
    INT32U USB_num_recv;
    INT32U free_SRAM_size;

    free_SRAM_size = cpu_SRAM_size() - __sfe("IRQ_STACK") + 1;
    OS_init_mem_block(__sfe("IRQ_STACK"), free_SRAM_size);
    init_hw()
    set_speed(20000);
    do_iarks(1);
    calc_AD4();
    LED_on(0);
    init_emusb();
    while(1)
    {
        if(USB_read_resume_status())
        {
            if(USB_IsInReset())
            {
                LED_on(0);
                time_tick = 1;
                disable_SSC_SPI_clock()
                if(USB_recv(&USB_num_recv) == NOERR)
                {
                    enable_SSC_SPI_clock();
                    time_tick = -1;
                    LED_off(0);
                    USB_cmd_table(USB_num_recv);
                }
            }
            else
            {
                USB_restart();
            }
        }
        else
        {
            led_switch(0);
            OS_Delay(50);
        }
    }
}
(382046137)

出0入0汤圆

 楼主| 发表于 2009-6-23 09:01:05 | 显示全部楼层
shian0551继续贴呀
(382042082)

出0入0汤圆

发表于 2009-6-23 10:08:40 | 显示全部楼层
点击此处下载 ourdev_455474.zip(文件大小:19.11M) (原文件名:Se*g*ger_Ev***al_Sof*****tw*are_em*F*i*le,e*mW***in,em*bO*S_I**P,e**m88b***O**S,em*U*S*B_for_IA*R*E*W8A8R*M8V*5*.*2*0.zip)
(382036357)

出0入0汤圆

发表于 2009-6-23 11:44:05 | 显示全部楼层
支持你们一下。
(382029185)

出0入0汤圆

发表于 2009-6-23 13:43:37 | 显示全部楼层
mark
(381995934)

出0入0汤圆

发表于 2009-6-23 22:57:48 | 显示全部楼层
收藏了..
(381993423)

出0入0汤圆

发表于 2009-6-23 23:39:39 | 显示全部楼层
真的很厉害
(381961723)

出0入0汤圆

发表于 2009-6-24 08:27:59 | 显示全部楼层
先说谢谢
慢慢跟着看了
(381961059)

出0入0汤圆

发表于 2009-6-24 08:39:03 | 显示全部楼层
真是强人!
(381960942)

出0入0汤圆

发表于 2009-6-24 08:41:00 | 显示全部楼层
一个字“牛”
(381959144)

出0入0汤圆

发表于 2009-6-24 09:10:58 | 显示全部楼层
if(AT91C_BASE_MC -> MC_FSR & AT91C_MC_SECURITY == 0)
================
这句 有问题,C语言优先级呀....被无视了,或者本来意图就这样?

还是因该
if( (AT91C_BASE_MC -> MC_FSR & AT91C_MC_SECURITY) == 0 )
(381945936)

出0入0汤圆

发表于 2009-6-24 12:51:06 | 显示全部楼层
EN,我也觉得加个括号比较好
(381942006)

出0入0汤圆

发表于 2009-6-24 13:56:36 | 显示全部楼层
MARK
(381936649)

出0入0汤圆

发表于 2009-6-24 15:25:53 | 显示全部楼层
不是加括号比较好的问题,而是加了和不加编译出来两码事...

==的优先级大于&运算...
(381934145)

出0入0汤圆

发表于 2009-6-24 16:07:37 | 显示全部楼层
强贴留名
(381924099)

出0入0汤圆

发表于 2009-6-24 18:55:03 | 显示全部楼层
你可以写个arm的反编译工具了
(381921620)

出0入0汤圆

 楼主| 发表于 2009-6-24 19:36:22 | 显示全部楼层
void set_security(void)
{
    if((AT91C_BASE_MC -> MC_FSR & AT91C_MC_SECURITY) == 0)
    {
        AT91C_BASE_MC -> MC_FCR = 0x5A00000F;
        while(!(AT91C_BASE_MC -> MC_FSR & AT91C_MC_FRDY));
    }
}

谢谢 Snoopyzz,这个函数没验证过,一向是被注释掉的
(381909350)

出0入0汤圆

发表于 2009-6-24 23:00:52 | 显示全部楼层
楼主的能力是不错,但是我觉得这路是不是偏了?
破解出人家的东西还冠名“做中国人自己的免费ARM仿真器” ..... 这好么?
干嘛不重头开始写?
十来万行代码而已,看了openocd的代码,组织10来个人,也不是做不出来 ......
为啥 ......
(381754526)

出0入0汤圆

发表于 2009-6-26 18:01:16 | 显示全部楼层
“做中国人自己的免费ARM仿真器”中国有句古语:天下没有免费的午餐!当没得玩的时候,大家就购买中国公司做的仿真器,不过应该会比国外正版便宜些,还可以获得好名声叫"支持民族振兴"呵呵!请大家关注哈哈!
(381752822)

出0入0汤圆

发表于 2009-6-26 18:29:40 | 显示全部楼层
要发就一次完,每天挤一点什么意思。
用IDA轻松逆向出源码。
(381740740)

出0入0汤圆

发表于 2009-6-26 21:51:02 | 显示全部楼层
to 【64楼】 nihke2

看看,人们是不懂感恩的,让他们IDA去吧
(381739439)

出0入0汤圆

发表于 2009-6-26 22:12:43 | 显示全部楼层
呵呵,ida反汇编arm代码可没反汇编x86代码那么容易。

用来分析上位机的dll倒是挺方便,特别是加上那个decompiler插件
(381736274)

出0入0汤圆

发表于 2009-6-26 23:05:28 | 显示全部楼层
刚才看了下,usb h-jtag还是相当的贵要750一个
(381668114)

出0入0汤圆

发表于 2009-6-27 18:01:28 | 显示全部楼层
用IDA逆向ARM的代码,难点在于ARM有两种模式,32位的ARM指令,16位的thumb指令。。。

完全是体力活,如果写IDC脚本,更快。。。
(381663968)

出0入0汤圆

发表于 2009-6-27 19:10:34 | 显示全部楼层
to 【71楼】 GoingDown  

IDA反出来的ARM汇编也能看懂?对您的敬仰犹如滔滔江水。。。
(381649900)

出0入0汤圆

发表于 2009-6-27 23:05:02 | 显示全部楼层
IDA反汇编的ARM汇编看懂基本还能行,但是由于没有特别针对SAM7S64和IAR的优化,可能不如中IAR直观,特别是RAM函数上面。不过好处是可以方便的进行注释,这一点比较IAR可能方便不少。

直要在IDA中反汇编的话,要确定一下用的IAR的版本号,然后做一个sig文件,这样就很方便的识别库函数。如果在由os和usb部分的源文件,再做个sig的话,的确会轻松不少。另外,针对SAM7S64,可以写个配置的文件,对外设呀什么的,会很方便识别。

不过我挺懒,一直没自己动手。不知道71楼的呢?
(381647355)

出0入0汤圆

发表于 2009-6-27 23:47:27 | 显示全部楼层
to 【73楼】 hiberhe

难道你有OS和USB部分的源文件?
(381642264)

出0入0汤圆

发表于 2009-6-28 01:12:18 | 显示全部楼层
反汇编ARM不是很难的,ARM不比PC机中的软件,不会涉及到虚拟机,加密壳,及stolen code

等保护。充其量只有一些花指令,或CRC校验的保护而已。

至于符号文件可以用以下方法得到:

1. dll -> lib
2. 用FLAIR为该库创建一个模式文件。
3. 用sigmake.exe处理此模式文件,生成一个签名文件。
4. 复制它到<IDADIR>/sig目录
(381636109)

出0入0汤圆

发表于 2009-6-28 02:54:53 | 显示全部楼层
strong arm
xscale也算arm吧
TI 还有三星的一些等等,现在WM手机都用的arm芯片吧?

反汇编wince有些难度吧?
.net CF 和java就是虚拟机吧?
wince上有没有加密壳的exe我不知道,但加了压缩壳的肯定有...

当然,我把wince扯进来可能有点瞎扯,
但并不是说arm没有这些吧,75L的ARM定义的范围小了些....

当然,这里所说的arm可能就是这么小的范围,就当我没说好了...
只是深夜无聊不负责任随便说说...
(381612014)

出0入0汤圆

发表于 2009-6-28 09:36:28 | 显示全部楼层
to 【74楼】 taoist
我没有OS或USB部份的源码的。
有个想法,既然有试用版,估计与完整版也差不多,没准也可以通过对其试用的库文件建sig的方式,在IDA中识别出不少符号来?
不过没我没有试过,现在一年多没用arm了,没有当初研究j那么激动了。

对了,知道不知道j使用的是iar arm的4.?的进行编译的?

从【75楼】的dll->lib就感觉是说wince的情况,我的理解跟【76楼】不同,其实要真是wince下,分析倒容易多了,一是较新的版本特别是6有源码,另外,其跟windows太像,相关工具使用起来也更容易。另外,因为wince很大众,所以ida对它的支持也非常好,好像可以直接进行调试。

特别是看介绍最新的版本好像更是增加不少,不过5.2以后的版本都找不到。
(381606210)

出0入0汤圆

发表于 2009-6-28 11:13:12 | 显示全部楼层
to 【75楼】 GoingDown

外行讲话,不说也罢
ARM的汇编对于代码地址的依赖性很大,不能定位准确,反汇编出来的只能是一堆垃圾代码
J的核心代码都是__ramfunc型,IDA能准确识别?IDA能知道把哪些数据拷贝到指定地址变成指令?
7S64的remap映射,IDA能搞明白哪些地址是SRAM区哪些地址是Flash区?



to 【77楼】 hiberhe

J用的OS和USB的版本比较奇怪,和试用版的差别还挺大
V8用的是IAR EWARM 4.x,Pro用的是IAR EWARM 5.x
(381605550)

出0入0汤圆

发表于 2009-6-28 11:24:12 | 显示全部楼层
to taoist  

   不知你狂什么. 自己不会用IDA,不要再这里丢人现眼了.

   RAM中的数据就不会被当作是指令了?. 难道你连IDA中的, C,U,D键就不会用. 一个人做了一件事,总是说这件事有多复杂,自己有多聪明,就像每次电视中采访成功人士,都是TMD的高_瞻远瞩,决胜千里.

   我虽然没有反汇编ARM的经验,但是我也破过若干软件,也接过若干逆向项目, 逆向这类没有任何加密,没有任何保护的代码,真不知道

有什么难处.

   至于你说IDA搞不表哪些是RAM,哪些是FLASH, 真的搞笑,估计你没写过芯片配置文件吧. IDA看来你只懂皮毛...
(381605021)

出0入0汤圆

发表于 2009-6-28 11:33:01 | 显示全部楼层
to 【79楼】 GoingDown

丢人现眼的是你吧,没有反汇编过ARM也在敢此胡说一气,难道你还自比罗云彬,段钢不成?

自已说,“一个人做了一件事,总是说这件事有多复杂,自己有多聪明,就像每次电视中采访成功人士,都是TMD的高_瞻远瞩,决胜千里”
然后说,“我虽然没有反汇编ARM的经验,但是我也破过若干软件,也接过若干逆向项目, 逆向这类没有任何加密,没有任何保护的代码,真不知道有什么难处”

“一个人”                    --> “我”(GoingDown)
“做了一件事”                --> “我也破过若干软件,也接过若干逆向项目”
“TMD的高_瞻远瞩,决胜千里”    --> “逆向这类没有任何加密,没有任何保护的代码,真不知道有什么难处”

不就是你自己的真实写照?丢人现眼!!!

人家nikhe2敢贴出自己的劳动成果,你没有这种胸怀就算了,还在此大言不惭,你倒是用你拿手的IDA反出J*L*i*n*k的源码来看看呀?

不懂得尊重别人劳动成果,BS你
(381603926)

出0入0汤圆

发表于 2009-6-28 11:51:16 | 显示全部楼层
怎么发现iar的lib不是标准的elf格式呀,一用ida分析,s79格式的认不出来。

使用二进制编辑软件打开,里面也是有调试信息的。看来使用制作sig的方式,走不大通:(
(381602604)

出0入0汤圆

发表于 2009-6-28 12:13:18 | 显示全部楼层
taoist不用生气
GoingDown对坛子的贡献也就是Mark了,人如其名啊
(381601436)

出0入0汤圆

发表于 2009-6-28 12:32:46 | 显示全部楼层
现在不管商业,先讨论技术。
(381599178)

出0入0汤圆

发表于 2009-6-28 13:10:24 | 显示全部楼层
taoist

你说“ARM的汇编对于代码地址的依赖性很大,不能定位准确,反汇编出来的只能是一堆垃圾代码 ”

PC机中的dll不是动态加载的吗,不也是有重定位吗?7s64中的remap,难道没有规律可言,可以把任意地址map到任意地地址?

你说“J的核心代码都是__ramfunc型,IDA能准确识别?IDA能知道把哪些数据拷贝到指定地址变成指令?”

难道你不会用D键。 PC机中的EXE比这复杂多了,不光是__ramfunc,而且这些数据可能被加密算法加密过的,也有可能是不完整的,被stolen code过的。

你说:”IDA能搞明白哪些地址是SRAM区哪些地址是Flash区?“

这点你就解决不了,看来你没写过芯片配置文件。

你说:"丢人现眼的是你吧,没有反汇编过ARM也在敢此胡说一气,难道你还自比罗云彬,段钢不成?"

我只是从方法上来说明,逆向jlink并不是很复杂。不知老兄在看雪上的ID是什么,可否见告,看能否交流下。


85楼的,jlinkpro

你可能用上了taoist的免费的公布的jlink7源码,如果是这样,我更BS你啦, 原来别人给点你好处,你就帮某人说话,看来道德修养也不过如些。另外,你好像对本坛也没有什么贡献哦,不过比我还差,只会 flatter sb.  国人中像这样的,我见过多了,本人不计较。呵呵。
(381598916)

出0入0汤圆

发表于 2009-6-28 13:14:46 | 显示全部楼层
另外我想说明下:我不是不尊重nihke2 的劳动成果,我只是不爽他每次帖一点,帖的太慢。 不知是逆向一段,帖一段呢?还是已经逆向好了,一天发一段。如果是前者的话,我就我的言论道歉,如果是后者,我会继续骂下去,直至他快点帖完。。。
(381595566)

出0入0汤圆

发表于 2009-6-28 14:10:36 | 显示全部楼层
to 【86楼】 GoingDown

只会说些空洞无物的P话,什么规律啊,方法啊
拿点实际的出来,用你最拿手的IDA,反一个J*L*i*n*k的源代码出来,让大家点评点评?


人家 nikhe2说了:
4) 之所以叫长篇连载,是我一边反汇编一边贴,别催我
请你道歉先
(381588220)

出0入0汤圆

发表于 2009-6-28 16:13:02 | 显示全部楼层
taoist

    是不是屁话不重要, 如果你想较量下,我们就拿一个软件来较量下,看谁先破解。jlink你已经逆向出来,咱们换一个软件试试吧,软件可以任选。
    另外,请你从技术方面回答我上面的几个疑问。我真不知道你是怎么逆向的。IDA的基本功能就不会用,怀疑中。
(381583294)

出0入0汤圆

发表于 2009-6-28 17:35:08 | 显示全部楼层
to 【88楼】 GoingDown

半年前,我就已经说过,我用的是IAR来进行反汇编,原因就是IDA不好用。

你坚持IDA反汇编J*L*i*n*k源代码很容易,那就从这一你认为简单的东西来较量啊,坛子上有的是高手,大家对这个又很熟。
干嘛要换别的?你怕自己不行啊?

技术方面的疑问等你贴出你用IDA反汇编的J*L*i*n*k的源代码时,一切皆会明确不用我向你解释。
(381583235)

出0入0汤圆

发表于 2009-6-28 17:36:07 | 显示全部楼层
再to 【88楼】 GoingDown

你还没向LZ道歉呢!!!
(381581355)

出0入0汤圆

 楼主| 发表于 2009-6-28 18:07:27 | 显示全部楼层
GoingDown  我等你道歉
taoist     干嘛不让他帮你破解textmate?
(381581234)

出0入0汤圆

发表于 2009-6-28 18:09:28 | 显示全部楼层
to 【91楼】 nihke2  

你晓得出来啦!都是你闹的

Textmate?估计他用都没用过吧,哈哈,主意不错啊。。。
(381573046)

出0入0汤圆

发表于 2009-6-28 20:25:56 | 显示全部楼层
首先感谢楼主分享这么好的研究成果!

中国经常出现高级教授相互攻击 !

有本事的就拿出点研究成果出来否则别人怎么知道你是高手了?

在研究成果面前毕竟别人花了心血研究了,

第1无论你认为别人的水平不到你,首先不能砸场子,要尊重别人,如果没有这点,做人就一定有问题!

第2这个毕竟不是严谨的科学研究,疏漏之处难免出现的,指出来并帮助楼主修正是最好的办法!
(381572386)

出0入0汤圆

发表于 2009-6-28 20:36:56 | 显示全部楼层
张口TMD,闭口SB,人家taoist骂你都不用脏字。

LS说得太好了,有本事就拿出点研究成果出来
(381562140)

出0入0汤圆

发表于 2009-6-28 23:27:42 | 显示全部楼层
大家和和气气交流吧。

IDA的确深入点可以变得很强大,不过对于反汇编arm,特别是这种比较特定的,有不少局限的地方。另外最关键的一个是,破解软件跟比较完整的逆向出源码有比较大的差别,破解可以就分析一部分关键的代码就行了,而整个的逆向,就复杂多了。想想看,有时去看人家的源代码,如果注释不好,都很费劲,别说从汇编到源码了。

其实可以好好发挥ida的优点,做得邪_恶点,用ida反编译dll,单是dll的话,我估算比反编译j的代码还容易些,特别是配上邪_恶的Hex-Rays.Decompiler!
(381561650)

出0入0汤圆

发表于 2009-6-28 23:35:52 | 显示全部楼层
严重同意ls的!
我不会什么反汇编,IDA什么的!
但我知道这里是技术论坛!和气是很重要的!
给大家提供资源的是好同学,没有的呢也不代表是坏同学!
和谐社会,咱们也该和谐点儿!不要你正我逗,有用吗!
呵呵呵!
(381555474)

出0入0汤圆

发表于 2009-6-29 01:18:48 | 显示全部楼层
To: GoingDown?
想起一个关于电梯的笑话
如果真能用IDA轻松的逆向出J-Link,那你为何还要催别人快点?自己搞出来岂不快哉?
贴与不贴是别人的自由,就算他反向完了,不贴你又能如何?
会一体力活有啥好得瑟的
(381481516)

出0入0汤圆

发表于 2009-6-29 21:51:26 | 显示全部楼层
真热闹啊。
做人要谦虚,做事要谨慎。
(381427778)

出0入0汤圆

发表于 2009-6-30 12:47:04 | 显示全部楼层
低调做事低调做人
(381427222)

出0入0汤圆

发表于 2009-6-30 12:56:20 | 显示全部楼层
看热闹中

都是眼里揉不得沙子的人
碰上了

自古就有文人相轻

我们什么时候能够对事而不对人呢

总怀着一副谁与争锋的心态
伤了别人,也伤了自己
(381338778)

出0入0汤圆

发表于 2009-7-1 13:30:24 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-8-1 04:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表