PAGalaxyLab / YAHFA

Yet Another Hook Framework for ART
GNU General Public License v3.0
1.56k stars 350 forks source link

安卓R崩溃的一些问题 #132

Closed shuajinanhai closed 3 years ago

shuajinanhai commented 3 years ago

安卓R调用backup崩溃,但是demo运行正常,patch到游戏后运行崩溃,之前的系统测试运行正常,唯独11不行,游戏在11是正常的,并且排除游戏的签名验证,包验证。附上崩溃log thread.cc:3551] Check failed: exception != nullptr runtime.cc:655] Runtime aborting... runtime.cc:655] All threads: runtime.cc:655] DALVIK THREADS (17): runtime.cc:655] "main" prio=10 tid=1 Runnable runtime.cc:655] | group="" sCount=0 dsCount=0 flags=0 obj=0x71649ef0 self=0xdbfc3810 runtime.cc:655] | sysTid=8774 nice=-10 cgrp=default sched=0/0 handle=0xe8e68470 runtime.cc:655] | state=R schedstat=( 0 0 0 ) utm=37 stm=10 core=3 HZ=100 runtime.cc:655] | stack=0xff0e8000-0xff0ea000 stackSize=8192KB runtime.cc:655] | held mutexes= "abort lock" "mutator lock"(shared held) runtime.cc:655] native: #00 pc 00373d6d /apex/com.android.art/lib/libart.so (art::DumpNativeStack(std::1::basic_ostream<char, std::__1::char_traits >&, int, BacktraceMap, char const, art::ArtMethod, void, bool)+76) runtime.cc:655] native: #01 pc 004438f3 /apex/com.android.art/lib/libart.so (art::Thread::DumpStack(std::1::basic_ostream<char, std::1::char_traits >&, bool, BacktraceMap*, bool) const+386) runtime.cc:655] native: #02 pc 0043f1eb /apex/com.android.art/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::1::char_traits >&, bool, BacktraceMap, bool) const+34) runtime.cc:655] native: #03 pc 0045c17f /apex/com.android.art/lib/libart.so (art::DumpCheckpoint::Run(art::Thread)+674) runtime.cc:655] native: #04 pc 004576fb /apex/com.android.art/lib/libart.so (art::ThreadList::RunCheckpoint(art::Closure, art::Closure)+354) runtime.cc:655] native: #05 pc 00456a8f /apex/com.android.art/lib/libart.so (art::ThreadList::Dump(std::1::basic_ostream<char, std::__1::char_traits >&, bool)+1090) runtime.cc:655] native: #06 pc 00401f09 /apex/com.android.art/lib/libart.so (art::Runtime::Abort(char const*)+1444) runtime.cc:655] native: #07 pc 0000d993 /system/lib/libbase.so (android::base::SetAborter(std::1::function<void (char const)>&&)::$_3::__invoke(char const)+46) runtime.cc:655] native: #08 pc 0000d2b1 /system/lib/libbase.so (android::base::LogMessage::~LogMessage()+224) runtime.cc:655] native: #09 pc 0044d65b /apex/com.android.art/lib/libart.so (art::Thread::QuickDeliverException()+82) runtime.cc:655] native: #10 pc 004d12f7 /apex/com.android.art/lib/libart.so (artDeliverPendingExceptionFromCode+2) runtime.cc:655] native: #11 pc 000d8131 /apex/com.android.art/lib/libart.so (art_quick_generic_jni_trampoline+128) runtime.cc:655] native: #12 pc 004d9043 /apex/com.android.art/lib/libart.so (artQuickGenericJniTrampoline+886) runtime.cc:655] native: #13 pc 007fae96 [stack] (???) runtime.cc:655] at lab.galaxy.yahfa.plugin.test.backup(Native method)

ghost commented 3 years ago

安卓11改变了JIT的机制,目前不可能在不改变框架实现原理的情况下解决这个问题。换一个实现方式即可。

shuajinanhai commented 3 years ago

这个问题,原因就是这个: 当两个或更多线程同时进入同一个被hook方法时,其中一个线程将获取到锁,另一个线程会等待;但当持有锁的线程还未释放锁时,如果art需要挂起所有线程,该线程执行到checkpoint时将暂停执行,而没有持有锁的线程将无限等待,无法到达checkpoint,并最终导致挂起超时,runtime abort。

shuajinanhai commented 3 years ago

yafha在11系统每个backup函数只能调一次,第二次必定崩溃,并且前后2次地址都变了,要怎么兼容

canyie commented 3 years ago

@shuajinanhai 不是这个问题,这个问题是我的pine才有的,实现方式原因,yahfa没有

shuajinanhai commented 3 years ago

11系统闪退时候 hook函数的quick_code变为null了,导致 备份函数quick_code变了,所以出现异常了

要怎么解决额

------------------ 原始邮件 ------------------ 发件人: "PAGalaxyLab/YAHFA" <notifications@github.com>; 发送时间: 2020年10月29日(星期四) 晚上10:23 收件人: "PAGalaxyLab/YAHFA"<YAHFA@noreply.github.com>; 抄送: "1281579248"<1281579248@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [PAGalaxyLab/YAHFA] 安卓R崩溃的一些问题 (#132)

安卓11改变了JIT的机制,目前不可能在不改变框架实现原理的情况下解决这个问题。换一个实现方式即可。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

shuajinanhai commented 3 years ago

11系统闪退时候 hook函数的quick_code变为null了,导致 备份函数quick_code变了,所以出现异常了

要怎么解决

------------------ 原始邮件 ------------------ 发件人: "PAGalaxyLab/YAHFA" <notifications@github.com>; 发送时间: 2020年11月1日(星期天) 下午3:27 收件人: "PAGalaxyLab/YAHFA"<YAHFA@noreply.github.com>; 抄送: "1281579248"<1281579248@qq.com>;"Mention"<mention@noreply.github.com>; 主题: Re: [PAGalaxyLab/YAHFA] 安卓R崩溃的一些问题 (#132)

@shuajinanhai 不是这个问题,这个问题是我的pine才有的,实现方式原因,yahfa没有

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

shuajinanhai commented 3 years ago

ok,已经解决了R系统问题,完美运行 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19979次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19980次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19981次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19982次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19983次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19984次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19985次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19986次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19987次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19988次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19989次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.954 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19990次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19991次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19992次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19993次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19994次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19995次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19996次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19997次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19998次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa W/by_WXW: 测试8个函数结束,开始暴力测试同个函数20000次,第19999次测试,不闪退即通过测试PackageInfo{9673aa2 lab.galaxy.yahfa} 2020-09-25 22:14:14.955 10441-10441/lab.galaxy.yahfa I/by_WXW: 全部测试结束,完美兼容安卓5.0~11.0系统: 修复5.0~6.0系统64位闪退问题 修复红米手机6.0系统【开发版bug】导致的闪退 修复OPPO手机10.0系统闪退问题(可能是OPPO 10.0系统做了特殊处理,测试三星和华为10.0都是正常的) 完美兼容X86,x86_64模拟器【测试过逍遥7.1系统(32位系统),雷电5.1系统(32位系统),雷电7.1(64位系统)】 不存在类似某hook框架的延迟hook,或者R系统不能用Debug版本的说法 2020-09-25 22:15:06.402 10441-10441/lab.galaxy.yahfa W/by_WXW: testActivity2: onDestroy =============================================================================================== 2020-09-25 22:15:06.624 10441-10441/lab.galaxy.yahfa W/by_WXW: testActivity: finish 2020-09-25 22:15:07.429 10441-10441/lab.galaxy.yahfa W/by_WXW: testActivity: onDestroy =============================================================================================== 之前调第二次hook函数就闪退,现在测试8个不同函数后,然后再对同一个函数进行20000次调用,完美解决,不闪退。有种成就感油然而生,不枉我每天熬夜看不同框架的差别,好像说某HOOK框架要延迟hook才可以,延迟hook就没意义了,如果有检测人家根本不会等你延迟hook完,它才去检测啊

shuajinanhai commented 3 years ago

我真的不会写代码啊,现在离职状态,上个月还去一个公司面试,考我笔试面试,我答不出原理,面试我的技术估计心里把我鄙视了1万次吧,啥都不会来干嘛。我觉得不会写代码,但是逆向这个行业本来就不用写太多代码,主要会抄就行了,还有加上一点投机取巧,不断尝试实验,也许就能成功了,好比如这个R系统兼容性问题,我看edxposed上好像也好多大神被困扰了好久,现在也没有解决,不知道是不是。虽然很晚了,但自己解决一个大BUG真的好爽啊,那种成就感,之前用作者原版跑模拟器上的11系统是没问题,但真机就是有问题,就是这么神奇,真的不能啥都在模拟器上测试,之前自己做的一个反射框架在模拟器9.0 也是正常的,但反射不是需要过限制吗,为啥模拟器9.0-10.0就不用呢,也是神奇的问题,还是得用真机测试比较准确,说了这么多,也不要怪我不把R系统兼容方案写出来了。就这样了,晚安,睡觉了