windowsAPI断点
给Windows下api断电是**非常常用的方法:
Windows创建窗口的步骤:
1、创建注册窗口类
2、创建窗口句柄
3、显示更新窗口
4、消息循环
我们要断下来的地方就是第三步,一般这个步骤最常用的函数是MessageboxA(W) ,ShowWindow ,MessageBoxExA(W) ,DialogBoxParamA(W) ,CreatWindowExA(W)下面是具体实验
这里就直接偷别人的图吧
程序运行起来这样载入PEid没壳是用VC6.0写的
载入od:
查找API方法很多:
1.CTRL+G(这样找到的在系统空间,无论这个函数调用了多少个最后都会停在相同位置所以应该是系统动态链接库里该函数执行的具体代码吧)
2.右键查找所有模块中的名称,也可以右键查找当前模块中的名称
3.右键查找当前模块的名称(这种只会搜索出本软件要调用的API,锁定的结果直接在应用程序领空)
今天要说的是第三种:
右键查找当前模块的名称,在弹出界面键入messagebox光标自动定位,右键在每个参考上设置断点
直接执行就会断到messageBox这个函数处,这里是具体输出的地方想要上面不远处
这里的字符串给出了提示 至于LoadString这个API的作用我百度了一下
int LoadString(HINSTANCE hInstance,//应用程序实例句柄
UINT uID,//资源ID
LPTSTR lpBuffer,//存放字符串的缓冲区
int nBufferMax//缓冲区大小
)
作用:
先在资源中加入字符串资源(不管是字符串还是窗口还是按钮),都有一个名字,比如IDC_BUTTON1
然后用这个函数把这个名字作为参数,就可以取出资源中的字符串了
这里的机制就是:先把需要的字符串载入到缓冲区,记录地址,然后真码假码比较根据结果,输出对应缓冲区的内容
下面是静态的IDA:
载入IDA,有import窗口(导出表)进入后键盘点击messagebox就就能自动定位。双击message函数 选中走到的窗口上的MessageBox函数按X,显示交叉引用该函数的地方
这里有不止一个,没办法,只能一个个试了。
总结:用ida调试最好不要找AIP,静态调试很容易走到陷阱里,用od找到后再用ida分析(od擅长追踪,ida擅长分析)
该文章的具体例子来自合天实验
http://www.hetianlab.com/pages/registerUser/ru-monitor.jsp?e=1ed2fafe-1860-419d-b83c-1b20aa6cec8a&c=&u=REG-9f3c-d1b7-4894-992a-82771c1d4557&v=