第2章:分析Hello World程序

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

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

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

第2章:分析Hello World程序

 

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

第2章:分析Hello World程序

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

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

 

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

1.代码执行法

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

2.字符串检索法

直接选择搜索所有字符串

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

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

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

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

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

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

修改字符串的两种方法:

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

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

原文链接: https://www.cnblogs.com/Rev-omi/p/13126956.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    第2章:分析Hello World程序

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/355034

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午9:01
下一篇 2023年3月2日 上午9:02

相关推荐