TC官方合作论坛

 找回密码
 立即注册
查看: 1889|回复: 4

[学习心得] 【类人猿TC内存探讨】 第八讲:回调函数初分析

[复制链接]
发表于 2017-8-11 12:02:19 | 显示全部楼层 |阅读模式
本帖最后由 类人猿 于 2017-8-28 14:16 编辑
     
     <<<<<<<<技术探讨,欢迎大神指导!<<<<技术Q:578052137  技术群:128262077
     百度概念和关键字:什么叫回调函数呢,回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应
     钩子进程使用函数HookProc;其实HookProc仅仅只是应用程序定义的符号。比如你可以写成KeyBoardHook.但是参数是不变的。Win32 API提供了诸如:CallWndProc、GetMsgProc、DebugProc、CBTProc、MouseProc、KeyboardProc、MessageProc等函数。其中TC直接进行支持的有9中,已经足够满足我们写辅助了。
本节课我用od 工具对EnumWindows参数里面回调函数申请进行一个简单的分析。大家可以按照我下面的步骤进行分析,懂得回调函数内在函数分析有助于我们理解回调函数的机制。
    下面是EnumWindows的函数声明,这个函数响度比较简单,我们从简单开始吧!   我们能看到第一个参数就是个回调函数的指针,也就是函数开头地址。
     lpEnumFunc:指向一个应用程序定义的回调函数指针,请参看EnumWindowsProc。
     lPararm:指定一个传递给回调函数的应用程序定义值。

     回调函数原型
     BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
                  参数:
                  hwnd:顶层窗口的句柄
                 lparam:应用程序定义的一个值(即EnumWindows中lParam)

1.如果觉得C声明纠结的话,我们还是直接看TC版本的吧,首先我们先新建一个工程添加三个按钮。




2.我们添加一下代码,不懂的可以直接复制TC里面的源码修改即可。
  • var h
  • function MyEnumProc(hWnd,lParam)
  •     var title = windowgetcaption(hWnd)
  •     traceprint("句柄"&hWnd&"|"&title)
  •     return true
  • end
  • function 按钮0_点击()
  •     //这里添加你要执行的代码
  •     h = callbackmalloc("MyEnumProc","enumwindowsproc")
  •     traceprint(h)
  •     messagebox(strformat("%x",h))
  • end
  • function 按钮1_点击()
  •     dllcall("user32.dll","long","EnumWindows","callback",h,"long",0)
  •     traceprint(getlasterror(1))
  • end
  • function 按钮2_点击()
  •     callbackfree(h)
  • end
3.我们点击按钮-申请回调函数,我们得到TC回调函数的地址,也就是汇编里面函数头部地址。

4.od附加启动,按下ctr+g输入地址调到函数地址,发现里面有两个call,其实这些都可以忽略的,我们只是作为研究用,了解TC内部机制

  我们分析到第一个call应该是获取字符长度(回调函数名字可以自己修改的)
  第二个call蚕食TC自带库函数回调函数
5.我们在od回调函数地址开头下一个断点,我们按下F2.点击按钮-遍历窗口(执行EnumWindows函数),获取窗口的同时会自动的执行回调函数EnumWindowsProc

      新手看这个可能是感觉没有什么用,但是在后期我们了解TC内部和一些回调函数原理,我们可以做不少高级的东西的。后面我会跟大家说明其他的回调函数,比如SetWindowsHookEx的使用。觉得不明白可以留言给我,谢谢!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1威望 +10 金币 +10 收起 理由
风凌天下 + 10 + 10 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-8-13 11:13:09 来自手机 | 显示全部楼层
这个估计很少人懂的,懂的也往高级的入门了。
回复 支持 反对

使用道具 举报

发表于 2017-8-14 13:12:24 来自手机 | 显示全部楼层
学习下。学习下。
这个可以用来做hook,判断滚动条,是否已经滚动到底部。
回复 支持 反对

使用道具 举报

发表于 2017-8-14 13:13:28 来自手机 | 显示全部楼层
这个可以用来做hook,录制键盘动作,录制鼠标动作,录制鼠标移动轨迹。
回复 支持 反对

使用道具 举报

发表于 2017-8-28 23:07:23 | 显示全部楼层
支持一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-18 04:19 , Processed in 0.045390 second(s), 25 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表