起因:
在以往的逆向中,总觉得OD有些不方便的地方.在调试器中,楼主个人比较喜欢Windbg 这种调试器,窗口想怎么拖,想怎么停靠都行,随心所欲.也没有IDA那种鼠标跟随显示反汇编的小窗口等等,其次就是OD的更新太慢了,几年才更新一次,要等OD的64位版本不知道还要等多少年,虽然现在已有64位的调试器x64dbg,更新也很频繁,但跟OD还是有一段距离
综合种种原因,让楼主突然想到毛爷爷曾经说过 ”自己动手,丰衣足食”,所以楼主决定积极响应号召,就自己动手吧,而且身为一枚逆向人员,有款自己的调试器,在逆向上还是很方便的.于是楼主投入了很多的业余时间,断断续续写了很久….很久…
YzDbg介绍:
它是一款类似OD的32/64调试器(其中64位版本即能调试32位程序也能调试64位程序), 基于MFC多文档界面开发的,由楼主一人独立完成,开发环境为vs2010,界面全部采用GDI自绘,方便编译,如果用第三方界面库的话,编译太麻烦了(楼主不喜欢,呵呵),而且GDI使用比较灵活想怎么画就怎么画.汇编引擎采用XEDParse, 反汇编引擎采用BeaEngine,模拟器引擎采用unicorn.
因为用OD很多年了,已经养成了一些OD的使用习惯,所以在功能上和用户体验上全部山寨OD,因此大部分功能都是逆向OD而来.
目前OD1的功能,除了Ctrl+A分析功能,还没时间写,其他都写完了,然后看到OD2.0和x64dbg中有一些不错的功能也都加进来了,还有一些如IDA的鼠标跟随显示小窗口,硬件条件断点,类似CE的地址监视功能,也都写了.
之后又看到<软件保护及分析技术>一书中提到的伪调试引擎和模拟器, 这两功能觉得不错也写了, 伪调试引擎可以用来过一般的壳检测(如vmp),至于驱动保护,那就得自己写驱动过了.而模拟器可以用来模拟执行代码,同时不影响真实的执行环境,用来跟踪调试还是不错的.
总之就是看到什么功能好就加什么功能,尽量给调试带来方便,呵呵
至于反编译的功能,本来想加入Snowman的,但是Snowman反编译出来的代码效果不好,跟IDA的F5没法比..所以还是不加了..
另外支持的系统有xp32/64,win2003 32/64, win2008 32/64,win7 32/64,win8 32/64,win10 32/64, win Vista 32/64,这些楼主都简单的测试过,不过win7 64位因为楼主一直用这个系统,所以基本上这个系统没什么问题,其他系统就不好说了,毕竟其它系统只是简单的测试
YzDbg已实现的功能:
基本的调试功能(单步,忽略异常单步,执行到返回,自动步进/步过等等)
支持int3断点,硬件断点,内存断点,消息断点等
支持源码调试
支持解析pdb符号文件,解析导入库文件,解析API参数
支持插件
支持脚本,脚本是在ODbgScript源码的基础上改的,所以用法跟ODbgScript一模一样,应该也能兼容大部分的OD脚本,这里对ODbgScript的作者表示感谢
支持模拟器调试,能够在模拟器上进行模拟调试,用来分析算法还是可以的
支持调试dll
支持解析map文件,如ida或者vs的
支持命令行,目前支持的命令有 d,dump,db,dw,dd,dq,df32,df64,df80,da,du,dutf8,dasm,bp,bc,mr,mw,mc,若大家需要,后续可以再继续添加命令,不过楼主一般都只用dd..
支持简单的条件表达式,表达式的用法跟OD一样
下面给出支持的表达式运算符
( ),[ ],!,~,*,/,%,+,-,<<,>>,<,<=,>,>=,==,!=,&,^,|,&&,||,in,sfind,(BYTE),(CHAR),(WORD),(SHORT),(DWORD),(INT), (DWORD64),(INT64),(FLOAT),(DOUBLE),(ASCII),(UNICODE),(WINTEXT)
下面给出支持的表达式运算操作数
常规寄存器,如eax,ax,ah,al
如果表达式中出现符号,如api,会自动把符号转换成地址,进行计算
64位版本的操作数 支持 r8-r15.
这里注意下,表达式中若有数字,将会视为十六进制数
给个例子如: [eax] == 00401000
还有很多功能,这里不一一介绍,大家可以自己去发现 ^_^
用法跟OD一模一样,简单的说,你会用OD,你就会用它,如果你不会用OD,可以百度OD的用法…
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)