Open XuNeal opened 2 years ago
CallObjectMethod这个应该只有两个地方调用过,转换程序里处理dex时改成debug版,这样编译后的so有日志
感谢回复。我感觉明白你的意思了。我去试试。
开启日志同时减小转换范围,也可以把生成的c项目导入as通过它来调试,不过分析日志应该更好
看了一圈没有找到直接开启 日志的开关。倒是找到一个 dexDecodeDebugInfo
是要使用这个函数替换某个类似的函数吗?
https://github.com/maoabc/nmmp/blob/7b97a9a7776db8309a0961964700dad2f875f120/nmmvm/nmmvm/src/main/cpp/libdex/DexDebugInfo.h#L46
还是说在 CallObjectMethod 前后加相应的打印语句?
在ApkProtect.java里, 直接把BuildType类型改为DEBUG final BuildNativeLib.CMakeOptions cmakeOptions = new BuildNativeLib.CMakeOptions(cmakePath, sdkHome, ndkHome, 21, outRootDir.getAbsolutePath(), BuildNativeLib.CMakeOptions.BuildType.RELEASE, abi);
如果可以的话, 把样本直接发来, 我有时间调试下看看具体怎么回事
在ApkProtect.java里, 直接把BuildType类型改为DEBUG final BuildNativeLib.CMakeOptions cmakeOptions = new BuildNativeLib.CMakeOptions(cmakePath, sdkHome, ndkHome, 21, outRootDir.getAbsolutePath(), BuildNativeLib.CMakeOptions.BuildType.RELEASE, abi);
我开始看到这里确实有个debug和release的配置。不过当时以为应该是在处理 Dex的过程中加入log。所以就排除了,没想到还真是。
如果可以的话, 把样本直接发来, 我有时间调试下看看具体怎么回事
需要什么样的样本呢?公司的项目还没开源。要不我先改一下试试。实在不行看看能不能搞一个示例代码出来。
嗯, 你先调试下, 能弄个简单可以复现的示例最好, 这样也不会泄漏什么
我试了试加入debug模式,好像有变化又好像没变化,现在报错信息变成其他位置,但是报错信息也没有多多少。 目前线上有个紧急问题要处理一下。等我处理完我再继续回来处理看看并尝试搞个示例。
12-16 17:37:06.369 16404 16404 I AEE/AED : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-16 17:37:06.369 16404 16404 I AEE/AED : Build fingerprint: 'vivo/PD1612/PD1612:6.0/MRA58K/1617884953:user/release-keys'
12-16 17:37:06.369 16404 16404 I AEE/AED : Revision: '0'
12-16 17:37:06.369 16404 16404 I AEE/AED : ABI: 'arm'
12-16 17:37:06.369 16404 16404 I AEE/AED : pid: 16371, tid: 16371, name: com.xxx.app >>> com.xxx.app <<<
12-16 17:37:06.369 16404 16404 I AEE/AED : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x43007c
12-16 17:37:06.383 16404 16404 I AEE/AED : r0 70742a20 r1 00430000 r2 00000000 r3 00020000
12-16 17:37:06.384 16404 16404 I AEE/AED : r4 12e741b0 r5 f3cf6f00 r6 00000000 r7 f3c3c8f4
12-16 17:37:06.384 16404 16404 I AEE/AED : r8 0000003d r9 00000000 sl f3a70151 fp 00200035
12-16 17:37:06.384 16404 16404 I AEE/AED : ip f37c70d0 sp ffd34ae0 lr f3a7029f pc f3a70482 cpsr 600b0030
12-16 17:37:06.389 16404 16404 I AEE/AED :
12-16 17:37:06.389 16404 16404 I AEE/AED : backtrace:
12-16 17:37:06.389 16404 16404 I AEE/AED : #00 pc 00281482 /system/lib/libart.so (_ZN3art3JNI21SetObjectArrayElementEP7_JNIEnvP13_jobjectArrayiP8_jobject+817)
12-16 17:37:06.389 16404 16404 I AEE/AED : #01 pc 00388cff /system/lib/libart.so (_ZN3art28InvokeProxyInvocationHandlerERNS_33ScopedObjectAccessAlreadyRunnableEPKcP8_jobjectS5_RNSt3__16vectorI6jvalueNS6_9allocatorIS8_EEEE+710)
12-16 17:37:06.389 16404 16404 I AEE/AED : #02 pc 003e949d /system/lib/libart.so (artQuickProxyInvokeHandler+844)
12-16 17:37:06.389 16404 16404 I AEE/AED : #03 pc 000ea9c5 /system/lib/libart.so (art_quick_proxy_invoke_handler+20)
12-16 17:37:06.389 16404 16404 I AEE/AED : #04 pc 000e63d1 /system/lib/libart.so (art_quick_invoke_stub_internal+64)
12-16 17:37:06.389 16404 16404 I AEE/AED : #05 pc 003eaedf /system/lib/libart.so (art_quick_invoke_stub+170)
12-16 17:37:06.389 16404 16404 I AEE/AED : #06 pc 007fce54 [stack]
12-16 17:37:06.707 16404 16404 I AEE/AED :
12-16 17:37:06.707 16404 16404 I AEE/AED : Tombstone written to: /data/tombstones/tombstone_08
12-16 17:37:09.191 16442 16442 F libc : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x43007c in tid 16442 (com.xxx.app)
这日志收集的有问题吧,开启了vm日志,都没指令执行日志。还有加日志后,需要缩小加固范围(缩小到某个类或者方法),不然日志输出太多都可能导致崩溃
开启了vm的日志,你需要观察每条指令的日志,看它执行到哪个位置崩溃的。
我原先也是这么想的。但是貌似现在确实没看到更多的日志。想确认一下
没在CmakeLists.txt里设置过的话, 默认在Common.h里
感谢提供 nmmp 工具。目前测试之后加固效果良好。 不过实际使用中碰到一个问题。目前经过nmmp加固之后只在Android6.0上会crash。其他Android版本没问题。不加固前在Android 6.0也没问题。 现在会直接crash,但是看了crash日志没有什么线索。只能看到一些寄存器报错。是否有什么方式可以debug能直接定位到具体是哪些代码引起的?
感谢