算法助手pro这是一款安卓手机上的调试工具,此款软件是基于Xposed使用的,只需要搭配Xposed并使手机完成ROOT,就能完成一系列的HOOK操作,用于手机的调试分析等工作,都是一个不错的工具。
算法助手是我们开发的一款运行在Android平台上基于Xposed的安卓调试工具,配合Xposed(需要Root),通过一系列Hook,反射操作,进行应用的安全测试,调试分析,代码定位,是一款不错的调试工具。
基础使用教程
步骤一:激活模块
1、由于该程序是个xposed模块,所以自然是需要先激活模块,本教程默认各位看官已有Xposed环境,将不进行xposed的安装讲解。
2、这边以Lsp框架为例子,启动算法助手模块,并在作用域中勾选你要Hook的App(经典Xposed只需要直接激活模块)
3、模块激活成功后,标题信息将显示“算法助手”,若未激活,则显示红字字体“模块未激活”
Tips:(部分机型和框架,可能会出现激活后显示未激活的情况,如果您确认已经激活,可试着直接使用)
步骤二:算法助手里打开开关
1、在算法助手中,在应用列表里,选择需要Hook的app,点进去以后,将总开关打开(不打开的话,所有的配置都不生效)
2、总开关打开以后,打开需要使用的相关功能的开关,例如"弹窗定位"
3、勾选完毕以后,运行被Hook的App
4、回到算法助手,切换到日志列表,一一点进去,可以看到详细的日志信息。
Tips:(安卓11的用户,被Hook的app需要开启存储权限,且没有开启存储重定向,才能正常写出日志)
步骤三:堆栈分析与代码定位
堆栈的介绍
这个步骤,有开发经验的开发人员可以跳过,调用堆栈对于开发人员来说是再熟悉不过的了,毕竟你们敲了一整天的Bug,一跑起来全是这玩意儿对吧(手动滑稽)
在日志详细的尾部,可以看到调用堆栈,这个调用堆栈是干嘛用的?该怎么去理解他?
实际上,调用堆栈的结构是这样子的:类名.方法名(源文件名:行数)
那怎么看呢?从下往上看!!!
类1.方法1(类1.java:100)
类2.方法2(类2.java:55)
类3.方法3(类3.java:76)
比如这个例子:
1、首先调用了类3的方法3
2、然后调用了类2的方法2
3、最后调用了类1的方法1
那么,我们已知,在类3的方法3里调用了方法2,可是,方法3的代码可能有非常多,我怎么知道它在哪里调用了方法2呢?
那么这时候行数的重要性就显示出来了,通过行数可以看到,在类3的76行,调用了方法2
堆栈实战分析
还是刚刚的例子,弹窗定位的日志信息,一般情况下,我们只需要看最后几行就可以了
LspHooker_.makeText(Unknown Source:18)
com.junge.test.MainActivity.onResume(MainActivity.java:24)
android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1454)
android.app.Activity.performResume(Activity.java:8050)
最后2行,是android系统类,我们用不到,也不需要去看
从前2行看,我们可以看到,在MainActivity的onResume方法里调用了makeText,通过(MainActivity.java:24),可以看出MainActivity类的24行中调用了makeText
接下来我们反编译app,验证一下,我们在smali代码中找到MainActivity类搜索.line 24
使用Jadx查看java代码,也可以看到24行调用了makeText
Tips:目前MT管理器转为java代码是无法自动识别行号的
Tips:有许多app在编译后,会抹去源文件名,以及行数信息,所以堆栈分析只能当成辅助工具,不必过度依赖,学会怎么通过代码逻辑去分析代码才是重点
进阶使用教程:自定义Hook的使用
Hook,其实可以理解为拦截函数,拦截到函数以后,你想修改返回值,或者不让他执行,都可以 。
在算法助手选择app以后,在功能列表拉到最后,有个"添加自定义"按钮,点进去以后,进入到配置界面,然后进行hook配置
还是以这个代码为例子,进入该Activity后,会调用test函数,并传入"张三",并弹出提示,而test函数,返回的是"你好+姓名",我想通过hook,去修改它的返回值,改为"hook返回值成功",怎么做?
配置如下:
java格式:
类名:com.junge.test.MainActivity
方法名:test
参数类型:java.lang.String
返回值:hook返回值成功
smali格式:
类名:Lcom/junge/test/MainActivity
方法名:test
参数类型:Ljava/lang/String;
返回值:hook返回值成功
Tips:使用smali格式的时候,参数类型务填写完整,包括分号。
1、Md5,Sha等信息摘要算法(MessageDigest类)
2、AES、DES,RSA等秘钥算法(Cipher类)
3、Hmac等含有秘钥的哈希算法(Mac类)
4、对话框的定位(Dialog类)
5、Log捕获(LOG类)
7、拦截程序退出(System以及其他类)
8、justTrustMe升级版(可高效自动定位混淆后的okhttp)
9、文件访问记录(File类)
10、自定义Hook,可自行定义hook类,可设置返回值,可拦截执行
11、……后续会不断进行增加
网上相似的工具也不少,首先就是Inspeckage,堪称神器,还有比如"珍惜"大佬的Encryptstack,还有其他大佬们的各种工具,他们的工具也都很好用
但我认为,工具吧,不是有一款就够了,即使大体功能差不多,甚至功能更少,但是,在使用方式,界面风格总是各有不同的,给大家提供更多的选择,难道不好吗?
自定义Hook是否支持加固app
理论上支持一些免费版的加固
我自己的真机一部是华为nova2,安卓7,已root,装的xposed,可以正常使用。
另一部真机是小米8SE,安卓10,装的是EdXposed,正常使用
模拟器我用的是雷电4,安卓7,装的xposed,正常使用
其他系统没有更加详细的测试,大家可自行测试,如果不支持,可以评论,或者联系我。
1、设备上需要安装xposed环境,并激活模块
2、启动算法助手,选择需要hook的目标程序,应用开关打开,相应的功能自行选择
3、运行目标程序,回到算法助手,即可在日志面板看到相关信息
注意事项:插件是通过读写手机存储目录的文件,保存插件的配置信息,使用GreenDao存储相关的日志,所以被Hook的目标程序需要有相应的读写权限
1、模块未激活
设备不包含任何Xposed环境
解决方案: 若您的设备已经Root,可在安装Xposed环境后重试。若您的设备没有Root,可通过安装BlackBox、virtual xposed、VMOS等虚拟环境使用
Xposed环境中未勾选激活算法助手,或激活后未重新启动设备
解决方案: 在Xposed中勾选激活算法助手,并重启设备
Lsposed环境中,未勾选任何作用域
解决方案: 在Lsposed 激活算法助手,并勾选作用域"系统框架",并重启设备
无法识别是否激活的框架,如:应用转生
解决方案: 由于这类框架,无法Hook自身,导致无法识别是否正常激活,但是功能正常使用
未适配您的虚拟框架
解决方案: 换一个虚拟框架,或联系作者对您使用的框架进行适配
2、系统服务未启动
未勾选作用域"系统框架"
解决方案: 在Lsposed 激活算法助手,并勾选作用域"系统框架",并重启设备
未适配您的虚拟框架
解决方案: 换一个虚拟框架,或联系作者对您使用的框架进行适配
3、系统服务版本错误
一般出现在更新算法助手时才会出现的错误
解决方案: 重新启动app后即可解决该问题
4、日志列表为空
Lsp模块作用域未选择任何App
解决方案:lsp用户除了勾选"系统框架外",还需要勾选被Hook的APP,如:您需要监听“浏览器”的加密算法,在lsp中,除”系统框架“外,您还需要勾选”浏览器“
未勾选任何功能或所选功能不具备日志输出
解决方案: 并不是所有功能都会进行日志输出,如:隐藏Xposed,可尝试勾选其他功能
目标App存在对抗
解决方案: 被Hook的目标若有较强的Hook检测,可能会导致模块不起作用,可尝试Hook其他App来验证该问题。
模块未生效
尝试重新激活算法助手或重启设备
其他原因
可能是机型等其他原因导致的算法助手不起效,可联系作者提供反馈
富士施乐打印机是一款功能强大、操作简便的打印工具,将手机上的文件、照片和文档轻松打印出来。无论用户身处办公室、家中还是外出途中,只需简单几步操作,即可实现快速、高质量的打印体验。
Cross DJ是一款功能全面、性能出色的DJ打碟软件,用户可以在软件内直接进行编曲,利用软件提供的工具和音效创作出个性化的音乐作品。允许用户根据自己的需求和电脑性能来设置声卡参数,以获得最佳的音质和性能表现。
Volume Control是一款功能全面的音量控制软件,允许用户对手机中的所有音量类型进行细致控制,包括但不限于铃声音量、媒体音量、通话音量、闹钟音量以及系统提示音量等。用户可以根据自己的需求,自由地调整每个音量类型的具体参数。
proshot专业相机软件,该软件的界面与功能模拟了专业的单反相机的效果,通过这款软件可以让手机拍出更加专业的效果,让喜欢拍照的朋友在手机上感受专业单反的效果。