做网站营销公司排名,p2p网站开发方法,展览馆设计公司排名,哪个网站容易做二级域名出处#xff1a;http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html
先声明下#xff1a;这个和脱壳没关系#xff0c;不是找壳里面的程序入口哦#xff0c;只是程序本身的入口#xff0c;个别朋友不要误会哈。其实这个应该是基础#xff0c;但我经常找…出处http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html
先声明下这个和脱壳没关系不是找壳里面的程序入口哦只是程序本身的入口个别朋友不要误会哈。其实这个应该是基础但我经常找入口的时候翻半天......所以还是记录下来万一时间久了又犯迷糊的时候可以查阅呵呵。一般用OllyDBG打开程序的时候并不是直接定位到程序入口而是还要先进行一系列的初始化工作但做这些工作的反汇编代码我们是不需要的所以我们要快速跳过直接到程序入口。我先把方法写出来然后再简单分析一下初始化的时候都干了什么。1.一路F8下去分别步过下列两个函数call dword ptr ds:[KERNEL32.GetVersion] ; kernel32.GetVersioncall dword ptr ds:[KERNEL32.GetCommandLineA] ; kernel32.GetCommandLineA2.GetCommandLineA下面会有好几个Call第1个Call完了后隔一行以后会有连续的3个Call连续的3个Call完了后再往下遇到的一个Call就是程序入口的Call了。也就是从GetCommandLineA往下数(不包括GetCommandLineA本身)第5个Call一般就是程序入口点的CallF7进去就可以了。PS如果是用IDA5反汇编的话我们点一下“_main proc near”处然后 Run to cursor(F4)一下基本会直接定位到入口处。方法很简单那来看看在进入程序入口之前都干了些什么吧。下面这个是刚用OllyDBG打开程序的截图。 可以看到第一个Call就是GetVersion很好理解就是获得Windows版本号。继续往下。 看看我选定的部分其中有5个Call最后一个就是我们前面所找的入口处前面的四个Call的函数分别是:__crtGetEnvironmentStringsA_setargv()_setenvp()_cinit()需要注意的是很多反汇编代码里面后面的这三个函数名都不会被直接显示出来而是显示的函数地址。__crtGetEnvironmentStringsA我猜是GetEnvironmentStringsA()的宏定义名称(如果有错还请指出)。GetEnvironmentStringsA()的作用是返回环境变量。http://msdn.microsoft.com/en-us/library/ms683187(VS.85).aspx_setargv()通过函数名就可以看出是用来处理命令行参数的。_setenvp()同样是处理环境变量的。这两个函数的作用效果是把参数和环境变量保存到附近的可用“堆(heap)”里面方便使用。_cinit()的作用就是当检测到我们的参数覆盖了返回地址能造成缓冲区溢出的时候报错并退出程序。平时我们遇到的讨厌的“遇到问题需要关闭”貌似就是这玩意搞的。http://msdn.microsoft.com/en-us/library/ms924298.aspx下面这个是用的微软官方测试代码的效果截图。 Author:zerosoul(零魂)