算法助手使用教程
算法助手官方教程前言自从发布算法助手以来,收到了许多的反馈,其中有很多大佬的宝贵建议,也有很多小白的使用求助,因为平时也没有太多的时间,一一回复肯定是不现实的,所以写下此篇教程,希望能够对大家有所帮助。
这里也给没用过算法助手的兄弟们再介绍一下算法助手,文档尾部也会放下载地址!
算法助手是我们开发的一款运行在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(UnknownSource: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类搜索.line24
使用Jadx查看java代码,也可以看到24行调用了makeText
Tips:目前MT管理器转为java代码是无法自动识别行号的
Tips:有许多app在编译后,会抹去源文件名,以及行数信息,所以堆栈分析只能当成辅助工具,不必过度依赖,学会怎么通过代码逻辑去分析代码才是重点
进阶使用教程:自定义Hook的使用Hook,其实可以理解为拦截函数,拦截到函数以后,你想修改返回值,或者不让他执行,都可以。
在算法助手选择app以后,在功能列表拉到最后,有个"添加自定义"按钮,点进去以后,进入到配置界面,然后进行hook配置
packagecom.junge.test;importandroid.os.Bundle;importandroid.widget.Toast;importandroidx.appcompat.app.AppCompatActivity;publicclassMainActivityextendsAppCompatActivity{publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}publicStringtest(Stringname){return"你好:"+name;}publicvoidonResume(){super.onResume();Toast.makeText(this,test("张三"),1).show();}}还是以这个代码为例子,进入该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格式的时候,参数类型务填写完整,包括分号。
结语好了,教程到此结束,如果你也跟我一样,对技术有着浓厚的兴趣,我们可以一起交流学习。
如果在软件过程中,遇到什么问题可以进入官方交流群进行探讨
同时欢迎大家提出宝贵的意见!
QQ:757456456
email:757456456@qq.com
QQ交流群:1064330788
算法助手1.7版下载地址:https://wwa.lanzoui.com/io9Qkrmhndc
精灵标记助手(Colabeler)超详细使用教程
在这之前图片需要经过筛选,提高效率
一、精灵标记助手介绍:现在人工智能领域需要标注好的数据情况很多,图片、视频、文本。无论是分类问题还是物体识别问题都需要标注。精灵标记助手相比较其他工具而言上非常简单方便的,目前支持Windows/Mac/Linux平台,根据自己的系统下载相对应的版本,Mac的话可以到MacStore中搜索colabeler下载即可。相比于LabelImg,RectLabel这些标注工具。支持图片标注、文本标注、视频标注。非常强大并且是免费的。二、软件下载:软件官网:点击打开下载后常规安装即可三、图像标记教程:1、打开精灵标记助手,创建图像位置标记项目:2、点击新建3、选择位置标注5、项目名称为:标记物体种类的编号如:x11x1图片文件夹为:图片文件夹的路径如:D:/user/陈皮分类值:标记物体种类的编号如:x11x16、选择适合的标记框(建议记住相应的快捷键)矩形框(矩形框的适配性更好,推荐使用):多边形(标记更加精准,适配性不够):曲线框(与多边形框类似,但标记难度更大):5、框选后选择标注信息:一般选择预定义的信息,一般每个种类只需要选择一次6、无论用什么标记,标记完每一张图片后成后都需要使用保存,点击下方勾保存7、按照这样的方法把一个种类标记完成(切记每标记完一张图片都要点击勾保存)8、依靠左右快捷键,快速查看已标记的图片,确认无误后导出8、保存导出:输出方式一般选择:XML保存位置一般选择:图片文件夹然后点击确认导出保存后的标记文件会在图片文件夹里生成一个output文件夹