算法助手使用教程_junge-Y的博客-程序员宝宝_算法助手

技术标签: 安卓  Xposed  开发工具  android  hooks  

算法助手官方教程

前言

自从发布算法助手以来,收到了许多的反馈,其中有很多大佬的宝贵建议,也有很多小白的使用求助,因为平时也没有太多的时间,一一回复肯定是不现实的,所以写下此篇教程,希望能够对大家有所帮助。

这里也给没用过算法助手的兄弟们再介绍一下算法助手,文档尾部也会放下载地址!

算法助手是我们开发的一款运行在Android平台上基于Xposed的安卓调试工具,配合Xposed(需要Root),通过一系列Hook,反射操作,进行应用的安全测试,调试分析,代码定位,是一款不错的调试工具。

基础使用教程

步骤一:激活模块

1、由于该程序是个xposed模块,所以自然是需要先激活模块,本教程默认各位看官已有Xposed环境,将不进行xposed的安装讲解。

2、这边以Lsp框架为例子,启动算法助手模块,并在作用域中勾选你要Hook的App(经典Xposed只需要直接激活模块)

3、模块激活成功后,标题信息将显示“算法助手”,若未激活,则显示红字字体“模块未激活”

Tips:(部分机型和框架,可能会出现激活后显示未激活的情况,如果您确认已经激活,可试着直接使用)

1CF80240D5D82864774FBD4005BCEE5A.jpg68395BD2ED8E44C784EC60BCC1819025.jpg

步骤二:算法助手里打开开关

1、在算法助手中,在应用列表里,选择需要Hook的app,点进去以后,将总开关打开(不打开的话,所有的配置都不生效)

2、总开关打开以后,打开需要使用的相关功能的开关,例如"弹窗定位"

3、勾选完毕以后,运行被Hook的App

4、回到算法助手,切换到日志列表,一一点进去,可以看到详细的日志信息。

Tips:(安卓11的用户,被Hook的app需要开启存储权限,且没有开启存储重定向,才能正常写出日志)

A152AE034BA271010C2095893D62D02A.jpg45BC524A35506B86500E8E152CBF1F7D.jpg

C4DBBB2C256217C7D1D63B46858356C8.jpgC5C15466D1AE8C6086A98CB5967C2812.jpg757AB6FF53A02E7F92052EE2D54D841D.jpg

步骤三:堆栈分析与代码定位

堆栈的介绍

这个步骤,有开发经验的开发人员可以跳过,调用堆栈对于开发人员来说是再熟悉不过的了,毕竟你们敲了一整天的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在编译后,会抹去源文件名,以及行数信息,所以堆栈分析只能当成辅助工具,不必过度依赖,学会怎么通过代码逻辑去分析代码才是重点

4A2A01016AF398BEB2DC0F73C4B6BD5D.jpgY~0_DAE5UGOVPL_T9MKPE3V.png

进阶使用教程:自定义Hook的使用

Hook,其实可以理解为拦截函数,拦截到函数以后,你想修改返回值,或者不让他执行,都可以

在算法助手选择app以后,在功能列表拉到最后,有个"添加自定义"按钮,点进去以后,进入到配置界面,然后进行hook配置

package com.junge.test;

import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public String test(String name) {
        return "你好:" + name;
    }

    public void onResume() {
        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格式的时候,参数类型务填写完整,包括分号。

8D7CF32C4E5F66BEA88418E12825D250.jpgE884BEF591D66AA94DE1492A3693E6FE.jpg2E0D5B4A3064A864D39585716513A048.jpg

结语

好了,教程到此结束,如果你也跟我一样,对技术有着浓厚的兴趣,我们可以一起交流学习。

如果在软件过程中,遇到什么问题可以进入官方交流群进行探讨

同时欢迎大家提出宝贵的意见!

QQ:757456456

email:[email protected]

QQ交流群:1064330788

算法助手1.7版下载地址:https://wwa.lanzoui.com/io9Qkrmhndc

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014645251/article/details/119030982

智能推荐

微信小程序适配iphoneX,XR,12的底部安全区域(底部小黑条)_summer_my_sunshine的博客-程序员宝宝_小程序iphonex兼容底部

问题描述:在项目页面开发过程中,有些页面的按钮是需要固定在页面底部的(比如电商项目的确认订单页);如果直接设置bottom:0,那么在iphonex,xr,12等机型,就会出现下面左图的问题,按钮区域距离底部太近了,用户体验就会很差,按钮也不好点击。解决思路:为了适配所有的手机机型,我们需要获取到底部小黑条的高度,给固定在底部的view设置padding-bottom,增加高度;(有些手机默认是没有底部这个区域的,没有的话padding-bottom就设置为0)解决方法:1.首先,..

第三章 springmvc 视图及REST_Jason.Yang_Tom的博客-程序员宝宝

本章目标视图和视图解析器 进行重定向和转发 Spring表单标签 REST CRUD什么是视图解析器SpringMVC用于处理视图最重要的两个接口是ViewResolver和View。ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对象呈现给客户端的是View对象本身,而ViewResolver只是把逻辑视图名称...

如何实时查看mysql当前连接数_classicbear的博客-程序员宝宝_查看mysql数据库连接数

如何实时查看mysql当前连接数? 1、查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist2、只查看当前连接数(Threads就是连接数.):./mysqladmin  -uadmin -p -h10.140.1.1 status、查看当前所有连接的详细资料:mysqladmin

std::string 类中find_first_not_of ()函数_liu44235的博客-程序员宝宝_find_first_not_of

使用string的empty()函数判断字符串是否为空,但不能判断是不是“_ ”(_ 表示空格)或者连续空格“___”;此时可以使用

让乔布斯告诉程序员:为什么技术思维不值钱?_萌眼牛牛 Lah的博客-程序员宝宝

之前,我看过《乔布斯传》这本书籍,然后最近这几天在读《成为乔布斯》这本书籍。说实话,《成为乔布斯》确实比《乔布斯传》这本书写好的,所以,对于大家如果喜欢乔布斯,或者想读乔布斯相关书籍的同学,可以读一读《成为乔布斯》这本书。在读《成为乔布斯》的时候,我看到这么一段话:家酿计算机俱乐部成员对他俩(乔布斯和沃兹)的作品反应平平。电脑之所以有趣,是因为用户可以设计、组装自己的机器,这也是为什么俱乐部的名字...

Debian11镜像源_游戏猫的博客-程序员宝宝_debian镜像源

腾讯云镜像站deb https://mirrors.tencent.com/debian/ bullseye main non-free contribdeb-src https://mirrors.tencent.com/debian/ bullseye main non-free contribdeb https://mirrors.tencent.com/debian-security/ bullseye-security maindeb-src https://mirrors.tencent

随便推点

Python抓取图片_hzp666的博客-程序员宝宝

本文系作者「无名小妖」的第二篇原创投稿文章,作者通过用爬虫示例来说明并发相关的多线程、多进程、协程之间的执行效率对比。如果你喜欢写博客,想投稿可微信我,有稿费酬劳。假设我们现在要在网上下载图片,一个简单的方法是用 requests+BeautifulSoup。注:本文所有例子都使用python3.5)单线程示例 1:get_photos.pyimport osimport timeimport u...

ARM家族大检阅_weixin_30349597的博客-程序员宝宝

首先列举下几个名称: 6410 2440 210 A8 ARM9 ARM11 ARMv7 ARMv6进行分类:1、芯片名称:2440 6410 2102、ARM核:A8 ARM9 ARM113、指令架构ARMv6 ARMv7--------------------------------------------------------------芯片,...

使用Xcode进行单元测试 —— 环境配置_cy-app的博客-程序员宝宝

转自 http://42.96.169.71/blog/2013/01/15/shi-yong-xcodejin-xing-dan-yuan-ce-shi/单元测试,是保证产品质量的一个好方法。 移动产品会经常的更新升级,每次版本更新的时候,都需要花费大量的精力来进行测试。 使用单元测试,则可以减少这类重复性的工作。 能够让测试变得更加自动化并且大幅提高测试的效率。 Xcode 为我们

Android_硬件加速_寒弦的博客-程序员宝宝

Android中的硬件加速前言从andoroid 3.0开始,Android的2D渲染管线可以更好的支持硬件加速。硬件加速是使用GPU进行View上的绘制操作。硬件加速的级别applicationactivitywindowview为何有多级别的硬件加速硬件加速可以带啦性能的提升,为什么android不直接全部使用硬件加速,而是区别出来多级硬件加速呢?因为并不是所有的2D图形操作都支持硬件

Android中Handler的sendEmptyMessage的理解_ElvisDu的博客-程序员宝宝_android sendemptymessage

在写代码的过程中,碰到一行代码不理解,去看了下源码,来记录下。mHandler.sendEmptyMessage(0);sendEmptyMessage这个方法之前没有碰到过,查阅源码后发现: /** * Sends a Message containing only the what value. * * @return Returns true

滑动菜单栏之开源项目SlidingMenu的使用_非著名程序员的博客-程序员宝宝

一、SlidingMenu简介      相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作。很多优秀的应用都采用了这种界面方案,像facebook、人人网、everynote、Google+等等。如下图所示:           Google+界面效果图