首页
社区
课程
招聘
[原创]反汇编引擎源码分享
发表于: 2013-8-4 12:44 15929

[原创]反汇编引擎源码分享

2013-8-4 12:44
15929

之前一直觉得反汇编引擎挺难的,但在软件保护方面却大有用处,很多保护技术都得精确到指令级进行,所以深入学习下intel指令是非常有必要的,因此在看过egogg大和youngboz大的引擎源码后,决定自己动手写个出来,egogg大的一系列 关于intel指令的文章 写得实在是精彩,至少让我这个没读过 intel开发手册的 也理解了 intel指令 的编码规则, youngboz大的源码 也非常不错, 整个引擎框架设计的很好,扩展性强 ,使得指令解析变得 非常简单 ,这才使得他写出了仅400多行的指令解析代码,再次感谢两们大侠!!  我的这份引擎采用的是youngboz大的代码框架 ,并增加了上此特殊指令的解析.学到新知识是很高兴的一件,能与人分享更是快乐!!!!!!!

[源码下载] dasm32.rar

代码中 _dasm(...)函数解析单条指令 ,调用之前得先调用_damInit(...)函数一次, _dasmpe(...)函数解析整个pe文件指令.

sample:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 5
支持
分享
最新回复 (20)
雪    币: 137
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主上传的压缩文件是不是有错啊  显示的是1M多 下载的始终是20K左右
2013-8-4 12:49
0
雪    币: 112
活跃值: (57)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
3
上传的附件:
2013-8-4 13:36
0
雪    币: 112
活跃值: (57)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
4
感谢分享~
在vs2010下编译不过, 发现是有几个宏参数填错了.
帮您修正了一下.
src-dasm32-m1.rar
上传的附件:
2013-8-4 13:51
0
雪    币: 245
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼主分享
2013-8-4 14:07
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
不错,以前只研究过aes还是des32,那个可以获取指令长度,但是不能显示指令。有空读一下。
2013-8-4 15:02
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
拜读一下
2013-8-4 15:10
0
雪    币: 260
活跃值: (249)
能力值: ( LV12,RANK:350 )
在线值:
发帖
回帖
粉丝
8
我试了下,可以下载的,没错吧!
2013-8-4 15:30
0
雪    币: 260
活跃值: (249)
能力值: ( LV12,RANK:350 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=SilentGamb;1206094]感谢分享~
在vs2010下编译不过, 发现是有几个宏参数填错了.
帮您修正了一下.
src-dasm32-m1.rar[/QUOTE]

哦,这是vc6.0的工程文件.
2013-8-4 15:32
0
雪    币: 137
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
嗯 用IE浏览器下载的就可以
2013-8-4 17:48
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
支持,哪怕有几千,几百人写过反汇编引擎,哪都不是自己的,自己写过,测试过,哪才是自己的,精华不精华的不是目的,目的是要自己掌握核心技术,汇编+反汇编引擎:是干碎加密,VM,反调试的基础!
2013-8-4 18:07
0
雪    币: 202
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
支持一下楼主,有意思的东西。有机会可以考虑扩展到64位的。
2013-8-5 09:51
0
雪    币: 18
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
简单测试发现有个小问题。经过测试发现确实存在问题。


0x3B 这个指令 应该是cmp 吧?


修改程序,加上输出地址(方便定位),发现这些指令确实存在问题:



继续分析:
发现这里的文件跟这个帖子的差不多。
http://bbs.pediy.com/showthread.php?t=147992
但是里面的代码被改了些
原来的代码:
        /* 38 */{        C_MODRM                |        CH_MODREG,                                                                        _T("cmp"),                        L_L_L_L_B_B_U_U                                                        },
        /* 39 */{        C_MODRM                |        CH_MODREG,                                                                        _T("cmp"),                        E_A_E_A_P_P_U_U( SIZ_DWORD, SIZ_WORD )        },
        /* 3A */{        C_MODREG        |        CH_MODRM,                                                                        _T("cmp"),                        L_L_L_L_B_B_U_U                                                        },
        /* 3B */{        C_MODREG        |        CH_MODRM,                                                                        _T("cmp"),                        E_A_E_A_P_P_U_U( SIZ_DWORD, SIZ_WORD )        },
        /* 3C */{        C_DEFREG        |        CH_I8,                                                                                _T("cmp"),                        L_L_L_L_B_B_P_U( REG_AL )                                },
        /* 3D */{        C_DEFREG        |        CH_DATA66,                                                                        _T("cmp"),                        E_A_E_A_D_W_P_U( REG_EAX )                                },
现在的代码:
        /*38*/{    FG_MODRM  | FG_MODREG<<FGB ,                         _T("sub")          ,SS_SS_BB_PP_P(UDF ,UDF ,UDF)             },
        /*39*/{    FG_MODRM  | FG_MODREG<<FGB ,                         _T("sub")          ,LM_LM_DW_PP_P(UDF ,UDF ,UDF)             },
        /*3A*/{    FG_MODREG | FG_MODRM<<FGB ,                          _T("sub")          ,SS_SS_BB_PP_P(UDF ,UDF ,UDF)             },
        /*3B*/{    FG_MODREG | FG_MODRM<<FGB ,                          _T("sub")          ,LM_LM_DW_PP_P(UDF ,UDF ,UDF)             },
        /*3C*/{    FG_DEFRG  | FG_IMDATA<<FGB ,                         _T("sub")          ,SS_SS_BB_PP_P(REG_AL  ,UDF ,RMK_IM8)     },
        /*3D*/{    FG_DEFRG  | FG_IMDATA<<FGB ,                         _T("sub")          ,LM_LM_DW_PP_P(REG_RAX ,UDF ,RMK_IM1632)  },

不知道这是出于什么原因。
当然里面还有地方更改。
之后就没有再去测试了。

问题反馈.zip
上传的附件:
2013-9-28 12:26
0
雪    币: 260
活跃值: (249)
能力值: ( LV12,RANK:350 )
在线值:
发帖
回帖
粉丝
14
LeoSky朋友真够细心, 这份代码我是在看过youngboz朋友的代码后写的,采用的是与他相同的引擎框架,这些我我在文章中都有提到,至于那个错误,应该是在当时录入指令表时的一个手误吧(毕竟要录入的指令太多),谢谢你的反馈!
2013-9-28 21:50
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
xu学习可以啊
2013-9-29 08:03
0
雪    币: 18
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这份代码我都不存着呢,哈哈,以后可能会用到。提出来就是担心还有没有其他地方有错误,想让楼主检查检查。 更值得庆幸的是 Disassembler 2.01 出来啦。哈哈。昨天搞到VS2008上 感觉挺不错的,速度也蛮快的。相比之下 比你的这款 臃肿的多了。当然功能更强大了。
2013-9-29 09:06
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kvm
17
赞lz的分享精神!!!
2013-9-29 09:49
0
雪    币: 19
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
求汇编引擎文章来源
2013-9-29 15:53
0
雪    币: 260
活跃值: (249)
能力值: ( LV12,RANK:350 )
在线值:
发帖
回帖
粉丝
19
http://bbs.pediy.com/showthread.php?t=75094   
egogg大大的,挺不错的
2013-9-29 19:00
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
感谢分享。。。
2013-10-27 23:13
0
雪    币: 4667
活跃值: (3582)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
谢谢分享
2020-9-30 21:31
0
游客
登录 | 注册 方可回帖
返回
//