逆向工程核心原理-(1 + 2)

逆向工程核心原理-(第一章 + 第二章)

EP代码(EntryPoint,入口点)

EP是Windows可执行文件(EXE , DLL , SYS)的代码入口点,是执行应用程序时最先执行的代码的起始位置,它依赖于CPU

知识点一 , 快速查找指定代码的四种方法

1.代码执行法

就是调试时注意程序调用了什么具有特征性的函数或者是API(比如主函数调用了一个窗口,那么就可以在调试程序的时候多注意是否有messagebox函数),简单来讲就是直接暴力找.

2.字符串检索法

右键菜单,点击查找中的所有参考文本字串,然后查找有特征的字符串

Untitled

3.API检索法(1): 在调用代码中设置断点

windows中想要输出内容就必须调用操作系统中的API,所以我们只需要找到可能调用的API即可(这听起来有点像第一种方法,但是这个方法是用odgb的功能搜索).

右键,点击查找中的模块间的调用

Untitled

看到了有用的API

Untitled

双击就可追踪到调用这个API的地址

4.API检索法(2): 在API代码中设置断点

右键,点击查找中的所有模块中的名称

Untitled

这时候看窗口最上方的标题栏,这时候你打字,他就会帮你搜索

Untitled

Untitled

找到需要的API的时候双击就会进入函数的内部

注意

  • 在”所有模块间的调用”中,双击会进入调用的地址
  • 在”所有模块中的名称”中,双击会进入函数的内部

回到正文,这时候API的顶部下一个断点,然后运行,程序执行到这个调用的API时就可以看到栈中重要的数据了

Untitled

知识点二 , 修改程序的字符串

修改字符串的两种方式

  • 直接修改字符串缓冲区(buffer)
  • 在其他内存区域生成新字符串并传递给消息函数

以上两种方式各有优缺点

方法1: 直接修改字符串缓冲区

Untitled

这里的push 004092A8

说明了字符串就在地址004920A0当中

所以我们使用跳转功能(Ctrl + G)找到了我们所要找的字符串

Untitled

选定要修改的内存,按下Ctrl + E键即可修改内容

Untitled

修改完后要在结尾加上两个字节的00!!!!!!!因为是字符串

然后需要注意的点(也是这个方法的弊端)就是修改的字符串最好要比原来的字符串要小,因为比原来大的话会覆盖掉后面的数据(有可能很重要,就算不重要,这样改的话也会影响到程序的稳定性)

接着运行主程序,最后弹出窗口(MessageBoxW)

Untitled

这一个方法的结尾部分:

但是这只是暂时的修改,想要完成这一次的修改就必须保存修改后的文件,在内存窗口中选择被修改后的字符串,右键点击”复制到可执行文件”

Untitled

变成了如图所示的Hex窗口(十六进制窗口)(如果是全屏的话点击查看里的窗口就可变成小窗口了)

Untitled

再一次右键点击保存文件就可以保存了

Untitled

运行一下新程序

Untitled

说明成功了

方法二: 在其他区域新建字符串并传递给消息函数

接着上一种方法重新启动一下程序,发现字符串又变回了原来的样子,说明了刚刚不保存的话,方法一的改动只是暂时的

Untitled

重新运行至main()函数内部

Untitled

这里的push指令其实就是在向API(MessageBoxW)当中传入参数,而这个参数就是我们所想要显示出的字符串的地址

所以这个方法的思路就是修改传入参数的地址,把地址改为我们自己修改的数据的地址,这个方法比方法一好的地方是,没有了字符串长度的限制,可以比原来的字符串更长.

Untitled

这里是hello字符串,向下滑动直到数据全是00(NULL)(这里就是内存中程序没有用到的部分(系统给的内存容量一般大于一个程序所需的内存),也就是可以自由改动的部分.

Untitled

找一块空旷的地方修改我们需要的数据

Untitled

记下这个数据的地址

然后修改我们传入API的地址:点击传参指令,按下空格

Untitled

最后接着运行下去,就成功了

Untitled

这时候保存程序(按照上面的步骤)

保存后发现运行错误

Untitled

这是正常现象是由于修改了地址引起的,不用管,后面会学到

PS:

注意使用跳转功能的时候要注意是在那个窗口进行跳转

Untitled

假设是在指令窗口使用跳转功能,那么跳到的地址会被翻译成指令.

Untitled

如果是在内存窗口中使用跳转功能,会直接查看内存(这道题就是要在内存窗口中跳转)

Untitled

文章作者: LamのCrow
文章链接: http://example.com/2021/12/18/第一章 + 第二章 c670465c36c9494a8398cad7c6651c5c/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LamのCrow