Dji Mimo APP逆向.3

对jar8的分析

先看结构

内部有对版本号码的判断,且打印log

Android x应该是对实现的包

和注解

什么是注解(Annotation)?注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”

下面随便看个代码,是关于尺寸的

package androidx.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.CLASS)@Target({ ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })public @interface Size { long max() default Long.MAX_VALUE; long min() default Long.MIN_VALUE; long multiple() default 1L; long value() default -1L;}
https://developer.android.google.cn/jetpack/androidx?hl=zh-cn

mimo的实现是很新的

package androidx.activity;
interface Cancellable{ void cancel();}

这个就是兼容的API

https://developer.android.google.cn/jetpack/androidx/releases/appcompat?hl=zh-cn

其实感兴趣的东西,都是在dji这样的东西里面放着

java没捣鼓明白,这是啥,结构和前面的包实现一样

数据类型

我们知道 Java 是强类型语言,在使用之前肯定已经确定了它的类型。而数据类型,无非就是基本数据类型和引用类型。它们对应的字节码,其实就是用它们的对应类型的英文首字母来表示的。(引用类型除外)

例如,s 代表 short , i 代表 int, l 代表 long ,f 代表 float,d 代表 double,b 代表 byte(不包括boolean),c 代表 char,a 代表 reference 引用。

加载和存储指令

我们知道,一个方法的运行,会在栈的栈帧中执行。方法中的变量称为局部变量,数的操作需要用到操作数栈。因此,加载和存储指令,就是数据在局部变量表和操作数栈中来回传输。

将一个局部变量加载到操作数栈:如 iload、iload_ 。表示加载的是 int 类型变量。

iload_ 后边带数字代表第几个 int 型变量。例如 iload_0 代表把第一个 int 型局部变量加载到操作数栈。

其他类型变量同上:lload ,fload ,dload,aload 。

将一个数值存储到局部变量表:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstore_,astore,astore_ 。

将一个常量加载到操作数栈:aconst_null,iconst_m1,iconst_,lconst_,fconst_,dconst_ ,bipush,sipush。

ldc 代表把 int、float、String类型常量从常量池中加载到操作数栈。ldc_w 代表宽索引。

ldc2_w 代表把 long 或 double 类型常量从常量池中加载到操作数栈。(宽索引)

这里需要说的是,int 类型根据数值的取值范围不同,而采用不同的字节码指令。

https://blog.csdn.net/qq_26542493/article/details/105988683

iconst_m1 代表 -1 ,

iconst_ 代表 0~5 。

bipush 代表 -128~127(byte取值范围),

sipush 代表 -32768~32767(short取值范围),

ldc 在 int 中代表 -2147483648~2147483647(int取值范围)。

贴个解释看看

反正这个里面就是一些对文件的操作,比如创建文件夹,适配地区代码

public static boolean a() { return (new File("/system/bin/su").exists() && b("/system/bin/su")) || (new File("/system/xbin/su").exists() && b("/system/xbin/su")); }

你看这个代码,它在判断什么?

public enum TextEffectType { A(170), B(181), C(190), D(200), E(211), F(220), G(240), H(250), I(251), J(260), K(270), L(271), M(280), N(281), O(290), P(291), Q(300), R(310), S(320), T(330), U(331), V(350), W(370), X(390), Y(391), Z(401), a(0), aa(410), ab(430), ac(431), ad(440), ae(451), b(10), c(11), d(20), e(21), f(30), g(31), h(40), i(41), j(50), k(51), l(60), m(61), n(70), o(71), p(80), q(81), r(90), s(101), t(110), u(111), v(121), w(130), x(140), y(151), z(160);

这个是一些关于文字的效果

网络封包

第一包看来一下,是监测性能的


public interface APIService{ @GET @Streaming k<ac> downloadFile(@Url final String p0, @Query("isDownload") final boolean p1); @GET("api/user/v3/{userId}/info") Call<Object> getUserInfo(@Path("userId") final String p0); @GET("/id={testId}") Call<Object> test(@Path("testId") final String p0);}

这个就有趣了,可以看到是一个下载服务,

逆向嘛,想象力很重要。

那就猜!这个是网络的包里面的,可以看到abc,这些东西没有意义,但是

是继承a的接口,a又是性能测量,所以很自然的想应该是一个性能相关的函数

所以,和我没有什么锤子事

从这里其实可以证实猜测

继续看,看见串了,400。

以及下面的安卓浏览器内核,我有空研究下应用层抓包

package com.dji.network.d;
import android.content.*;import android.database.sqlite.*;
public class d extends SQLiteOpenHelper{ public d(final Context context) { super(context, "download.db", (SQLiteDatabase$CursorFactory)null, 1); } public void onCreate(final SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("create table download_info(_id integer PRIMARY KEY AUTOINCREMENT, start_pos integer, end_pos integer, compelete_size integer,url char)"); } public void onUpgrade(final SQLiteDatabase sqLiteDatabase, final int n, final int n2) { }}

是和数据库相关的操作,可以创建一个SQL的数据库

还可以写数据,真的很不错

中间很多细节,先走马观花的看看

package com.dji.qsmcl;
public final class BuildConfig{ public static final String APPLICATION_ID = "com.dji.qsmcl"; public static final String BUILD_TYPE = "release"; public static final boolean DEBUG = false; public static final String FLAVOR = ""; public static final int VERSION_CODE = 1; public static final String VERSION_NAME = "1.0";}

这个是关于ML的一些结果标签


人的精力真的有限。。。现在我都不想看了。

(0)

相关推荐

  • day05_运算符入门

    2020-11-19 21:31:42  阅读:6  来源: 互联网 运算符概述 运算符是指对操作数的运算方式.组成表达式的 Java 操作符有很多种(什么是操作数和操作符,例如 1+2,其中 1 和 ...

  • C#8.0新特性

    只读成员 private struct Point { public Point(double x, double y) { X = x; Y = y; } private double X { ge ...

  • Dji Mimo APP逆向.1(pocket 2直播模式+物体追踪)

    大疆的东西,我真的太喜欢了...喜欢到想看看是如何做出来的. 逆向菜鸡,安卓羸弱,反正就是个看热闹的主,大佬们轻点拍~ 这个就是将应用退壳的东西 具体是一个梆梆企业版的壳子,我是在真机上面把壳砸了的 ...

  • Dji Mimo APP逆向.2

    Dji Mimo APP逆向.1(pocket 2直播模式+物体追踪)先接上~ 我又来了~继续翻阅代码     A("light_upload_release_click"),  ...

  • APP逆向案例---xxapp

    步骤一 抓个包 其中m_d,m_e为加密参数 步骤二(已经看了是360加固我们脱壳一下) # Author: hluwa <hluwa888@gmail.com># HomePage: h ...

  • DJI Fly APP 相机界面知识

    对于航拍初学者来说,飞行软件中与相机有关的各种设置肯定让你又爱又恨,既想掌握设置方法,又不能完全理解这些设置的含义和用途,或对某些功能一知半解,到了真正使用的时候还是一头雾水.今天,我们以DJI Ai ...

  • DJI Mimo

    十年前在校园操场里循环听<追梦赤子心>里唱到: "充满鲜花的世界到底在哪里,如果它真的存在那么我一定会去!" 2017年我发现了充满鲜花的地方,并把它标榜为心目中国内风 ...

  • App逆向流程

    App逆向流程

  • 大疆Dji pocket 一代研究(Dji Mimo)

    我前些日子入了一台云台相机,小巧的机身,强大的机身,反正就是喜欢的不行,作为一个半吊子程序员当然是想写个程序来控制它了.但是逛遍全网,就发现一个写2代HDMI连接的.和我有啥关系呢~~~ 哈哈哈,多花 ...

  • Java生鲜电商平台-逆向物流退换货流程设计(小程序/APP)

    Java生鲜电商平台-逆向物流退换货流程设计(小程序/APP) 说明:在Java生鲜电商平台中,任何一个商品都是存在退换货问题的,那么应该怎么样做才比较好呢?下面就是我的经验分享,希望对大家有用. 什 ...

  • Python 逆向抓取 APP 数据

    今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...