zoukankan      html  css  js  c++  java
  • 第2章:分析Hello World程序

    入口点:可执行文件的代码入口点,是应用程序最先执行的代码的起点,依赖于CPU.

    通常,在执行程序之前会进行一系列的执行环境初始化

    再进入Entry Point之后,还有C++的一系列自行添加的启动函数.

     在401000处,里面有调用MessageBox的函数:

     一般来说C++程序在运行到main函数之前都会运行kenel32.GetCommandLine()函数,可以以此为特征,减少分析量.

     在执行这个函数之前没有任何的征兆,因此最好借着已知的程序多调试几次,熟悉语言的特性,以后在调试其它的语言时就熟练许多.

    以下提供了四种代码查询法:

    1.代码执行法

    使用F8,在执行后观察堆栈,寄存器,以及程序的变化.

    2.字符串检索法

    直接选择搜索所有字符串

    3.API检索法,在调用代码中设置断点(模块间调用)

    在所有模块调用中找到相应的函数,下断点.但在复杂一点的程序中,常常会有很多个相同的不同地址的函数调用.

    4.在API代码里面设置断点(查询函数符号)

    找到先在内存布局中找到相应的dll文件,然后再在模块内搜索名称name.或者直接在x64dbg导航栏中找到符号栏,即可寻找.在dll库中找导出函数即可.

    此方法有一个问题,若添加了run-time packer或保护器,则文件结构发生改变,无法找到.

    为了应对这种情况,可以选择在DLL代码库被加载到进程内存后,直接向DLL代码库添加断点,待DLL库导入后,再使用上述步骤,此方法下的断点会执行到函数里面一步,即不会刚好停在函数处.

    修改字符串的两种方法:

    1.直接修改字符串缓冲区: 若要存入的数据更长,则容易损坏后面的数据.

    2.寻找到一个新的区域,在其它内存区域内新输入字符串,然后修改函数调用时参数的地址.这当中涉及到地址转换以及内存区域的寻找.后面会学到.

  • 相关阅读:
    React
    移动端
    Flask 框架小记
    PyTorch 学习
    CNN 小结
    Django 环境下常用的模型设计
    Linux用户和用户组
    Linux下查看进程的命令输出的内容解释
    linux下配置tomcat开机自启动
    商业智能概述
  • 原文地址:https://www.cnblogs.com/Rev-omi/p/13126956.html
Copyright © 2011-2022 走看看