PIC单⽚机之反汇编
前⾔
汇编语言要什么基础反汇编 ,⼀般情况⼤家⽤的不多。但在⼀些⾏业确实⽐较常见。⽐如 破解加密算法,获得加密密钥,或者⾃⼰⽆法写出完全⼀致的程序⼜要修改⼀些地⽅的时候反汇编就是必不可少的。反汇编是⽐较枯燥,⼜有⼀定挑战性的东西下⾯我给⼤家讲解如何 从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
值得必须注意的是你⼀定要知道你所修改的的寄存器 是在那个页⾯的。
如同样是CLRF 0x5,
在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
...............................
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论