吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4892|回复: 17
收起左侧

[Android 原创] Android几种特殊绘制方框方法

  [复制链接]
Shocker 发表于 2022-2-14 17:08
本帖最后由 Shocker 于 2022-2-14 17:13 编辑

简介

除了之前介绍的用悬浮窗绘制方框之外,还有几种比较特殊的绘制方框的方法.

可执行文件

首先需要搭建aosp环境,雷电模拟器以Android5.1为例

编译aosp可以参考这个视频:

Android开源项目AOSP

编译系统后,在external目录将test拷贝过来.

代码逻辑如下:

1.创建surface

sp<SurfaceControl> surfaceControl = client->createSurface(String8("test"),
                                                        display.w, display.h, PIXEL_FORMAT_RGBA_8888, ISurfaceComposerClient::eHidden);

2.设置surface属性

SurfaceComposerClient::openGlobalTransaction();
surfaceControl->setLayer(100000);
surfaceControl->setPosition(0, 0);
surfaceControl->show();
SurfaceComposerClient::closeGlobalTransaction();

3.结合skia绘制

SkCanvas surfaceCanvas(surfaceBitmap);
SkPaint paint;
SkRect rect{i, i, display.w - i, display.h - i};

paint.setColor(SK_ColorRED);
paint.setStrokeWidth(2);
paint.setStyle(SkPaint::kStroke_Style);
surfaceCanvas.drawRect(rect, paint);

示例代码见github:

https://github.com/PShocker/Android_executable_draw

注意,每个Android版本的skia代码都可能不一样,所以该示例编译的文件仅仅适用于Android5.1

Hook Surfaceflinger进程的eglSwapBuffers函数

替换Surfaceflinger进程的Surfaceflinger.so的eglSwapBuffers为自己的new_eglSwapBuffers函数,并在new_eglSwapBuffers的函数内调用opengl相关函数实现绘制.

EGLBoolean new_eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
{
    LOGD("New eglSwapBuffers\n");
    // glClearColor(0, 255, 0, 1);
    // glClear(GL_COLOR_BUFFER_BIT);

    eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
    eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
    // LOGD("EGL_WIDTH:%d\n",w);
    // LOGD("EGL_HEIGHT:%d\n",h);

    glUseProgram(gProgram);
    glLineWidth(2);
    glEnableVertexAttribArray(0);
    // glVertexAttribPointer(gvPositionHandle, 2, GL_FLOAT, GL_FALSE, 0, gTriangleVertices);
    // glEnableVertexAttribArray(gvPositionHandle);

    // glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
    // glDrawArrays(GL_LINE_LOOP, 0, 4);
    // drawRect(100,10,200,200);
    drawRect(0,0,200,200);

    return eglSwapBuffers(dpy, surface);
}

github示例:

x86模拟器版本:
https://github.com/PShocker/Android_hook_sf_draw_x86

arm64版本:
https://github.com/PShocker/Android_hook_sf_draw_arm64

参考:
https://blog.csdn.net/jinzhuojun/article/details/10428435
https://github.com/MelonWXD/ELFHooker
https://blog.csdn.net/jinzhuojun/article/details/9900105
https://github.com/android/ndk-samples/tree/main/hello-gl2

PC端建立透明窗口

将手机画面投屏到PC上或直接使用Android模拟器,由PC创建一个透明窗口覆盖到手机或模拟器画面上,所有绘制均在PC的透明窗口完成.

这里读取数据的方法可以是读取内存,拦截游戏数据包,解密直接获取坐标.

参考赶马人代码:
https://www.52pojie.cn/thread-1582463-1-1.html

某游戏模拟器绘制:
https://github.com/zhaoke1995/pubg-mobile-esp

免费评分

参与人数 8威望 +1 吾爱币 +28 热心值 +5 收起 理由
15808244862 + 1 + 1 用心讨论,共获提升!
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
woyucheng + 1 + 1 谢谢@Thanks!
lgc81034 + 1 谢谢@Thanks!
52jcool + 1 + 1 我很赞同!
赶码人 + 1 + 1 用心讨论,共获提升!
lyk1115 + 1 我很赞同!
debug_cat + 2 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Shocker 发表于 2022-2-14 17:55
莫问刀 发表于 2022-2-14 17:54
哈哈哈,AOSP编译?是拉大锯的粉丝?

之前编译Android5.1报错了,后来去b站搜,就搜到了
罗氏家族 发表于 2022-2-15 18:38
atlas77 发表于 2022-2-14 17:41
没搞明白这个有啥用,谁给科普下

王者荣耀人物绘制框架,就相当于开透视
Meiosis 发表于 2022-2-14 17:38
atlas77 发表于 2022-2-14 17:41
没搞明白这个有啥用,谁给科普下
debug_cat 发表于 2022-2-14 17:54
哈哈哈,AOSP编译?是拉大锯的粉丝?
mmost 发表于 2022-2-14 21:21
感谢楼主分享
雨之幽 发表于 2022-2-14 21:25
谢谢分享
52jcool 发表于 2022-2-14 22:26
收藏,学习,谢谢
se450 发表于 2022-2-14 22:42
6666,学习了
jamessteed 发表于 2022-2-14 23:16
收藏备用,感谢教导。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-20 11:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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