首页 > 其他分享 >APP实战:海博TV

APP实战:海博TV

时间:2024-09-27 14:24:51浏览次数:6  
标签:00 java hoge TV APP factory android com 海博

登录进去发现有ROOT检测,虽然不会影响我们的登录,但是能绕过就绕过好了

ROOT函数定位

直接去定位Toast

var Toast =Java.use("android.widget.Toast");
Toast.show.implementation = function(){
    showstack();
    console.log("Toast.show.implementation");
    return this.show();
}
result:
[Pixel XL::com.hoge.android.app.fujian]-> java.lang.Throwable
        at android.widget.Toast.show(Native Method)
        at com.hoge.android.util.CustomToast.showToast(CustomToast.java:172)
        at com.hoge.android.util.CustomToast.showToast(CustomToast.java:134)
        at com.hoge.android.util.CustomToast.showToast(CustomToast.java:99)
        at com.hoge.android.factory.welcome.WelcomeActivity$2$1.run(WelcomeActivity.java:260)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

函数定位到

com.hoge.android.factory.welcome.WelcomeActivity$2$1.run

image-20240927133317880

public void run() {
     if (SystemUtils.checkSuFile() && SystemUtils.checkRootFile() != null) {
     CustomToast.showToast(WelcomeActivity.this.mContext, 				WelcomeActivity.this.getString(R.string.root_toast), 100);
                        }    }

R.string.root_toast这个值在jeb里面的资源表里面的String类可以看到就是ROOT设备的提示语

过Root检测

这里有两个Root检测的函数,

一个是在命令行中执行 which su 找到对应root权限的路径

new BufferedReader(new InputStreamReader(process.getInputStream())).readLine() 读取对应的可能得到的路径

假如能够读出来,就说明有root权限

   public static boolean checkSuFile() {
        Process process = null;
        try {
            process = Runtime.getRuntime().exec(new String[]{"which", "su"});
            if (new BufferedReader(new InputStreamReader(process.getInputStream())).readLine() != null) {
                if (process != null) {
                    process.destroy();
                }
                return true;
            }
            if (process != null) {
                process.destroy();
            }
            return false;
        } catch (Throwable th) {
            if (process != null) {
                process.destroy();
            }
            throw th;
        }
    }

这里的ROOT检测就是直接去执行对应路径的命令,查看有权限

    public static File checkRootFile() {
        String[] strArr = {"/sbin/su", "/system/bin/su", "/system/xbin/su", "/data/local/xbin/su", "/data/local/bin/su", "/system/sd/xbin/su", "/system/bin/failsafe/su", "/data/local/su"};
        int length = strArr.length;
        File file = null;
        int i = 0;
        while (i < length) {
            File file2 = new File(strArr[i]);
            if (file2.exists()) {
                return file2;
            }
            i++;
            file = file2;
        }
        return file;
    }

绕过:

    var SystemUtils =  Java.use("com.hoge.android.factory.util.system.SystemUtils");
    SystemUtils.checkSuFile.implementation=function()
    {
        var result = this.checkSuFile();
        console.log(result);
        return false;
    }//第二个函数其实也是看第一个函数的返回值

登录逆向

这里的函数定位还是需要定位很久的,这里面有证书检测,抓包会崩溃,先HOOK掉证书检测,再来抓包,上一篇里面有绕过证书检测的代码的。

先来看看抓包的结果:

POST /api/v1/m_login.php?app_version=4.0.0&phone_models=PixelXL&client_id_android=34431799b51eaf57b3def0720642215b&language=Chinese&client_type=android&version=4.0.0&locating_city=%E7%A6%8F%E5%B7%9E&system_version=10&appid=9&device_token=1684ff905e7ad010a30421164d44e3f9&location_city=%E7%A6%8F%E5%B7%9E&package_name=com.hoge.android.app.fujian&appkey=OU4VuJgmGkqFzelCaueFLHll1sZJpOG4 HTTP/1.1
Accept-Language: zh-CN,zh;q=0.8
User-Agent: Dalvik/2.1.0 (Linux; U; Android 10; Pixel XL Build/QP1A.191005.007.A3) m2oSmartCity_468 1.0.0
X-API-VERSION: 4.0.0
X-API-SIGNATURE: ZDk3NWZiMTIzNzgxOTUzN2ZkYWQ0ZjBiMzc2OGZjZWI5YjQ3NTc0NQ==
X-API-KEY: 877a9ba7a98f75b90a9d49f53f15a858
X-API-TIMESTAMP: 1727335051221TrzPFY
X-AUTH-TYPE: sha1
Content-Type: application/x-www-form-urlencoded
Content-Length: 95
Host: mapi-plus.fjtv.net
Connection: Keep-Alive
Accept-Encoding: gzip

password=password777&client_id_android=34431799b51eaf57b3def0720642215b&member_name=15828712555

这里面有部分由于分析,删减了。

其实可以看到大部分都是固定的,我们直接去看看Sign的复现

关键代码定位

我们用objection自动化来HOOK一下,看看关键代码在哪

com.hoge.android.app.fujian on (google: 10) [usb] # android hooking watch class_method java.lang.String 
.getBytes --dump-return --dump-args --dump-backtrace
(agent) Attempting to watch class java.lang.String and method getBytes.
(agent) Hooking java.lang.String.getBytes(int, int, [B, int)
(agent) Hooking java.lang.String.getBytes()
(agent) Hooking java.lang.String.getBytes(java.lang.String)
(agent) Hooking java.lang.String.getBytes(java.nio.charset.Charset)
(agent) Registering job 259388. Type: watch-method for: java.lang.String.getBytes
com.hoge.android.app.fujian on (google: 10) [usb] # (agent) [259388] Called java.lang.String.getBytes(java.nio.charset.Charset)
(agent) [259388] Backtrace:
        java.lang.String.getBytes(Native Method)
        java.lang.String.getBytes(String.java:914)
        com.hoge.android.util.security.EncodeUtils.md5(EncodeUtils.java:249)
        com.hoge.android.factory.util.Util.getDeviceToken(Util.java:529)
        com.hoge.android.factory.util.DataRequestUtil.getHttpParams(DataRequestUtil.java:490)
        com.hoge.android.factory.util.DataRequestUtil.getHttpParams(DataRequestUtil.java:472)
        com.hoge.android.factory.util.ConfigureUtils.getUrl(ConfigureUtils.java:1210)
        com.hoge.android.factory.util.ConfigureUtils.getUrl(ConfigureUtils.java:1182)
        com.hoge.android.factory.model.LoginBiz.onLoginAction(LoginBiz.java:200)
        com.hoge.android.factory.presenter.LoginPresenter.goLogin(LoginPresenter.java:66)
        com.hoge.android.factory.CompLoginStyle1Activity.loginOfM2o(CompLoginStyle1Activity.java:339)   
        com.hoge.android.factory.LoginBaseActivity$1.onClick(LoginBaseActivity.java:161)
        android.view.View.performClick(View.java:7140)
        android.view.View.performClickInternal(View.java:7117)
        android.view.View.access$3500(View.java:801)
        android.view.View$PerformClick.run(View.java:27351)
        android.os.Handler.handleCallback(Handler.java:883)
        android.os.Handler.dispatchMessage(Handler.java:100)
        android.os.Looper.loop(Looper.java:214)
        android.app.ActivityThread.main(ActivityThread.java:7356)
        java.lang.reflect.Method.invoke(Native Method)
        com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

(agent) [259388] Arguments java.lang.String.getBytes(UTF-8)
(agent) [259388] Return Value: [object Object]
(agent) [259388] Called java.lang.String.getBytes()
(agent) [259388] Backtrace:
        java.lang.String.getBytes(Native Method)
        com.hoge.android.factory.util.Util.getRequestHeader(Util.java:1729)
        com.hoge.android.factory.util.DataRequestUtil.postWithProgress(DataRequestUtil.java:225)        
        com.hoge.android.factory.util.DataRequestUtil.postWithProgress(DataRequestUtil.java:206)        
        com.hoge.android.factory.util.DataRequestUtil.post(DataRequestUtil.java:168)
        com.hoge.android.factory.util.DataRequestUtil.post(DataRequestUtil.java:114)
        com.hoge.android.factory.model.LoginBiz.onLoginAction(LoginBiz.java:208)
        com.hoge.android.factory.presenter.LoginPresenter.goLogin(LoginPresenter.java:66)
        com.hoge.android.factory.CompLoginStyle1Activity.loginOfM2o(CompLoginStyle1Activity.java:339)   
        com.hoge.android.factory.LoginBaseActivity$1.onClick(LoginBaseActivity.java:161)
        android.view.View.performClick(View.java:7140)
        android.view.View.performClickInternal(View.java:7117)
        android.view.View.access$3500(View.java:801)
        android.view.View$PerformClick.run(View.java:27351)
        android.os.Handler.handleCallback(Handler.java:883)
        android.os.Handler.dispatchMessage(Handler.java:100)
        android.os.Looper.loop(Looper.java:214)
        android.app.ActivityThread.main(ActivityThread.java:7356)
        java.lang.reflect.Method.invoke(Native Method)
        com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

(agent) [259388] Called java.lang.String.getBytes(java.nio.charset.Charset)
(agent) [259388] Backtrace:
        java.lang.String.getBytes(Native Method)
        java.lang.String.getBytes(String.java:978)
        java.lang.String.getBytes(Native Method)
        com.hoge.android.factory.util.Util.getRequestHeader(Util.java:1729)
        com.hoge.android.factory.util.DataRequestUtil.postWithProgress(DataRequestUtil.java:225)        
        com.hoge.android.factory.util.DataRequestUtil.postWithProgress(DataRequestUtil.java:206)        
        com.hoge.android.factory.util.DataRequestUtil.post(DataRequestUtil.java:168)
        com.hoge.android.factory.util.DataRequestUtil.post(DataRequestUtil.java:114)
        com.hoge.android.factory.model.LoginBiz.onLoginAction(LoginBiz.java:208)
        com.hoge.android.factory.presenter.LoginPresenter.goLogin(LoginPresenter.java:66)
        com.hoge.android.factory.CompLoginStyle1Activity.loginOfM2o(CompLoginStyle1Activity.java:339)   
        com.hoge.android.factory.LoginBaseActivity$1.onClick(LoginBaseActivity.java:161)
        android.view.View.performClick(View.java:7140)
        android.view.View.performClickInternal(View.java:7117)
        android.view.View.access$3500(View.java:801)
        android.view.View$PerformClick.run(View.java:27351)
        android.os.Handler.handleCallback(Handler.java:883)
        android.os.Handler.dispatchMessage(Handler.java:100)
        android.os.Looper.loop(Looper.java:214)
        android.app.ActivityThread.main(ActivityThread.java:7356)
        java.lang.reflect.Method.invoke(Native Method)
        com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)objection -g <app:com.xiaojianbang.app> explorecom.hoge.android.app.fujian on (google: 10) [usb] # android hooking watch class_method java.lang.String 
.getBytes --dump-return --dump-args --dump-backtrace
(agent) Attempting to watch class java.lang.String and method getBytes.
(agent) Hooking java.lang.String.getBytes(int, int, [B, int)
(agent) Hooking java.lang.String.getBytes()
(agent) Hooking java.lang.String.getBytes(java.lang.String)
(agent) Hooking java.lang.String.getBytes(java.nio.charset.Charset)
(agent) Registering job 259388. Type: watch-method for: java.lang.String.getBytes
com.hoge.android.app.fujian on (google: 10) [usb] # (agent) [259388] Called java.lang.String.getBytes(java.nio.charset.Charset)
(agent) [259388] Backtrace:
        java.lang.String.getBytes(Native Method)
        java.lang.String.getBytes(String.java:914)
        com.hoge.android.util.security.EncodeUtils.md5(EncodeUtils.java:249)
        com.hoge.android.factory.util.Util.getDeviceToken(Util.java:529)
        com.hoge.android.factory.util.DataRequestUtil.getHttpParams(DataRequestUtil.java:490)
        com.hoge.android.factory.util.DataRequestUtil.getHttpParams(DataRequestUtil.java:472)
        com.hoge.android.factory.util.ConfigureUtils.getUrl(ConfigureUtils.java:1210)
        com.hoge.android.factory.util.ConfigureUtils.getUrl(ConfigureUtils.java:1182)
        com.hoge.android.factory.model.LoginBiz.onLoginAction(LoginBiz.java:200)
        com.hoge.android.factory.presenter.LoginPresenter.goLogin(LoginPresenter.java:66)
        com.hoge.android.factory.CompLoginStyle1Activity.loginOfM2o(CompLoginStyle1Activity.java:339)   
        com.hoge.android.factory.LoginBaseActivity$1.onClick(LoginBaseActivity.java:161)
        android.view.View.performClick(View.java:7140)
        android.view.View.performClickInternal(View.java:7117)
        android.view.View.access$3500(View.java:801)
        android.view.View$PerformClick.run(View.java:27351)
        android.os.Handler.handleCallback(Handler.java:883)
        android.os.Handler.dispatchMessage(Handler.java:100)
        android.os.Looper.loop(Looper.java:214)
        android.app.ActivityThread.main(ActivityThread.java:7356)
        java.lang.reflect.Method.invoke(Native Method)
        com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

(agent) [259388] Arguments java.lang.String.getBytes(UTF-8)
(agent) [259388] Return Value: [object Object]
(agent) [259388] Called java.lang.String.getBytes()
(agent) [259388] Backtrace:
        java.lang.String.getBytes(Native Method)
        com.hoge.android.factory.util.Util.getRequestHeader(Util.java:1729)
        com.hoge.android.factory.util.DataRequestUtil.postWithProgress(DataRequestUtil.java:225)        
        com.hoge.android.factory.util.DataRequestUtil.postWithProgress(DataRequestUtil.java:206)        
        com.hoge.android.factory.util.DataRequestUtil.post(DataRequestUtil.java:168)
        com.hoge.android.factory.util.DataRequestUtil.post(DataRequestUtil.java:114)
        com.hoge.android.factory.model.LoginBiz.onLoginAction(LoginBiz.java:208)
        com.hoge.android.factory.presenter.LoginPresenter.goLogin(LoginPresenter.java:66)
        com.hoge.android.factory.CompLoginStyle1Activity.loginOfM2o(CompLoginStyle1Activity.java:339)   
        com.hoge.android.factory.LoginBaseActivity$1.onClick(LoginBaseActivity.java:161)
        android.view.View.performClick(View.java:7140)
        android.view.View.performClickInternal(View.java:7117)
        android.view.View.access$3500(View.java:801)
        android.view.View$PerformClick.run(View.java:27351)
        android.os.Handler.handleCallback(Handler.java:883)
        android.os.Handler.dispatchMessage(Handler.java:100)
        android.os.Looper.loop(Looper.java:214)
        android.app.ActivityThread.main(ActivityThread.java:7356)
        java.lang.reflect.Method.invoke(Native Method)
        com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

(agent) [259388] Called java.lang.String.getBytes(java.nio.charset.Charset)
(agent) [259388] Backtrace:
        java.lang.String.getBytes(Native Method)
        java.lang.String.getBytes(String.java:978)
        java.lang.String.getBytes(Native Method)
        com.hoge.android.factory.util.Util.getRequestHeader(Util.java:1729)
        com.hoge.android.factory.util.DataRequestUtil.postWithProgress(DataRequestUtil.java:225)        
        com.hoge.android.factory.util.DataRequestUtil.postWithProgress(DataRequestUtil.java:206)        
        com.hoge.android.factory.util.DataRequestUtil.post(DataRequestUtil.java:168)
        com.hoge.android.factory.util.DataRequestUtil.post(DataRequestUtil.java:114)
        com.hoge.android.factory.model.LoginBiz.onLoginAction(LoginBiz.java:208)
        com.hoge.android.factory.presenter.LoginPresenter.goLogin(LoginPresenter.java:66)
        com.hoge.android.factory.CompLoginStyle1Activity.loginOfM2o(CompLoginStyle1Activity.java:339)   
        com.hoge.android.factory.LoginBaseActivity$1.onClick(LoginBaseActivity.java:161)
        android.view.View.performClick(View.java:7140)
        android.view.View.performClickInternal(View.java:7117)
        android.view.View.access$3500(View.java:801)
        android.view.View$PerformClick.run(View.java:27351)-
        android.os.Handler.handleCallback(Handler.java:883)
        android.os.Handler.dispatchMessage(Handler.java:100)
        android.os.Looper.loop(Looper.java:214) 
        android.app.ActivityThread.main(ActivityThread.java:7356)
        java.lang.reflect.Method.invoke(Native Method)
        com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

还是很多堆栈信息的,最后我们定位到了com.hoge.android.factory.util.Util.getRequestHeader

这里的getRequestHeader在jadx中的反编译不明显,要去JEB里面看

    public static Map getRequestHeader(Context arg10) {
        String v10_6;
        BaseApplication v10 = BaseApplication.getInstance();
        HashMap v0 = new HashMap();
        String version = Util.getVersionName(v10);
        String random = SecurityUtil.getRandomData(6);
        Object v3 = null;
        try {
            Class.forName("com.hoge.android.jni.Utils").newInstance().verify(v10);
            v10_6 = Class.forName("com.hoge.android.jni.Utils").newInstance().signature(version, random);
            goto label_53;
        }

这里其实就可以看到signature里面传入了veriosn和random里面,看到了一下signture里面去

package com.hoge.android.jni;
import android.content.Context;
public class Utils {
    public String version;
    static {
        System.loadLibrary("m2o_jni");
    }
    public Utils() {
        this.version = "0.0.1";
    }
    public native String decode(String arg1) {
    }
    public native String signature(String arg1, String arg2) {
    }
    public native void verify(Context arg1) {
    }
}

我们这里直接去HOOK这里JAVA层的signture

    var Utils = Java.use("com.hoge.android.jni.Utils");
    Utils.signature.implementation=function(a,b)
    {
        console.log("com.hoge.android.jni.Utils.signature args:"+a,b);
        var result =this.signature(a,b);
        console.log("result:"+result);
        return result;
    }
[Pixel XL::海博TV]-> com.hoge.android.jni.Utils.signature args:4.0.0 1727417638549s7oQ0G
result:d5161c2da8607e75168970df8849a151a04913d9

这里我们看到传入了,version和time

这里我们顺便把传入固定下来

function call_java()
{
    Java.perform(function(){
    var Utils = Java.use("com.hoge.android.jni.Utils");
    var current_application = Java.use('android.app.ActivityThread').currentApplication();
    var context = current_application.getApplicationContext();
    // var arg0="com.mfw.roadbook.MainApplication@fd32da7";
    var arg1="4.0.0";
    var arg2="1727411395271StN4UY";
    Utils.$new().signature(arg1,arg2);
    });
}

SO层逆向

ida分析得:

int __fastcall signature(JNIEnv *a1, int a2, int a3)
{
  const char *verison; // r7
  const char *v6; // r0
  const char *time; // r8
  size_t v8; // r11
  size_t v9; // r11
  void *v10; // r0
  char *v11; // r6
  int v12; // r5
  void *p; // [sp+1Ch] [bp-2Ch] BYREF

  p = 0;
  if ( !is_initialised )
    exit(1);
  verison = (*a1)->GetStringUTFChars(a1, a2, 0);
  v6 = (*a1)->GetStringUTFChars(a1, a3, 0);
  time = v6;
  if ( verison )
  {
    if ( v6 && (v8 = strlen(verison), v9 = v8 + strlen(time), v10 = malloc(v9 + 80), (v11 = v10) != 0) )
    {
      memset(v10, 0, v9 + 80);
      snprintf(
        v11,
        v9 + 80,
        "%s&%s&%s&%s",
        "877a9ba7a98f75b90a9d49f53f15a858",
        "NjhhMDRiODE3N2JkYzllNWUxNmE4OWU2Nzc3YTdiNjY=",
        verison,
        time);
      sha1_encode(v11, v9 + 79, &p);
      if ( p )
        v12 = ((*a1)->NewStringUTF)(a1);
      else
        v12 = 0;
    }
    else
    {
      v12 = 0;
      v11 = 0;
    }
    (*a1)->ReleaseStringUTFChars(a1, a2, verison);
  }
  else
  {
    v12 = 0;
    v11 = 0;
  }
  if ( time )
    (*a1)->ReleaseStringUTFChars(a1, a3, time);
  if ( v11 )
    free(v11);
  if ( p )
    free(p);
  return v12;
}

这里我们去HOOK代码

      sha1_encode(v11, v9 + 79, &p);
var moduleBase = Module.findBaseAddress("libm2o_jni.so");
if (moduleBase !== null) 
{;;//32位程序要++1
    var sha1 = moduleBase.add(0xA86C+1);
    Interceptor.attach(sha1,{
        onEnter:function(args){
            console.log(args[0].readCString());
            this.args2=args[2];
        },
        onLeave:function(result){
            console.log(hexdump(this.args2.readPointer()));
        }
    });
} else {
    console.log("Module not found: libencryptlib.so");
}

这里为什么我们要console.log(hexdump(this.args2.readPointer())),其实是因为这里是二级指针,hexdump的结果需要是指针

[Pixel XL::海博TV]-> call_java()
com.hoge.android.jni.Utils.signature args:4.0.0 1727411395271StN4UY
877a9ba7a98f75b90a9d49f53f15a858&NjhhMDRiODE3N2JkYzllNWUxNmE4OWU2Nzc3YTdiNjY=&4.0.0&1727411395271StN4UY
           0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  0123456789ABCDEF
e05b4ad0  36 33 35 65 39 30 31 31 63 62 39 61 64 37 61 35  635e9011cb9ad7a5
e05b4ae0  38 63 36 65 32 37 34 30 32 30 62 31 33 33 35 33  8c6e274020b13353
e05b4af0  33 30 33 63 36 36 37 65 00 00 78 00 74 00 00 00  303c667e..x.t...
e05b4b00  42 69 6e 64 65 72 3a 38 39 35 34 5f 32 00 20 77  Binder:8954_2. w
e05b4b10  69 74 68 6f 75 74 20 6d 61 6e 61 67 65 64 20 70  ithout managed p
e05b4b20  65 65 72 3e 00 00 00 00 00 00 00 00 00 00 00 00  eer>............
e05b4b30  61 00 6e 00 64 00 72 00 6f 00 69 00 64 00 2e 00  a.n.d.r.o.i.d...
e05b4b40  6f 00 73 00 2e 00 49 00 4d 00 65 00 73 00 73 00  o.s...I.M.e.s.s.
e05b4b50  65 00 6e 00 67 00 65 00 72 00 00 00 00 00 00 00  e.n.g.e.r.......
e05b4b60  50 ed 12 eb 01 00 00 00 30 02 ac c9 00 00 00 00  P.......0.......
e05b4b70  02 00 00 00 00 00 00 00 00 01 65 e0 00 00 00 00  ..........e.....
e05b4b80  16 23 00 00 00 93 65 e0 84 ed 12 eb 70 0c 68 e0  .#....e.....p.h.
e05b4b90  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e05b4ba0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e05b4bb0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e05b4bc0  2f 64 61 74 61 2f 75 73 65 72 2f 30 2f 63 6f 6d  /data/user/0/com
result:635e9011cb9ad7a58c6e274020b13353303c667e

这里就可以看到,加密是SHA1,标准的SHA1

call ————>libm2o_jni.so!0xa86d
,this.args0 onEnter:            0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  0123456789ABCDEF
ebc2a9d0  38 37 37 61 39 62 61 37 61 39 38 66 37 35 62 39  877a9ba7a98f75b9
ebc2a9e0  30 61 39 64 34 39 66 35 33 66 31 35 61 38 35 38  0a9d49f53f15a858
ebc2a9f0  26 4e 6a 68 68 4d 44 52 69 4f 44 45 33 4e 32 4a  &NjhhMDRiODE3N2J
ebc2aa00  6b 59 7a 6c 6c 4e 57 55 78 4e 6d 45 34 4f 57 55  kYzllNWUxNmE4OWU
ebc2aa10  32 4e 7a 63 33 59 54 64 69 4e 6a 59 3d 26 34 2e  2Nzc3YTdiNjY=&4.
ebc2aa20  30 2e 30 26 31 37 32 37 34 31 31 33 39 35 32 37  0.0&172741139527
ebc2aa30  31 53 74 4e 34 55 59 00 00 00 00 00 00 00 00 00  1StN4UY.........
ebc2aa40  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
ebc2aa50  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
ebc2aa60  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
ebc2aa70  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
ebc2aa80  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
ebc2aa90  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
ebc2aaa0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
ebc2aab0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
ebc2aac0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

这里传入的参数其实是字符串拼接的结果,包含了传入的verison和time

标签:00,java,hoge,TV,APP,factory,android,com,海博
From: https://www.cnblogs.com/ovo-fisherman/p/18435630

相关文章

  • [微信小程序原创项目]基于Springboot+Vue+Uniapp的通用商城小程序、商城管理系统
    项目提供:完整源码+数据库sql文件+数据库表Excel文件关注我的B站:程序员阿水呀,带小白学习更多干货教程!1、项目功能描述本项目为双角色,用户和管理员,用户使用小程序前台,管理员使用web后台。1.1注册注册功能:填写用户名、密码进行注册。仅开放小程序端即用户端进行注册。......
  • uniapp [全端兼容] - 详细实现拍照或相册选取图片后插入水印功能,手机拍照或相册上传图
    前言网上的教程乱七八糟且兼容性太差,本文提供优质示例。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)开发中,详解手机从相册选取上传图像后加入水印功能,手机拍摄照相后也可以加入水印,Uniapp给图片添加水印,获取上传或拍摄的图片信息后,为......
  • listview中的edittext输入状态时不要刷新listview
    我的listview是时时刷新的,这导致了listview中的edittext不能点击编辑,通过如下方法解决了此问题,监测屏幕的变化,如果弹出软键盘,则不更新,问题解决。监测屏幕的代码如下ViewTreeObserverobserver=rootView.getViewTreeObserver();observer.addOnGlobalLayoutListener(newViewTreeO......
  • 【25届毕设选题推荐】基于uniapp的简易旅行旅游系统(源码+部署+LW文档)
    前言:我是天码编程,从事计算机开发行业数年,专注Java程序设计开发、源码分享、技术指导和毕业设计,欢迎各位前来交流讨论......
  • PHP爬虫APP程序:打造智能化数据抓取工具
    在信息爆炸的时代,数据的重要性日益凸显。PHP作为一种广泛使用的服务器端脚本语言,因其强大的功能和灵活性,成为开发爬虫程序的理想选择。本文将探讨如何使用PHP构建一个爬虫APP程序,以及其背后的思维逻辑和实现步骤。什么是PHP爬虫APP程序?PHP爬虫APP程序是一个利用PHP编写的应......
  • APP集成人脸识别接口-C#人脸识别API接口
    人脸识别技术是一种基于生物特征的识别技术,它通过捕捉和分析人脸特征来识别或验证个体身份。这项技术主要依赖于计算机视觉、图像处理和人工智能算法的结合,一般由第三方人工智能接口平台来提供,例如:翔云、阿里云等平台。人脸识别技术的应用可以大大提升身份验证的准确性,减......
  • uniapp [全端兼容] - 详细实现日历“平铺方式“直接在页面上显示出来,而并非嵌套在弹出
    前言如果您需要“纯弹框式”日历,请访问这篇文章。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)开发中,详解实现让日历以平铺、全屏的形式直接放到页面上,而并非常见的弹框及弹出式窗口才能打开日历进行选择,uniApp不套在弹框里的日历插......
  • 天地图移动端部署(一):创建一个基础地图服务(uni-app环境)
    前言:在一家测绘公司上班,接手了一个移动端APP项目,用uni-app开发的,地图服务用天地图底层支持,嗯,测绘用天地图十分合理。“这地图看起来糊糊的,你给换成XX地图吧。”老大某天跟我说。圣谕下达,开始拉代码,读代码。嗯,依旧是一坨的“清朝”项目代码,一堆的log,一堆的警告,一堆的if,就......
  • 深入理解 Nuxt.js 中的 app:error 钩子
    title:深入理解Nuxt.js中的app:error钩子date:2024/9/27updated:2024/9/27author:cmdragonexcerpt:摘要:本文深入讲解了Nuxt.js框架中的app:error钩子,介绍其在处理web应用中致命错误的重要作用、使用方法及实际应用场景。通过创建Nuxt项目、定义插件、触发错误与测......
  • YOLOv9改进,YOLOv9主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力
    摘要GhostNetV3是由华为诺亚方舟实验室的团队发布的,于2024年4月发布。摘要:紧凑型神经网络专为边缘设备上的应用设计,具备更快的推理速度,但性能相对适中。然而,紧凑型模型的训练策略目前借鉴自传统模型,这忽略了它们在模型容量上的差异,可能阻碍紧凑型模型的性能提升。在本......