美日韩一级大黄_国产精品日韩丝袜视频一区_18以下勿进色禁网站永久视频_王祖贤三级露全乳电影_国产尤物极品嫩泬_中文字幕有码~第一页_在线你懂的观看网站_国产av无码专区亚洲aⅤ青青_婷婷六月深爱憿情网六月综合_又长又粗又高潮免费视频

在線留言|聯(lián)系我們|收藏我們| 設(shè)為首頁(yè)歡迎來(lái)到PCB抄板_PCB克隆_電路板抄板_電路板克隆_芯片解密_單片機(jī)破解_深圳市欣拓科技官網(wǎng)!
24小時(shí)
服務(wù)熱線
15302719702
18814354606

全球領(lǐng)先的電子反向技術(shù)研究中心 16年專注高端電子產(chǎn)品逆向研發(fā)

1ee
全國(guó)服務(wù)熱線: 15302719702
       反匯編 ,一般情況大家用的不多。但在一些行業(yè)確實(shí)比較常見(jiàn)。比如 破解加密算法,獲得加密密鑰,或者自己無(wú)法寫(xiě)出完全一致的程序又要修改一些地方的時(shí)候反匯編就是必不可少的。反匯編是比較枯燥,又有一定挑戰(zhàn)性的東西下面我給大家講解如何 從BIN文件->HEX文件->匯編->C語(yǔ)言的全部過(guò)程。



 第一步破解芯片

這個(gè)作為一般是要找專業(yè)破解芯片的公司,幫我們把芯片內(nèi)的 flash 和EEPROM 中的數(shù)據(jù)讀出來(lái),從而得到BIN文件或者HEX。這一步唯一的困難點(diǎn)就是你要花錢。。。

第二步BIN轉(zhuǎn)HEX

因?yàn)镻IC的老的MPLAB 或者M(jìn)PLAB X IDE。都不支持讀取BIN文件。所以你必須事先將BIN文件轉(zhuǎn)為HEX文件。當(dāng)然你如果已經(jīng)有了HEX文件這一步可以忽略。 我個(gè)人是比較喜歡用QL-2006這款單片機(jī)燒器的燒寫(xiě)軟件將BIN轉(zhuǎn)成HEX。

第三步將HEX轉(zhuǎn)成匯編

1,打開(kāi) MPLAB IDE Configure->Select Chip 選擇芯片型號(hào)。

2,點(diǎn)擊菜單欄File->Import 導(dǎo)入HEX文件。

3,查看程序存儲(chǔ)空間點(diǎn)擊菜單欄 View ->Progarm Memory 跳出Progarm Memory 窗口選擇點(diǎn)擊選擇Machine,Machine顯示的 就是每個(gè)機(jī)器碼對(duì)應(yīng)的匯編語(yǔ)言。

4,去掉LINE(行號(hào)) 去掉OpCode(機(jī)器碼) 只留下Address(地址)和Disassemly(匯編)這兩列。右擊最上邊的一欄就可以去掉 相應(yīng)列的勾選。

5,右擊文本框 點(diǎn)擊Output To File (輸出文件)。這樣我們就得到了。反匯編之后的文本文件了。

6,然后用以上類似的方法輸出 EEPROM中的數(shù)據(jù)

第四步 建立工程

1,將上一步得到的文件,將擴(kuò)展名由 .TEXT 改為 .asm.我們就建立新的工程將改匯編文件添加進(jìn)去。

第五步 最苦逼的階段看懂匯編加注釋。

1,這個(gè)階段最重要的你本身必須懂匯編。

這一步最累了 就是吧 對(duì)應(yīng)的 特殊功能寄存器,從機(jī)器碼改為由意義的名稱。

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

值得必須注意的是你一定要知道你所修改的的寄存器 是在那個(gè)頁(yè)面的。

如同樣是CLRF 0x5,

在BANK0 代表CLRF GPIO,在BANK1 代表 CLRF TRISIO(具體代表什么你要查看對(duì)應(yīng)型號(hào)的數(shù)據(jù)手冊(cè))

2,區(qū)分那些數(shù)代表 數(shù)值 那些數(shù) 代表 寄存器 那些數(shù) 代表 程序地址。這個(gè)一定要注意。

如 :MOVLW 0x3 代表數(shù)值0x3

MOVWF 0x3 代表寄存器STATUS

GOTO 0x3 代表程序地址0x3

3,反匯編的難點(diǎn)和重點(diǎn),就是看懂原作者 寫(xiě)的程序是什么意思。在這里我只是說(shuō)分享一下我的做法。

1,一般大概猜測(cè) 對(duì)應(yīng) 寄存器是什么意思 我多會(huì)將其取個(gè)有意義的名字。如計(jì)數(shù)器我就取CONTER。然后查找替換

2,大概猜測(cè)到 子程序是什么意思 也同樣給他去個(gè)有意義的名字。

3,另外建立個(gè)文本。作為一種筆記。對(duì)于你猜測(cè)的 子程序 或者 寄存器的作用做一個(gè)記錄。

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

最后變成下面的 這樣子。當(dāng)然要想能編譯還要把前面多余的 地址列按ctrl+alt 選擇去掉。

第六步 匯編轉(zhuǎn)C

到這一步必須事先對(duì)匯編的意思幾乎都看懂了才行你就將你所理解的匯編直接改寫(xiě)成C就行了。

匯編與C之間有許多明顯的對(duì)應(yīng)關(guān)系下來(lái)舉個(gè)例子。

6.1 const 數(shù)組

如 :

匯編

ADDWF PCL,F

RETLW 0x00

RETLW 0x01

RETLW 0x02

RETLW 0x03

對(duì)應(yīng)C語(yǔ)言constunsigned char Tab[4]={0x00,0x01,0x02,0x03}

匯編 賦值語(yǔ)句

MOVLW 0x1

MOVWF BUF

C語(yǔ)言賦值語(yǔ)句

BUF = 0x1;

匯編 與

MOVLW 0X0F

ANDWF BUF

C語(yǔ)言與

BUF &= 0x0F

匯編左移

MOVLW 0x4

MOVWF COUTER;

BCF STATUS,C

RLF_LOOP

RLF BUF

DECFSZ COUTER,F

GOTO RLF_LOOP

C語(yǔ)言左移

BUF <<=4;

匯編 數(shù)據(jù)指針

MOVLW TEMP

MOVWF pBUF

MOVFW FSR

MOVLW 0x2

ADDWF INDF.F

C語(yǔ)言數(shù)據(jù)指針

unsigned char * pBUF;

pBUF = &TEMP;

*pBUF +=2;

匯編 判斷相等

MOVFW A

XORWF B,W

BTFSS STATUS,Z

GOTO ELSE

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

ELSE

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

C語(yǔ)言 判斷相等

if(A==B)

{

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

}

else

{

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

}