山东001在线

 找回密码
 立即注册
搜索
查看: 295|回复: 0

聊一聊:逆向篇:解决Flutter应用不能点击问题2023/3/30 21:27:33

[复制链接]
  • TA的每日心情
    奋斗
    2023-6-30 13:23
  • 签到天数: 105 天

    [LV.6]常住居民II

    发表于 2023-3-30 21:27:58 | 显示全部楼层 |阅读模式

    由于我们的设备改变了原先系统的布局,将应用的平移缩小,然后留出其他区域用于其他功能布局。导致IMS也需要修改适配,那么鼠标事件作为IMS的一部分,自然也做了响应的修改,导致了我们对应用点击的不兼容。[url]http://www.yxfzedu.com/自建调试[/url]的具体问题可以到我们网站了解一下,也有业内领域专业的客服为您解答问题,为成功合作打下一个良好的开端![align=center]http://resources.yxfzedu.com/images/other_images/jing_video.png[/align]





    拓展:大致介绍下IMS的工作流程,IMS分为层和层,层IMS通过函数I创建NIM用于层和层通讯,NIM构造时会创建IM,而这个IM对象就保存有IR和ID。IR负责事件的读取,然后扔给ID,ID把事件分发给对应的。接下里就是应用内部自己的事件处理。





    我们修改的代码就在ID里,处理鼠标事件的源码处理鼠标事件的函数查找下源码的这个0事件可以看到到ME对象的值为0,结合源码可以看到0为鼠标事件,当为鼠标事件的时候,把的值改为0,然而我们并没有在源码中看到这个0是代表什么事件,那么大概率是离职小伙伴的自定义事件。从上面截图也可以看到有几个的事件被或者标记上清除,那么接下来我们看看,根据源码层和层的定义可以看到这个是一一对应的,并且根据称很容易知道,这几个是什么行为NAI所以结合上面的解读,我们就知道了在鼠标事件时,把鼠标事件的值改为0,并且,如果是(悬停)相关的行为要么就返回不让继续往下执行事件分发,要么就直接清理掉。





    为了更好的验证问题,我自己动手写了一个简单的应用,主要代码如下:界面然后用进行调试,点击底部五个的按钮点击事件堆栈:根据堆栈信息发现事件分发的起点是_的_PDP方法然后切换我们的设备,并且根据的堆栈信息,逐个在方法入口处打下断点,看看是哪步导致没有往下走发现在事件时找到了在调用这个方法时为空,被了。那再看看正常手机是什么情况这里可以看到正常的手机这个对象是不为空的,那么接下来看看这个是什么时候被添加,或者是什么时候被移除了。通过AS的搜索引用工具,发现有处和一处,那么很简单,这几处都下个断点。看看真机是怎么走的。确在D事件的时候,添加了这个对应的。那再看看我们的设备是什么情况,一通调试下来,发现并不会进这个方法,于是跟着堆栈往上找,发现D事件时这PA方法返回了导致不去添加这个。这个PA为什么返回呢继续进入这个方法内部于是我们发现这个的值为0,不匹配所有的情况,进入分支,返回。看到这个=0,我们立马联想到源码里的S强制赋值为0的情况,这个也对应了中获取到为空的情况。就是下图的源码接下来,我想通过把这个值强制改掉,重新生成,然后推进我们的设备。通过AS导出设备中这个模块对应的(),然后打开,搜索导出函数





    M2T,结合源码进行解读。[]和[]地址相差6个指针从结构体看也是差6个指针位●结合上面两张源码和的伪代码可以看到[]=2=0,所以这里是对字段进行赋值;●S和字段在内存空间的布局相差6个指针,那么[]=0即为对S进行赋值;●-F|=0没有任何意义,则被编译器化了;既然知道了[]就是对S进行赋值,那么我们来改改看。可以看到[]对应的是这行汇编代码,改它!!





    然后到这里我遇到了一个问题,的不支持苹果M1MAX的M。既然这样那就直接改源码,然后把推进去替换掉。改完以后初始化环境,然后编译一下这个模块然后把进手机,接下来重启手机,再次打开我们自己编写的应用测试然后我们设备的这个方法就进来了,也确可以点击了,然后我们去验证一下其他原生点击和V的点击。经过一番测试发现其他都正常的,但是WV不能点击跳转了。由于WV也是原生事件转换成的事件的,所以这几个事件不给肯定也会产生影响。所以把这个事件也给分发下去。重新编译并推入手机,然后WV的世界也恢复正常了。总结:通过编写应用,然后在T(的点击回调)事件做调试,查看正常手机的堆栈,可以很容易的找到点击事件的源头,然后在整个堆栈都下断,再由我们的设备来触发点击,就能找到和真机的区别在S的值导致了事件时没有把事件添加进去,然后事件时发现容器内没有事件的记录,就抛弃了这次事件,进而导致没有点击事件的回调。在翻看源码的时候我们也发现这个值被强制赋值成0,那么把它改掉,问题就能解决了,至于后面的WV也是一样只要做一个简单的尝试,看看鼠标连上手机后是否正常点击,然后我们源码把哪几个事件丢弃了,还原一下。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|山东001在线 ( ICP11027147 )

    GMT+8, 2026-4-4 11:10 , Processed in 0.053764 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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