善领官方网站发布的DSA软件(安卓版)及网络上流传的其他版本,均发现手势操作会导致进程崩溃的问题。查询相关网页信息都提出是官方软件本身的问题无法解决。
        尝试使用逆向工程跟踪调试了一下,发现善领的DSA整个project较简单且手势相关function并没有封装到内部so。稍微修改后问题解决。

简单记录步骤如下:

1.确定DSA在Android中进程名称,方便后面跟踪。
                -- PC端运行DDMS在手机正常连接后操作手机打开DSA软件,可发现多出了com.dsa的活动进程

2.开启打印logcat,操作DSA软件的手势功能触发异常。来最终确定程序异常的真正位置。
                -- PC端开启Logcat,过滤方式为只追踪com.dsa,操DSA软件故意触发手势异常退出 。
                    在打印信息中可发现手势操作时com.dsa进程会引发系统错误,位置在package的com.dsa.q类的run()方法
                     (***非官方版DSA的logcat信息中类名略有不同,在com.dsa.t类的run()方法***);

                -- 被强制退出的 Activity UI是MainPage类,也就是DSA软件主界面。

  

3.确定了异常位置后就是反编译出此位置的java代码,查看代码逻辑
                -- 用7z或rar直接打开DSA apk,使用dex2jar工具将虚拟机执行档classes.dex转换成jar包。
                   使用JDK最终反编译jar成java源代码。 在com.dsa package中找到MainPage.class和q.class(或t.class)
                -- q.class(t.class)只是一个简单的定时器工具类,它的run()方法会按排程执行MainPage.i()对象的dismiss()
                    是这个地方引起进程崩溃的。

 

MainPage.class中和触屏手势相关的代码在凭经验可断定在onTouchEvent()方法中,查看代码原理为
                   通过坐标轨迹判断是否为←↑↓→四个手势,如果是则通过service做相应的音量减小,音量增大,上一首歌,
                    下一首歌等动作。
                --  截图是MainPage.class音量增大相关代码块,流程为调用W()方法初始化PopWindow X对象-->X对象显示
                    上箭头图标--> 创建 q.class(t.class)对象-->使用Timer延迟long 800后执行q.run()方法关闭PopWindow X
                    -->+系统音量-->判断当前音量是否最大,非最大则调用serivce播放后台提示音音量增大,如最大则调用
                    serivce播放后台提示音音量已最大。
                -- 再查看W()方法代码发现只是对Popwindow X的初始化动作为主,而且在代码最开始有if(X!=null) X.dismiss()
                    关闭Popwindow

      
          

4. 了解代码具体逻辑后,尝试以最小改动流程避开bug 
                --  从MainPage类中可以知道调用q.class(t.class)主要作用是延迟执行dismiss来关闭手势操作后的
                    显示的箭头窗口(popwindow X);
                    尝试去掉调用q.class和定时器相关代码重新编译观察还是否程序手势操作异常
                    在上图红框区代码中去掉如下:
                            t localt4 =new t(this);
                            new Timer(false).schedule(localt4,800L);
                   去掉以上代码后关闭PopWindow X的动作自己要添加
                    在上图红框区代码中最后一行添加:
                            W();
                 -- 其余三种手势操作代码的修正方法类似 
 
         5. Fix方法确立以后,后面是真正unpack apk 和 fix smali 机器码

--  使用apktool解包DSA apk在解包目录smali/com/dsa中编辑MainPage.smali
                --  调用q.class和定时器相关java代码对应的smali机器码代码如下灰色部分,删除掉。

     

--  最后添加调用W()关闭PopWindow X,对应的smali机器码最后添加如下代码。
                    至于为什么是这两行可以在MainPage.class里先找到原来调用W();的位置,拷贝过来。

--  其他三种手势修改smali机器码方法类似
          6. smali 机器码修改完就可以再编译打包成apk了

--  使用apktool打包之前解包的DSA目录,将生成的新apk签名后再安装到手机就OK啦。
    
          修改好的DSA APK有放到网盘http://pan.baidu.com/s/1mggIfdm
                --  善领DSA官方版: 1.添加720,1080高清分辨率;2.修复手势操作崩溃问题    
                --  善领DSA修改版: 1.添加720分辨率;2.修复手势操作崩溃问题           

Android逆向工程实例 -- 善领安卓版DSA APP手势操作bug修复相关推荐

  1. 圣才e书题库e考安卓版专用手机APP考试软件下载安装

    安卓版专用APP   ​     安装方式一:扫描上面的二维码图片下载安装   安装方式二:点击链接下载安装 https://www.pgyer.com/yG8Z

  2. android smb 图片,谷歌放出安卓版Samba客户端 但仅支持SMBv1

    原标题:谷歌放出安卓版Samba客户端 但仅支持SMBv1 数日前,谷歌突然放出支持安卓系统的开源Samba客户端应用,SMB协议帮助安卓用户方便都通过SMB通信协议,访问在局域网上的共享文件和打印机 ...

  3. android 人生日历,人生日历安卓版

    人生日历安卓版游戏介绍 人生日历安卓版是一款桌面日历手机软件,专为广大用户提供生活万年历查询等服务,人生日历安卓版其界面设计清新简洁,支持自由换肤,在细节方面的设计处理十分贴心.是一款非常不错而且很实 ...

  4. 炉石传说android手机版本,炉石传说安卓版下载gpu型号选择详细讲解介绍

    炉石传说安卓版下载gpu型号选择详细讲解介绍.炉石传说手机版已经正式上线,炉石传说IOS版以及安卓版都已经正式开放下载.好多小伙伴对于怎么下载以及下载gpu型号不知道该怎么选择,兔玩网小编就为大家带来 ...

  5. android爱哥的日历,安卓版人生日历日子使用方法

    今天给大家介绍下安卓版人生日历日子使用方法!感兴趣的朋友来看下吧! 人生日历的日子,设计成四叶草标识,是想告诉您,生活可以像四叶草一样青春.美好.幸运.人生日历的日子能干什么呢?小乐哥来告诉您,日子可 ...

  6. android 新闻小程序,微信安卓版7.0.12内测曝光 小程序被加强优化

    中关村在线消息:最近,微信发布了最新的Android beta 7.0.12更新,修复了一些已知的问题.这次的Android测试版有32位和64位版本,但仍然没有暗黑模式.腾讯微信团队还向开发者发布了 ...

  7. 模拟飞行 android,RFS模拟飞行pro安卓版

    RFS模拟飞行pro安卓版是一款十分真实的飞行与驾驶体验,在这里更多的危险也即将要发生了,充满了危机的时刻.更加真实的冒险也在等待你的完成哦,属于你的热血游戏与体验模式,全新的与充满了危险的时刻也在等 ...

  8. android 360相机,相机360app安卓版

    全球9000万用户使用的Camera360,安装在你的智能手机上能创下多少记录? 小编今天就为大家带来这款安卓手机照相软件,希望大家能够喜欢,赶紧下载吧! 相机360安卓版介绍: Camera360[ ...

  9. android循环录制,按键精灵安卓版为什么我录制的脚本无法循环

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 按键精灵安卓版为什么我录制的脚本然后设置了无限循环为什么会停下来,求助 代码如下 Delay 1935- TickCount() TouchDownEve ...

  10. win10 android软件下载,windows10模拟器安卓版

    在自已的手机上体验一个虚拟的电脑界面是一种什么样的感受,在这款windows10模拟器安卓版游戏中,玩家可以通过这款游戏来更好的感受游戏中的魅力,游戏的玩法非常的奇特,手机上的虚拟电脑界面,你还能够通 ...

最新文章

  1. 计算机绘图 招聘,计算机绘图-网课答案.pdf
  2. 英文linux学习app,Linux应用软件,Linux Application Software,音标,读音,翻译,英文例句,英语词典...
  3. java高并发(十九)死锁、spring线程安全
  4. 使用STM32的USB模块中后对USB缓冲区的认识
  5. Google搜索技巧总结
  6. Kubernetes Metrics-Server
  7. Arcgis Javascript那些事儿(十二)——geometry service几何服务
  8. 适合android手机 pdf阅读器,手机版pdf阅读器有哪些 这五款软件一定有适合你的
  9. 英雄联盟更新完服务器维护,英雄联盟lol今天维护到什么时候结束 停服更新期间玩家是无法进入游戏...
  10. 基于非结构网格的仿真——太湖之光上的巨大挑战
  11. 【智能优化算法-正弦余弦算法】基于反向正弦余弦算法求解高维优化问题附matlab代码
  12. 这个地方沸腾,高手争雄,至尊大决战,从天上杀到地下,又从地上打到云霄上!
  13. Apk脱壳圣战之---脱掉“梆梆加固”的保护壳
  14. 电脑桌面点击计算机反应迟钝,win7系统点击桌面图标反映迟钝影响整体运行速度怎么办【图文】...
  15. quill光标位置插入html,quill编辑器+word文档上传,插入指定位置
  16. 根据year年的第week周,查询第week周的起止时间
  17. Mac系统brew install 安装报错 Error: Failure while executing
  18. 如何运用VR3d模型线上展示构建博物馆展厅与展馆
  19. Windows10远程桌面无法复制粘贴问题
  20. 月GMV超3000万,中小商家如何跻身快手电商头部?

热门文章

  1. 计算机科学和机器学习中的代数、拓扑、微积分和最优化理论
  2. mysql双机热备份
  3. 初学者CAD画矩形如何定义尺寸?
  4. RS232引脚定义及串口通信中与USB等转接
  5. win7计算机不显示dvd,win7系统不显示光驱盘符的解决方法
  6. 《物联网开发实战》05 系统实例:怎样设计一个简易物联网系统?(学习笔记)
  7. 浅析Java设计模式——观察者模式
  8. 基于证据理论的多源数据融合仿真实验matlab代码(源码)
  9. Vivado ROM IP核
  10. mysql bootstrap pxc_MYSQL PXC