历史上的今天
返回首页

历史上的今天

今天是:2025年08月04日(星期一)

正在发生

2018年08月04日 | PIC单片机之反汇编

2018-08-04 来源:eefocus

前言 


反汇编 ,一般情况大家用的不多。但在一些行业确实比较常见。比如 破解加密算法,获得加密密钥,或者自己无法写出完全一致的程序又要修改一些地方的时候反汇编就是必不可少的。反汇编是比较枯燥,又有一定挑战性的东西下面我给大家讲解如何 从BIN文件->HEX文件->汇编->C语言的全部过程。


第一步破解芯片


这个作为一般是要找专业破解芯片的公司,帮我们把芯片内的  flash 和EEPROM 中的数据读出来,从而得到BIN文件或者HEX。这一步唯一的困难点就是你要花钱。。。


第二步BIN转HEX


因为PIC的老的MPLAB 或者MPLAB X IDE。都不支持读取BIN文件。所以你必须事先将BIN文件转为HEX文件。当然你如果已经有了HEX文件这一步可以忽略。 我个人是比较喜欢用QL-2006这款单片机烧器的烧写软件将BIN转成HEX。


第三步将HEX转成汇编


1,打开 MPLAB IDE  Configure->Select Chip 选择芯片型号。


2, 点击菜单栏File->Import 导入HEX文件。


3,查看程序存储空间点击菜单栏 View ->Progarm Memory 跳出Progarm Memory 窗口选择点击选择Machine,Machine显示的 就是每个机器码对应的汇编语言。


4,去掉LINE(行号) 去掉OpCode(机器码) 只留下Address(地址)和Disassemly(汇编)这两列。右击最上边的一栏就可以去掉 相应列的勾选。


5,右击文本框 点击Output To File (输出文件)。这样我们就得到了。反汇编之后的文本文件了。


6,然后用以上类似的方法输出 EEPROM中的数据


第四步 建立工程


1,将上一步得到的文件,将扩展名由 .TEXT 改为 .asm.我们就建立新的工程将改汇编文件添加进去。


第五步 最苦逼的阶段看懂汇编加注释。


1,这个阶段最重要的你本身必须懂汇编。


这一步最累了 就是吧 对应的 特殊功能寄存器,从机器码改为由意义的名称。

如  BSF 0x3.0 修改为 BSF STATUS,RP0

值得必须注意的是你一定要知道你所修改的的寄存器 是在那个页面的。

在BANK0 代表CLRF GPIO,在BANK1 代表 CLRF TRISIO(具体代表什么你要查看对应型号的数据手册)


2,区分那些数代表  数值  那些数 代表 寄存器 那些数 代表 程序地址。这个一定要注意。

如 :MOVLW 0x3 代表数值0x3

    MOVWF 0x3 代表寄存器STATUS

    GOTO  0x3   代表程序地址0x3

3,反汇编的难点和重点,就是看懂原作者 写的程序是什么意思。在这里我只是说分享一下我的做法。


1,一般大概猜测 对应 寄存器是什么意思 我多会将其取个有意义的名字。如计数器我就取CONTER。然后查找替换


2,大概猜测到 子程序是什么意思 也同样给他去个有意义的名字。


3,另外建立个文本。作为一种笔记。对于你猜测的 子程序 或者 寄存器的作用做一个记录。


4,然后就是耐心的死磕了。


最后变成下面的 这样子。当然要想能编译还要把前面多余的 地址列按ctrl+alt 选择去掉。

      

第六步    汇编转C


到这一步必须事先对汇编的意思几乎都看懂了才行你就将你所理解的汇编直接改写成C就行了。


汇编与C之间有许多明显的对应关系下来举个例子。


6.1 const 数组

             如 :

             汇编

                        ADDWF PCL,F

                         RETLW  0x00

                         RETLW  0x01

                         RETLW  0x02

                         RETLW  0x03

               对应C语言 const   unsigned char Tab[4]={0x00,0x01,0x02,0x03} 

              

             汇编  赋值语句

                MOVLW 0x1

                MOVWF  BUF

             C语言 赋值语句

                BUF = 0x1;


             汇编 与

              MOVLW  0X0F

              ANDWF  BUF

              C语言  与

              BUF  &= 0x0F

              

              汇编  左移

            MOVLW 0x4

            MOVWF  COUTER;  

             BCF  STATUS,C

RLF_LOOP

              RLF   BUF

             DECFSZ  COUTER,F

             GOTO     RLF_LOOP

             C语言 左移

             BUF <<=4;


           汇编   数据指针

            MOVLW   TEMP

             MOVWF  pBUF

             MOVFW  FSR

             MOVLW   0x2

             ADDWF  INDF.F

             C语言  数据指针

              unsigned char * pBUF;

              pBUF = &TEMP;

              *pBUF +=2; 

            

              汇编 判断相等

              MOVFW  A

              XORWF B,W

              BTFSS STATUS,Z

              GOTO    ELSE

              ..............................

ELSE

           ...............................

             C语言  判断相等

             if(A==B)

             {

                  ...........................

             }

             else

              {

                    ..........................

              }


等等等 这里就不在赘述了。


推荐阅读

史海拾趣

Eon公司的发展小趣事

在成立初期,E.ON面临着天然气产量下滑而消费量增长的挑战。为了应对这一局面,E.ON开始积极寻找天然气供应渠道,并与俄罗斯天然气工业集团(Gazprom)进行了多轮谈判。虽然初期合作并未如愿,但E.ON并未放弃,通过不断努力和策略调整,最终实现了与Gazprom的合作,为公司的天然气业务发展奠定了坚实基础。

Eagle-Picher公司的发展小趣事

在第二次世界大战期间,Eagle-Picher公司利用其在材料科学方面的专长,为美国军队生产蓄电池。公司使用硅藻土和锌等材料,为军队的通信设备和其他电子设备提供可靠的电源。这一时期的业务扩张不仅增强了Eagle-Picher的技术实力,也为其在电子行业树立了良好的声誉。

Baton Lock公司的发展小趣事

近年来,电子行业经历了多次技术变革和市场调整。面对这些变化,Baton Lock公司积极调整战略,加大了对新兴技术如物联网、人工智能等领域的研发投入。同时,公司还通过优化生产流程、降低成本等方式提高竞争力,成功应对了行业变革带来的挑战。

芯朋微电子(chipown)公司的发展小趣事

2020年7月22日,芯朋微电子在上交所科创板成功挂牌上市,这一里程碑事件标志着公司进入了全新的发展阶段。上市后,公司凭借资本市场的支持,加速了产品研发和市场拓展,品牌影响力得到进一步提升。

CAROLCABLE公司的发展小趣事

CAROLCABLE公司的创立,标志着电子线缆行业迎来了一位新的竞争者。在电子科技飞速发展的时代背景下,创始人凭借对线缆技术的深刻理解和市场需求的敏锐洞察,决定创立CAROLCABLE公司。公司初期,面临着资金短缺、技术瓶颈和市场认知度低等多重挑战。然而,创始人凭借着坚定的信念和不懈的努力,带领团队克服了一个又一个困难。他们积极研发新产品,优化生产工艺,提高产品质量,逐渐在市场上站稳了脚跟。

随着公司业务的不断拓展,CAROLCABLE开始与一些知名的电子企业建立合作关系,为其提供高质量的线缆产品。这些合作不仅为公司带来了稳定的订单和收入,也进一步提升了CAROLCABLE在行业内的知名度和影响力。

Amphenol Piher公司的发展小趣事

在激烈的市场竞争中,CAROLCABLE公司深知技术创新是企业发展的核心动力。因此,公司不断加大研发投入,引进先进的生产设备和技术人才,推动技术创新和产业升级。经过多年的努力,CAROLCABLE成功研发出了一系列具有自主知识产权的高性能线缆产品,这些产品在传输速度、稳定性和耐用性等方面均达到了行业领先水平。

随着产品技术的不断升级,CAROLCABLE开始积极拓展国内外市场。公司参加了多个国际电子线缆展会,与全球同行交流学习,寻找合作机会。同时,CAROLCABLE还加强与国内大型电子企业的合作,为其提供定制化的线缆解决方案。这些举措不仅为公司带来了更多的商机,也进一步巩固了CAROLCABLE在电子线缆行业的领先地位。

这两个故事仅是对CAROLCABLE公司发展起来的简要描述,实际上,公司的成长历程中还有许多值得探讨的细节和里程碑事件。如需了解更多关于CAROLCABLE公司的故事,建议查阅相关新闻报道或公司官方资料。

问答坊 | AI 解惑

年轻工程师是如何锻炼成“高手”的[转载]

本人做过技术开发工作多年,从焊电路板的小工程师逐渐做到项目经理、研发经理,现在做到总工程师,作为工程师有亲身的感受,作为研发主管,对工程师的性格、心理和知识结构有非常深入的了解,现在把自己的一点感悟与大家分享,希望大家批评指正,欢 ...…

查看全部问答>

康华光模电下载

经典模拟电路教程…

查看全部问答>

降低开关电源输入电流谐波和电磁干扰的技术研究

降低开关电源输入电流谐波和电磁干扰的技术研究…

查看全部问答>

我看嵌入式工具市场现状与未来

从70年代末的简单控制发展到今天的高端应用,嵌入式系统已经变成一个复杂的高技术系统,要在短时间开发出所需功能的难度大大提升,但是市场竞争又要求产品能够快速面市同时必须确保产品的质量和性能,这里面工具就起着很重要的作用。这其中,对工具 ...…

查看全部问答>

fft

哪位专家帮忙,急需FFT的VHDL源代码,QUARTUS II环境下,8位128点数据实时转换,先谢谢啦…

查看全部问答>

寻找一款ARM9双核的MP2530F 开发板

如题,有没有MP2530F的开发板?价格多少,或有类似的介绍吗 谢谢…

查看全部问答>

请教高手,怎么实现C8051的GPIO实现UART的读取

        EXTERN XBYTE gxbUartBitNum     _AT_ (0x990F);/////当前接受数据的位数 EXTERN XBYTE gxbUart2s      _AT_ (0x991F);   //ie. SBUF2 EXTERN XBYTE gxbUart2f ...…

查看全部问答>

LED的几种分类方式

replyreload += \',\' + 743913;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

BeagleBone 硬件性能测试(1) ---- 我是出来打酱油的

今天惊问BeagleBone的测试最终名单居然有我, 有点受宠若惊,同时诚惶诚恐的感觉。.最近确实事情比较多,怕耽误测试的效果;同时也希望有人能够关注一下硬件的实际性能。本来只想做条鲶鱼,趟趟浑水,打打酱油。没想到居然就上了,汗颜啊!亚历山大 ...…

查看全部问答>

dsp f2812 flash程序的执行过程

上电(mp/mc=0)-->bootrom(判断引脚状态)-->flash(3f7ff6.跳转指令)-->_c_init00-->main()-->memcopy()[此函数的作用是将不能在flash里之行的程序段复制到rom里]-->initflash()[此函数必须在rom里执行]-->while(1);…

查看全部问答>