搜索
bottom↓
回复: 28

坑要一个个的填:AMX万能红外学习器逆向分析

[复制链接]

出0入0汤圆

发表于 2014-4-10 17:32:12 | 显示全部楼层 |阅读模式
之前挖的坑:http://www.amobbs.com/thread-5573801-1-1.html

主要是想反汇编分析一个很古老的产品的关键数据结构,移植到我们新的平台上。
这个MCU(MC68HC11A1FN)从搜索到的资料看是没有内置程序存储器的,实际产品用了一个32KB的EPROM,直接就可以读出BIN文件了。

有几个网友给出了支持,最后是“tenx”提供了“IDA.pro.5.5”,经验证,可以完美的将bin反汇编得到汇编代码,并且把汇编代码重新编译得到的bin跟原始读出的一致。

有了这个基础,我打算开源进行这个活动,并且抽出时间把PCB测绘了一下——跟功能无关的通信口、电源等就没有测了,毕竟不是为了抄板。另外对电路进行了大致分析,方便对照着汇编代码阅读。
IDA反汇编出来的不是直接的汇编代码,所以整理了一下,去掉前面的十六进制地址、行号等,一并上传方便大家直接阅读





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2014-4-10 17:36:09 | 显示全部楼层
点击可以查看大图。或者下载压缩包,里面有:
1-Protel格式的原理图
2-原理图截屏(方便没有装protel的直接查看)
3-原理图和代码的简单分析
4-从EPROM读出的原始bin文件
5-IDA智能反汇编工程。安装IDA5.5后,双击可以直接打开
6-从IDA反汇编结果整理出的ASM文件,重新用汇编器编译,得到的bin跟原始bin一致。

出0入0汤圆

发表于 2014-4-10 17:37:34 | 显示全部楼层
感兴趣那个红外接收放大整形电路。。是用分立元件还是CX20106A的呢。如果是分立的不知道能不能麻烦楼主有空时能事测绘一个。如果是CX20106A的就不用了
主要是红外接收放大的增益很高。还要有AGC才行。最近对这个比较感兴趣

出0入0汤圆

 楼主| 发表于 2014-4-10 17:47:11 | 显示全部楼层
mcu_mouse 发表于 2014-4-10 17:37
感兴趣那个红外接收放大整形电路。。是用分立元件还是CX20106A的呢。如果是分立的不知道能不能麻烦楼主有空 ...

我看了一下,电路比较简单,是用光敏二极管(LTR-546AD)加两级三极管(2N3904)放大的。输出波形就是原始的红外发射波形,没有整形解码处理的。
设备已经归还客户了……现在只有图片:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-4-10 17:48:09 | 显示全部楼层
本帖最后由 mhw 于 2014-4-10 17:50 编辑

顶层上边的CR3就是光敏二极管LTR-546AD。接收电路区域,顶层全部是敷铜且接地,没有走线,所以把底部的图片镜像一下,合成在一起,直接就能把原理图画出来了。

出0入0汤圆

 楼主| 发表于 2014-4-10 17:52:35 | 显示全部楼层

数码管和LED显示电路:
电路里,把数码管和LED都挂到外部内存地址,内存单元每个bit对应一个LED或者数码管的一个位段。
锁存器由74HC138译码器和74HC259锁存器实现:
file:///C:\DOCUME~1\c\LOCALS~1\Temp\msohtml1\01\clip_image002.jpg
1-     选通74HC138时,A15=1,A14=0;A[3,2,1]再确定选通哪一个74HC259
2-     A[3,2,1]=000:选通LED
以下所有点都是A7=1发光,A7-0熄灭;空缺的地址在阅读反汇编代码过程再填上:
   
  
   
  
  选通
  74HC138
  
  未用,xxxxxx都可,
  以下是实测:
  
  亮灭
  
  选择
  259位段
  
  138译码
  输出
  
  未用
  
  地址
  
  备注
  
  编号
  
  功能
  
  A15
  
  A14
  
  A13-A8
  
  A7
  
  A6
  
  A5
  
  A4
  
  A3
  
  A2
  
  A1
  
  A0
  
   
  
   
  
  
  
  
  
  1
  
  1
  
  11,1111
  
  1/0
  
  0
  
  0
  
  0
  
  0
  
  0
  
  0
  
  X
  
  
  
  未用
  
  
  
  
  
  1
  
  1
  
  11,1111
  
  1/0
  
  1
  
  0
  
  0
  
  0
  
  0
  
  0
  
  X
  
  
  
  Verify-红灯亮/
  
  
  
  
  
  1
  
  1
  
  11,1111
  
  1/0
  
  0
  
  1
  
  0
  
  0
  
  0
  
  0
  
  X
  
  
  
  Ready-绿灯亮/
  
  
  
  
  
  1
  
  1
  
  11,1111
  
  1/0
  
  1
  
  1
  
  0
  
  0
  
  0
  
  0
  
  X
  
  
  
  未用
  
  
  
  
  
  1
  
  1
  
  11,1111
  
  1/0
  
  0
  
  0
  
  1
  
  0
  
  0
  
  0
  
  X
  
  
  
  Send按键LED/
  
  
  
  
  
  1
  
  1
  
  11,1111
  
  1/0
  
  1
  
  0
  
  1
  
  0
  
  0
  
  0
  
  X
  
  
  
  Down按键LED/
  
  
  
  
  
  1
  
  1
  
  11,1111
  
  1/0
  
  0
  
  1
  
  1
  
  0
  
  0
  
  0
  
  X
  
  
  
  Up按键LED/
  
  
  
  
  
  1
  
  1
  
  11,1111
  
  1/0
  
  1
  
  1
  
  1
  
  0
  
  0
  
  0
  
  X
  
  
  
  未用
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  0
  
  0
  
  0
  
  1
  
  0
  
  0
  
  X
  
  
  
  左边数码管段a/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  1
  
  0
  
  0
  
  1
  
  0
  
  0
  
  X
  
  
  
  左边数码管段b/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  0
  
  1
  
  0
  
  1
  
  0
  
  0
  
  X
  
  
  
  左边数码管段c/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  1
  
  1
  
  0
  
  1
  
  0
  
  0
  
  X
  
  
  
  左边数码管段d/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  0
  
  0
  
  1
  
  1
  
  0
  
  0
  
  X
  
  
  
  左边数码管段e/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  1
  
  0
  
  1
  
  1
  
  0
  
  0
  
  X
  
  
  
  左边数码管段f/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  0
  
  1
  
  1
  
  1
  
  0
  
  0
  
  X
  
  
  
  左边数码管段g/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  1
  
  1
  
  1
  
  1
  
  0
  
  0
  
  X
  
  
  
  左边数码管段dp/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  0
  
  0
  
  0
  
  0
  
  1
  
  0
  
  X
  
  
  
  右边数码管段a/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  1
  
  0
  
  0
  
  0
  
  1
  
  0
  
  X
  
  
  
  右边数码管段b/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  0
  
  1
  
  0
  
  0
  
  1
  
  0
  
  X
  
  
  
  右边数码管段c/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  1
  
  1
  
  0
  
  0
  
  1
  
  0
  
  X
  
  
  
  右边数码管段d/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  0
  
  0
  
  1
  
  0
  
  1
  
  0
  
  X
  
  
  
  右边数码管段e/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  1
  
  0
  
  1
  
  0
  
  1
  
  0
  
  X
  
  
  
  右边数码管段f/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  0
  
  1
  
  1
  
  0
  
  1
  
  0
  
  X
  
  
  
  右边数码管段g/
  
  
  
  
  
  1
  
  1
  
  XX,XXXX
  
  1/0
  
  1
  
  1
  
  1
  
  0
  
  1
  
  0
  
  X
  
  
  
  右边数码管段dp/
  
从这个表可以看出,数码管和LED输出可选的地址很多,但好在是落在只读ROM的地址范围(0x8),并且是只能写不能读的,所以只需要在代码里找到高于0x8000的写入操作,就可以判断为控制LED或数码管亮灭了。
根据74HC259的特性,只能逐bit写入,不能一次写入多个bit,所以正常人的做法会定义3个字节的输出缓冲区,每bit对应一个LED或者数码管位段;先输出显示内容到缓冲区,然后定时用一个循环体逐bit刷新输出到外部的锁存器

按键定义:
1-     SEND——PE2
2-     DOWN——PE1
3-     UP——PE0

通信口定义:
1-     RS232串口RXD——PD0 输入
2-     RS232串口TXD——PD1 输出

存储器扩展定义:
1-     PC口(PC0..7)——低8位总线地址,和8位数据口复用
2-     PB口(PB0..7)——高8位总线地址
3-     AS,R/W,E总线读写控制信号标准接法
4-     RAM——32KB,芯片型号KS62256,地址范围0x0000-0x7FFF
5-     ROM——32KB,芯片型号AM27C256,地址范围0x8000-0xFFFF

处理器主频:
1-     振荡器为8MHz,示波器实测也是8MHz
2-     E输出信号实测为2MHz,根据手册描述是振荡器频率的1/4,正确


汇编、仿真工具:
选择了“THRSim11”

反汇编:
1-     安装ADA5.5;
2-     打开从ROM里读出的bin文件,设置好参数,MCU选择“Motorola 68HC11”,目标汇编器选择“Motorola FreeWareAssembler”——这是反复测试出来的,其他汇编器格式都无法在“THRSim11”里编译。
3-     点击“重新分析程序”,得到汇编代码
4-     把汇编代码复制到Ultraedit里,用列块模式,把代码前面的名称和地址删掉,得到纯净的汇编代码,另存为asm格式
5-     在“THRSim11”打开上面保存的asm,编译,成功后自动进入仿真状态并跳转到程序入口。
6-     点击运行,提示一堆错误,意思是往只读ROM地址里写数据,出错……明显是仿真器没有设置好,根据提示需要重新配置MCU
7-     点击View->memory->memory configuration,根据测绘电路图,填写RAM范围$0000至$7FFF,ROM范围$8000至$FFFF,如下图所示:
file:///C:\DOCUME~1\c\LOCALS~1\Temp\msohtml1\01\clip_image004.jpg
8-     重新打开asm,编译后全速运行,有8*3=24处出错,都是提示非法写入只读ROM的,地址分别是:
ff20 ff23 ff25 ff26 ff28 ff2a ff2c ff2e
ff11 ff13 ff15 ff17 ff19 ff1b ff1c ff1e
fe0d fe02 fe04 fe06 fe08 fe0a fe0c
很有规律,估计就是电路测绘时发现的LED及数码管写入地址了。
重新设置存储器映射,增加一个区域$FE00至$FFFF:
file:///C:\DOCUME~1\c\LOCALS~1\Temp\msohtml1\01\clip_image006.jpg
9-     重新打开asm,编译后全速运行,可以跑了
10-  把编译得到的S19文件转换为bin,二进制方式比较,结果完全一致。证明“ADA5.5”反汇编完全正确。
11-  所以阅读汇编代码直接用“ADA5.5”就可以了,里面有很多智能跳转、标签等功能,可以很方便浏览代码。

出0入0汤圆

 楼主| 发表于 2014-4-10 17:57:22 | 显示全部楼层
word无法粘贴图片到贴里……直接看压缩包里的文档吧

另外红外学习器在网上能下载到的有两个文档:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-4-19 16:40:23 来自手机 | 显示全部楼层
直接读出EPROM中的bin文件?难道这种是没有加密功能的吗?

出0入0汤圆

发表于 2014-4-19 16:57:57 | 显示全部楼层
wh9602 发表于 2014-4-19 16:40
直接读出EPROM中的bin文件?难道这种是没有加密功能的吗?

27c512这种存储片, 不加密功能的,我修老设备的,都是先读出来保存

出0入0汤圆

发表于 2014-4-20 15:39:15 | 显示全部楼层
mark                           

出0入0汤圆

发表于 2014-4-20 15:54:43 | 显示全部楼层
感觉意义不大,目前红外学习的程序有很多开源的,当然只用于分析学习。
该设计已经很古老了,基本没有太多参考价值。
电荷泵的廉价版设计很多,这里并没有太多出彩的;
反汇编代码粗略扫了一眼,算法部分基本就没有分析。
原作者代码c的痕迹很明显。

没事玩玩就行了,千万别浪费太多功夫,

出0入24汤圆

发表于 2014-4-20 16:15:53 | 显示全部楼层
很好的资料

出0入0汤圆

 楼主| 发表于 2014-4-21 09:30:44 | 显示全部楼层
learner123 发表于 2014-4-20 15:54
感觉意义不大,目前红外学习的程序有很多开源的,当然只用于分析学习。
该设计已经很古老了,基本没有太多 ...
目前红外学习的程序有很多开源的

请问能否提供一些参考链接?

以我多年的从业经验来看,这个产品还是很牛X的,值得分析学习。因为这个厂家是几十年来专门做这个行业的,什么种类的遥控器都能搞定,他们应该已经把红外遥控种类都做了归类建模,不管多偏门的遥控码都能识别。
要说识别率,我现在用的“波形直接拷贝法”几乎是万能的,就是太费存储空间了

出0入0汤圆

发表于 2014-4-21 10:06:35 | 显示全部楼层
mhw 发表于 2014-4-21 09:30
请问能否提供一些参考链接?

以我多年的从业经验来看,这个产品还是很牛X的,值得分析学习。因为这个厂 ...
我现在用的“波形直接拷贝法”几乎是万能的


LZ的波形copy法,也就意味着是采用红外接收管接收并整形,有没有比较好用的红外接收电路?能否共享一下呢?

出0入0汤圆

 楼主| 发表于 2014-4-21 10:32:09 | 显示全部楼层
lkm_unication 发表于 2014-4-21 10:06
LZ的波形copy法,也就意味着是采用红外接收管接收并整形,有没有比较好用的红外接收电路?能否共享一下 ...

我用到的都是3条腿的那种38KHz一体化红外接收头(传说有1M以上载波和无载波直接发射的,但是至今还没见到过)

你可以用前面4楼的两张图逆向一下。初步分析是用NPN搭的两级放大电路,性能比运放搭的会好的多(2N3904带宽记得是300MHz的)

出0入0汤圆

发表于 2014-4-21 12:41:21 | 显示全部楼层
mhw 发表于 2014-4-21 10:32
我用到的都是3条腿的那种38KHz一体化红外接收头(传说有1M以上载波和无载波直接发射的,但是至今还没见到 ...

如果直接用接收头,市面上的红外频率也有多种,那么其它频率的红外又如何捕捉呢?
这样就达不到“万能”了。

出0入0汤圆

 楼主| 发表于 2014-4-21 13:05:12 | 显示全部楼层
lkm_unication 发表于 2014-4-21 12:41
如果直接用接收头,市面上的红外频率也有多种,那么其它频率的红外又如何捕捉呢?
这样就达不到“万能” ...

普通接收头30-56KHz都支持的……再极端的都是小众产品,见到再考虑了(还没见到过)

出0入0汤圆

发表于 2014-4-22 09:21:34 | 显示全部楼层
mhw 发表于 2014-4-21 13:05
普通接收头30-56KHz都支持的……再极端的都是小众产品,见到再考虑了(还没见到过) ...
普通接收头30-56KHz都支持的


但问题又来了,接收头出来的数据是经过了解调的,LZ如何知道真实的波形是如果调制的呢?

出0入0汤圆

发表于 2014-4-22 09:42:39 | 显示全部楼层
感兴趣:逆向。。。

出0入0汤圆

 楼主| 发表于 2014-4-22 11:19:18 | 显示全部楼层
lkm_unication 发表于 2014-4-22 09:21
但问题又来了,接收头出来的数据是经过了解调的,LZ如何知道真实的波形是如果调制的呢? ...

统一按38KHz载波发射就好了。
我怀疑他们设计都是38KHz,只是廉价陶瓷(甚至用RC)振荡器的误差太大才会出现这么大的范围。
接收头的原理比较简单,锁相环检测到载波若干个周期后,会输出锁定状态(低电平);丢失载波若干个周期后,会输出失锁状态(高电平)。所以载波频率并不是很重要,只要落在锁相环捕捉范围内就可以。

出0入84汤圆

发表于 2014-4-22 12:13:19 | 显示全部楼层
mhw 发表于 2014-4-22 11:19
统一按38KHz载波发射就好了。
我怀疑他们设计都是38KHz,只是廉价陶瓷(甚至用RC)振荡器的误差太大才会 ...

载波很重要,只有差的红外接收头才是“范围广泛”,很多设备频率相差一点就不能遥控

出0入0汤圆

 楼主| 发表于 2014-4-22 12:22:01 | 显示全部楼层
czzhouyun 发表于 2014-4-22 12:13
载波很重要,只有差的红外接收头才是“范围广泛”,很多设备频率相差一点就不能遥控 ...

有具体的设备型号吗?我测过的空调、电视、DVD等各种家电上百个型号,好像都没发现过特殊的……(它们用的都是普通红外接收头)

出0入84汤圆

发表于 2014-4-22 13:00:26 | 显示全部楼层
索尼的电视,投影机,你用38K的就控不了,日本的品牌,万能遥控器里去找,只要40K的你用38K去控控试试

出0入0汤圆

发表于 2014-4-30 00:25:21 | 显示全部楼层
本帖最后由 blueice1108 于 2014-4-30 13:59 编辑
mhw 发表于 2014-4-10 17:52
数码管和LED显示电路:
电路里,把数码管和LED都挂到外部内存地址,内存单元每个bit对应一个LED或者数码 ...


你好
3-     点击“重新分析程序”,得到汇编代码 这步要点甚么选项
找半天没找到

另外想请问
反汇编出来后 如何区分指令 还是数据块
CPU:Z80

出0入0汤圆

 楼主| 发表于 2014-5-4 09:13:07 | 显示全部楼层
blueice1108 发表于 2014-4-30 00:25
你好
3-     点击“重新分析程序”,得到汇编代码 这步要点甚么选项
找半天没找到

Option->Analysis
设置好目标CPU和汇编器后,点击“Reanalyze program”

出0入0汤圆

发表于 2014-5-4 10:22:37 | 显示全部楼层
mhw 发表于 2014-5-4 09:13
Option->Analysis
设置好目标CPU和汇编器后,点击“Reanalyze program”

HI 我尝试过了
27C512解出来一定都是指令吗?
我自己要手动按C会转成CODE
按D转成DATA

所以我分不清楚哪个是DATA哪个是CODE
LZ能在把过程说的详细一点吗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-5-4 11:56:16 | 显示全部楼层
blueice1108 发表于 2014-5-4 10:22
HI 我尝试过了
27C512解出来一定都是指令吗?
我自己要手动按C会转成CODE

我对反汇编也不熟悉,头一次搞……

不过这个自动转出来的应该是正确的,因为我把反汇编界面的文本拷贝出来,去掉前面的地址标号,拿到其它编译器上重新编译得到bin,跟原来的bin是一模一样的。
程序流程也很清晰,可能老外并没有做反反汇编处理

出0入0汤圆

 楼主| 发表于 2014-5-4 11:57:19 | 显示全部楼层
过程参考主贴里的附件即可。

出0入0汤圆

发表于 2014-5-4 16:54:19 | 显示全部楼层
谢谢LZ
我暂时应该会放弃….
有些反汇编不出来
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 06:43

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

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