我昨天发布了一个 Android 应用程序的更新,今天我在 Crashlytics 中看到了一些崩溃日志:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MyWebViewActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.example.myapp.MyWebViewActivity.onCreate(MyWebViewActivity.java:77)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at …Run Code Online (Sandbox Code Playgroud) 我想让我的Android应用程序全屏,但只在某个屏幕上显示android导航栏(我的设置屏幕).我知道将导航栏永久隐藏在屏幕上是危险的,但我想知道这是否可行.我已经研究过使用我的设备并使用Xposed框架.
有没有办法以编程方式禁用导航栏,或"粘滞模式",并在以后重新启用?
编辑:我看过Android沉浸式模式,但似乎用户触摸边缘时导航栏仍会显示.我想删除导航栏的任何提示,直到它们进入我的设置屏幕.
我尝试在我新植入的Xposed智能手机上安装Snapchat.但是,当Snapchat检测到Xposed Framework时,登录是不可能的.我"理解"这种限制的原因,尽管我认为它有点太多,因为我没有使用Xposed for Snapchat.
但我的问题是:他们如何检测框架?
我想知道是否有任何应用程序/(Xposed)模块可以强制相机看到图像。
基本上,我想要一台扫描仪来扫描自制的条码,而不是需要两部手机;一个用于生成和显示条形码,另一个用于从特定应用程序扫描它。
任何会在应用程序中显示扫描仪图像的东西都可以。
我正在工作的一个应用程序最近进行了笔测试。报告中提到的风险之一是它没有适当的 Hook 检测。我已经实现了 RootBeer 库,但这很容易避免。
测试人员为 Android 应用程序创建了一个 Frida 脚本,用于在运行时修改根检测逻辑。该脚本连接到 System.exit 方法以返回 false 而不是 true。这阻止了应用程序在检测到设备已被 root 后退出。
渗透测试人员建议我们实施尽可能多的不同检查以阻止逆向工程师。
其中一项检查是让 Android 应用程序扫描位于以下位置的自己的内存映射文件
/proc/<pid>/maps
Run Code Online (Sandbox Code Playgroud)
在哪里
<pid>
Run Code Online (Sandbox Code Playgroud)
是应用程序的进程 ID (PID)。
我检查了 Android 文档,只能找到有关处理内存的信息,但找不到有关扫描内存的信息。例如。https://developer.android.com/topic/performance/memory
我看到您可以“获取设备当前内存状态的 MemoryInfo 对象”。但这仅显示系统上的可用内存。
有没有人有解决这个问题的方法?
背景是:
DexClassLoader.要获取DexClassLoader实例,我需要第三方应用程序的Context实例.我搜索了stackoverflow,发现有人说你可以在Activity或Receiver中挂钩方法来检索它们的上下文.但我检查了Activity.class,发现没有返回Context类型值的方法,只有一个方法有Context类型参数,onCreateView(String name, Context context, AttributeSet attrs).
有没有办法获得上下文?
我正在开发一个Xposed模块,如FatMinMin的的扩展minminHide模块也似乎是一个很好的锻炼开发以及:)问题是,在引导过程中,当我检查xposed日志我得到的下面:
5-04 17:06:44.305 I/Xposed (581): Loading modules from /data/app/xposed.sudocode.com.sudohide-1/base.apk
05-04 17:06:44.325 I/Xposed (581): Loading class xposed.sudocode.com.sudohide.XposedMain
05-04 17:06:44.326 E/Xposed (581): java.lang.ClassNotFoundException: Didn't find class "xposed.sudocode.com.sudohide.XposedMain" on path: DexPathList[[zip file "/data/app/xposed.sudocode.com.sudohide-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
05-04 17:06:44.326 E/Xposed (581): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
05-04 17:06:44.326 E/Xposed (581): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
05-04 17:06:44.326 E/Xposed (581): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
05-04 17:06:44.326 E/Xposed (581): at de.robv.android.xposed.XposedBridge.loadModule(XposedBridge.java:497)
05-04 17:06:44.326 E/Xposed (581): at de.robv.android.xposed.XposedBridge.loadModules(XposedBridge.java:457)
05-04 17:06:44.326 E/Xposed (581): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:122)
05-04 17:06:44.326 E/Xposed (581): Suppressed: java.lang.ClassNotFoundException: Didn't find class "xposed.sudocode.com.sudohide.XposedMain" on …Run Code Online (Sandbox Code Playgroud) 我正在通过Android中的Xposed框架.特别是阅读博客 - http://d3adend.org/blog/?p=589了解潜在的对策,并对这些问题提出了几个问题.
因此,当我们使用Xposed挂钩方法时,框架将该方法设置为本机并执行它想要挂钩的代码.那么如何在stacktrace原始方法中调用它?
com.example.hookdetection.DoStuff->getSecret //This one
de.robv.android.xposed.XposedBridge->invokeOriginalMethodNative
de.robv.android.xposed.XposedBridge->handleHookedMethod
com.example.hookdetection.DoStuff->getSecret //This one again
com.example.hookdetection.MainActivity->onCreate
android.app.Activity->performCreate
android.app.Instrumentation->callActivityOnCreate
android.app.ActivityThread->performLaunchActivity
android.app.ActivityThread->handleLaunchActivity
android.app.ActivityThread->access$800
android.app.ActivityThread$H->handleMessage
android.os.Handler->dispatchMessage
android.os.Looper->loop
android.app.ActivityThread->main
java.lang.reflect.Method->invokeNative
java.lang.reflect.Method->invoke
com.android.internal.os.ZygoteInit$MethodAndArgsCaller->run
com.android.internal.os.ZygoteInit->main
de.robv.android.xposed.XposedBridge->main
dalvik.system.NativeStart->main
Run Code Online (Sandbox Code Playgroud)
另外为什么它会在stacktrace中出现两次.我想了解它们的执行顺序.
实际的方法是否运行?由于钩子方法代码执行,因此理想情况下不会执行原始方法代码.那么我们怎样才能在相同的方法中添加一个stracktrace检测机制,知道它将被替换.
挂钩目标:ButtonClickCount(int a)
如果下面的代码
public int ButtonClickCount()
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
使用下面的挂钩代码成功。
findAndHookMethod(
"com.study.MainActivity",
lpparam.classLoader,
"ButtonClickCount",
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
XposedBridge.log("before");
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
XposedBridge.log("after");
param.setResult(10000);
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果 ButtonClickCount 方法接收参数值,则会引发 NoSuchMethodError。
public int ButtonClickCount(int a)
{
return a++;
}
Run Code Online (Sandbox Code Playgroud)
这是 findAndHookMethod 中的错误,我不知道要在代码中添加什么。