源码阅读SourceInsight与静态反汇编IDA Pro

来源:互联网 发布:淘宝上买游戏币可靠吗 编辑:程序博客网 时间:2024/05/16 09:34

1.源码阅读SI

    1.1调用关系图(正向和方向关系调用)

                 Sourceinsight可以方便的查看函数调用关系,点击图标   打开如下:

                 点击函数的末尾可以展开下一级调用关系,如上图鼠标弹出”加号“的位置。调用关系图,右键可以设置查询的关系:

                 

                                          for types:查看变量类型关系设置

                                          for functions:查看函数调用关系或索引关系

                                          for variables,constants:查看变量值

                                          for classes:查看类调用关系或继承关系

                                          for files:查看文件调用关系

    1.2 快捷键

                       Ctrl+O:打开工程文件窗口

                       Ctrl+?:搜索内容窗口

                       Shit+F8:高量标记变量或函数

                       Shit+F9:搜索结果中,往前遍历查询结果的文件索引

                       Alt+L:只有焦点处于代码文本窗口中时,可以是焦点快捷地调到左边的名称空间窗口

2.静态反汇编IDA

     2.1反汇编算法

           a.线性扫描反汇编:无法将嵌入的数据和代码区分开

           b.递归下降反汇编:无法处理间接代码路径(如利用指针表来查询目标地址的跳转和调用)

     2.2 常用操作与快捷方式(IDA6.5.1版本)

          名称:sub_xxxx:地址xx子例程          loc_xxxx:地址xx指令          byte_xxxx:位置xx8位数据                unk_xxxx:位置xx大小未知数据

          节:idata:函数导入段          edata:函数导出段            data:数据段              rdata:资源段


          1.Num ”-“或”+“ 图形视图和代码视图切换(6.5版本,5.5版本使用space空格切换)

          2.Ctrl+s 段跳转    Ctrl+P 函数跳转   Ctrl+E 跳转到函数入口点

          3.Shift+F3 函数名窗口       Shift+F4 所有名称空间窗口     Ctrl+X交叉引用(函数和数据交叉引用,交叉引用:引用其他位置的显示,Data Xref注释处)

          4.代码调用关系,菜单栏结构图

          5.text view和graph view(单个函数的流程图) 代码跳转关系

          6.ESC 回退查看     Ctrl+Enter 前进查看

          7.F5插件   可以翻译汇编代码成pseudocode(伪代码)C语言版   -----使用IDA5.5版本较稳定

          8.IDA加载过程出现oops错误,需要安装python 2.6版本

          9.text view 模式,粗虚线:循环,细虚线:条件跳转,实线:非条件跳转,红线:同一函数内

          10.Alt+T 搜索字符串

          11.菜单view->open subviews->cross renferencesfunction call视图    (alt+num切换tab)          function call和反汇编窗口组合查看阅读代码

          12. Alt+M标记---->Ctrl+M跳转到标记处

          13.IDA 不能确定函数分散到各个段里的函数边界,所以有sub_XX和.text的跳转

                             函数通过function call联系

                             .text这种分散的函数片段可以通过cross renferences确定

          14.F1 IDA帮助文档查看INC脚本内部提供的系统函数编写脚本


      2.3 exe文件修改

          1.修改原则:

                  单条指令替换

                            retn返回的    call指令   ------->>替换      nop(0x90)   

                            retn XX返回的   call指令    ---------->>替换    add esp XX

                  替换所有指令保持栈平衡

                            push、retn和retn XX    call指令  ------------->>替换  nop(0x90)


                  汇编函数返回值:ret 前赋值给 EAX,数据过大高位存在EDX,再大指针

          2.修改方法:

          直接修改机械码,可能导致两条nop语句之间的汇编代码对应的机械码发生变化,使用如下操作修改

          IDA->Options->General->设置opcode byte机器码显示

          

          IDA配置文件cfg目录下的idagui.cfg,修改DISPLAY_PATCH_SUBMENU=YES,重启ida可以看到Edit->Patch Program->assembly

          

          使用IDA查找到代码对应的16进制码,在UtrlEdit下查找后,使用以下原则进行全指令替换

          

      2.4 堆栈平衡

           call调用前,需要压栈参数,出栈需要弹出堆栈内所有数据,retn xx 或 ret后调用处add esp xx平衡,类似prinf函数参数数量不可确定,需要出栈时调整esp

            (rop攻击:面向返回值的错误跳转攻击)

      2.5 反汇编技巧

            1.阅读反汇编时,数据最好从初始化源头追踪,如窗口句柄需要查看createwindow函数,否则很难以阅读

            2.lea offset 函数,push入函数代表回调函数;如果在定义在数组里,数组首地址调用处,可能是事件循环

            3.反编译工具未能识别的函数,以.text块跳转     (可以载入pdb文件导入本模块的符号表,需要设置pdb.cfg)

            4.for、while循环jmp无条件回跳的代码

               if条件判断:cmp等标志寄存器控制  和  跳转命令

               结构体:dword ptr 表明[]字寻址、双字寻址或字节寻址,其中Dword Ptr可能是4字节指针

               switch:连续多处调转

      2.6入口函数OEP    

               几种语言的入口函数特征:

              C++的入口函数GetVersion              汇编的入口API函数   GetModuleHandleA              DELPHI入口特征 GetModuleHandleA              易语言入口API函数 GetVersion              VC8入口特征查找 GetStartupInfoW              VB入口特征查找函数 ThunRTMain
         2.7反汇编基础(16位AX、32位EAX、64位RAX)
                     
                     AX 累加寄存器 (除法和函数返回值中隐含使用,数据过大DX辅助)   CX  记数寄存器 (循环中隐含使用)
                     SI、DI 基址变址寄存器         SP、BP、IP 指针寄存器

                     C++入口函数在link配置里面可修改
     关注call和jmp、lea(move offset),结构体和类反汇编相同

参考:

1.《IDA Pro权威指南 (第2版)》

2. http://blog.csdn.net/chenyujing1234/article/details/7766639

3.http://www.doc88.com/p-774671348081.html 博客实例

4.http://www.pediy.com/kssd/pediy12/142766.html 读书笔记

5.http://bbs.pediy.com/showthread.php?t=160887  连连看新人外挂入门

6.http://ajiannet.cnblogs.com/游戏外挂

7.http://www.eefocus.com/book/09-05/740251276059759.html汇编指令入门

8.http://blog.csdn.net/chinabinlang/article/details/19476941

9.http://www.cnblogs.com/jack204/archive/2011/12/02/2271884.html(反汇编技巧)

0 0
原创粉丝点击