其他功能
1.图形化功能
这种模式比文本模式的可视性更好,用户更容易看清函数的代码流程。通过空格切换文本模式或者图形化模式。
2.修改可执行文件
使用IDA可以直接修改二进制内容。edit-patch program打开菜单再change byte和changeword菜单项以十六进制修改数据。
3.加载符号文件
load file-pdb file加载dbg和pdb文件。这个功能对系统软件十分强大,一旦接入网络,IDA就会自动加载目前最符合当前文件版本的符号文件。
4.API帮助关联
将idagui.cfg中的helpfile指向本地Windowsapi帮助文件,当用户分析文件看不到熟悉的API,只要选中某个API并按ctrl+F1快捷键。
5.输出文件
可通过file-produce file调用。可以用map,asm,LST,EXE,dif等输出文件。
MAP文件
是一个文本文件,记录了程序调用的函数等符号信息。
asm文件
仅输出汇编代码部分,每行代码之前都有地址。
dump database to IDC file命令
这项命令用于将当前IDA的数据变化记录到IDC文件中,供恢复当前数据时使用。每个版本都有各自的数据格式且互不兼容。利用该命令,可以将低版本的工作记录转换到高版本。首先在低版本用这个命令输出一个IDC脚本文件。再在高版本中重新装载和分析原文件,完成后按f2打开IDC脚本并执行。
dump typeinfo to IDC file命令
主要用于将一些用户自定义的数据类型保存到IDC文件中去。
小结
IDA提供专业的反汇编能力外还提供了相当优秀的辅助功能例如制作流程图和动态调试。IDAPRO是目前最好的反编译器,像一个智能的反汇编工具,改变了反汇编的方法。IDA从对程序代码进行反汇编开始,分析程序流程,变量和函数调用。
十六进制工具
常用的十六进制工具有hexworkshop,winhex,hiew等,它们各有特色;hexworkshop提供文件的比较功能,winhex可以查看内存映像文件,hiew可以再汇编状态下修改代码。本节主要将如何用hiew修改pe文件的指令代码,一般的修改用ODG和IDA就可以完成。
安装
支持x86-64指令集,将hiew压缩包解压到指定目录就可以完成安装,为了方便使用,可以配置hiew.ini文件。
startmode默认设置是Text,建议将其设置为code,这样一进入hiew就会自动切换代码界面。
修改指令
用hiew打开实例文件。按enter将在文本,十六进制和汇编代码中切换。
切换到汇编代码模式,文件将以反汇编代码的形式显示,用户可以在汇编状态修改和分析程序,这是hiew最强大的地方。
1.为文件增加水平和垂直滚动条
滚动条的显示是由createwindowex函数的样式参数控制的,具体参数及用法可以查阅api手册。用ida反汇编后,可以再输入表窗口查找createwindowexA双击来到代码处
要想显示滚动条,只要在dwstyle参数上加上ws_hscroll和ws_cscroll这两个是,打开vc开头文件可以看到这两个值的初始值
2.加载数据块
此功能可以对数据或者代码进行一些简单的加解密运算。用hiew打开3.3.16提到的encrypted程序,在十六进制或者代码模式下按F3进入编辑状态。在按F7进入加密模式界面,再按enter输入指令,如图所示可以在byte word dword格式当中切换。
因为指令代码不支持跳转命令。所以要用loop指令替代。含义是jmp/stop。rol/ror指令要求两个操作符大小相等。32位寄存器不支持div,mul指令,AL,AX,EAX寄存器存放的是待转运的数据。
静态分析技术应用实例
解密初步
现在的软件一般采用人机对话模式。从提示信息入手就可以找到要害。
我们用IDA进行反汇编,文件不到,很快找到代码处
找到这里,这就是绕过判断的关键,要想让程序接受任何注册码,只要将jne改成je或者nop就可以了。
所以我们启动ida。打开程序跳转到关键代码处,通过patch program-assemble进入汇编修改状态进行修改,如图所示
在patch program-apply patches to input file保存修改,这个时候输入任何序列号就能成功,这也就是我们俗称的爆破法。
这个例子的算法核心内容就是将用户输入的序列号和参照值比对。
参照值一般会存储在程序中。大多数情况,编译器会将初始变量放在数据区块当中。用十六进制打开文件,会发现有数字9981,这就是正确密码
所以在编写这个算法的时候也是同理,不要直接显示明显的提示信息。
逆向工程初步
文中给出一例并且提了要求。
1.移除mission failed对话框
打开ida进行反汇编,查看strings窗口,双击这串字符串转到字符串代码处,双击后面的交叉参考,跳转到调用这个字符串的代码处
按照要求用nop代替这里的代码就可以了
2.将输入的字符显示到对话框中
用于编辑字符的函数有getwindowstext等。在ida中,输入输出等函数显示在Name中。在name窗口双击getwindowtextA函数来到调用出,会发现有两处调用了这个函数,有一处比较可疑,具体如图。
这要经00401211h的指令nop掉就可以了。
3.修改字符
用hexworkshop或者hiew查找字符not reversed改成“-Reversed-”把“good number”改成“good serial”,把“bad number”改成“bad serial”最后找到一地方存放pediy就行。
4.完成序列号验证
编写检测序列号的代码,一个比较好的地方时00401270h处,这是原来的算法代码空间