在纯C工程的main函数之前跑代码(手工找到程序入口点, 替换为我们自己的函数)

在main函数之前跑代码的方法

方法: 手工找到程序入口点, 替换为我们自己的函数

  1. 写测试程序
  2. // test.cpp : Defines the entry point for the console application.
  3. //
  4. #include "stdafx.h"
  5. #include <windows.h>
  6. #include <crtdbg.h>
  7. /// 程序入口点 00671140 >|?  55            push    ebp
  8. /// 用OD可知
  9. extern "C" void mainCRTStartup(void);
  10. int foo()
  11. {
  12. /**
  13. 00671020
  14. */
  15. /// 执行不带CRT函数的代码
  16. MessageBox(NULL, "foo before main", "test", MB_OK);
  17. mainCRTStartup();
  18. return 0;
  19. }
  20. int main(int argc, char* argv[])
  21. {
  22. /** ALT + 8
  23. 00671080
  24. */
  25. foo();
  26. printf("&main = %p\n", &main);
  27. getchar();
  28. return 0;
  29. }

用DASM窗口记录foo函数的地址为 0x00671020

用WinHex打开PE文件, 找到程序入口点在0x100, 内容为0x1140, 修改程序入口点为0x1020.

手工查找程序入口点的方法: http://blog.csdn.net/lostspeed/article/details/49506193

在纯C工程的main函数之前跑代码(手工找到程序入口点, 替换为我们自己的函数)

修改后

在纯C工程的main函数之前跑代码(手工找到程序入口点, 替换为我们自己的函数)

运行效果

在纯C工程的main函数之前跑代码(手工找到程序入口点, 替换为我们自己的函数)

在程序中单步,看看效果

在纯C工程的main函数之前跑代码(手工找到程序入口点, 替换为我们自己的函数)

可以看到程序先运行到了foo, 而不是main.

http://blog.csdn.net/lostspeed/article/details/49748555

上一篇:PC逆向之代码还原技术,第二讲寻找程序入口点


下一篇:------ Tor(洋葱路由器)匿名网络源码分析——主程序入口点(一)------