|
|
|
[原创]Xposed高级用法 实现Tinker热修复
Xposed在这里只是给你提供了一个注入的时机,貌似并没有什么“高级”的用途。 |
|
[分享]看安卓10源码的网站
这个网站是我牵头组建的 :) 与 androidxref.com 相比,我们做了一些改进: 1. 搜索源码的时候,在任何页面都可以回到 Home,方便跨版本查阅源码。 2. 更新了 OpenGrok 的版本,支持自动补全。 3. 服务器在阿里云,访问更快速。 4. 由于工作极度依赖源码,有更新会第一时间部署。 欢迎大家提出改进意见。 顺便打个广告:我司招人,做 Android Framework/逆向/Xposed开发相关的可以给我发邮件 tws@dimenspace.com |
|
|
|
|
|
[求助]Go 1.3.3的32位版本编译问题
go交叉编译这么方便,还需要这个吗? |
|
[求助]求分析:非常奇怪的应用,有xposed模块勾选就闪退。
很简单啊,拿到 XposedBridge 的 sLoadedPackageCallbacks,看到自己识别不了的 classloader 就是了。 |
|
[原创]Art 模式实现XposedNativeHook兼容Android10
这个所谓的限制应该是 Android O 的 Treble 里面引入的 linker namespace 吧,如果你只是想加载任意目录的 so,直接用 linker 的内部方法就可以了,没必要这么搞。 |
|
|
|
[求助]如何快速执行adb命令?
写一个 dex 直接调用系统服务,然后用 adb 直接运行dex就可以了。 |
|
|
|
[原创]FastHook——远超YAHFA的优异稳定性
图灵技师 首先,感谢你的批评指点。 第二,我必须承认这篇文章有些不严谨的地方,FastHook主要是解决YAHFA存在的不足,其他框架两个框架我用得少,epic我没用过商业版的,不知道,开源版的经常出现一些莫 ...1. 你用“奥卡姆剃刀定律” 审视一下FastHook 对除了备份原方法之外的处理手段。因为你不备份原方法,所以不会遇到resolve和gc的问题,那么别人可能因为不做xxx,就不会遇到你所说的其他问题。 2. 闭源 != 无耻。如何处理源码是个人选择,无可厚非。 |
|
|
|
|
|
[原创]简单暴力非provide式突破Android P对调用隐藏API限制的方法
限制太大了,怎么叫没有限制呢? |
|
[求助]关于va中native hook的偏移量计算方式
class ArtMethod { public: // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses". // The class we are a part of. uint32_t declaring_class_; // Short cuts to declaring_class_->dex_cache_ member for fast compiled code access. uint32_t dex_cache_resolved_methods_; // Short cuts to declaring_class_->dex_cache_ member for fast compiled code access. uint32_t dex_cache_resolved_types_; // Access flags; low 16 bits are defined by spec. uint32_t access_flags_; /* Dex file fields. The defining dex file is available via declaring_class_->dex_cache_ */ // Offset to the CodeItem. uint32_t dex_code_item_offset_; // Index into method_ids of the dex file associated with this method. uint32_t dex_method_index_; /* End of dex file fields. */ // Entry within a dispatch table for this method. For static/direct methods the index is into // the declaringClass.directMethods, for virtual methods the vtable and for interface methods the // ifTable. uint32_t method_index_; // Fake padding field gets inserted here. // Must be the last fields in the method. // PACKED(4) is necessary for the correctness of // RoundUp(OFFSETOF_MEMBER(ArtMethod, ptr_sized_fields_), pointer_size). struct PtrSizedFields { // Method dispatch from the interpreter invokes this pointer which may cause a bridge into // compiled code. void* entry_point_from_interpreter_; // Pointer to JNI function registered to this method, or a function to resolve the JNI function. void* entry_point_from_jni_; // Method dispatch from quick compiled code invokes this pointer which may cause bridging into // the interpreter. void* entry_point_from_quick_compiled_code_; } ptr_sized_fields_; }; 这个是 ArtMethod的结构体,看到 entry_point_from_jni_ 那个成员了吗?当JNI方法注册好了的时候,entry_point_from_jni_ 这个字段的值就是那个native方法的函数指针。VA的做法就是从 ArtMethod开头往后搜索内存,搜到 那个已知的指针的值的时候,就代表找到了对应的偏移。 所有ArtMethod都是用这个结构表示的,因此这个偏移在同一个系统上,是固定不变的。至于为什么 +4,字节对齐的原因。为什么不能大于100,因为ArtMethod结构体不可能有这么大,超过这么多还没搜到表示搜不到没必要搜了。 |
|
[求助]Delete
测试系统版本多少?如果是7.0以上,需要处理JIT的问题。 |
|
[求助] Native层构建Parcel
哪个应用? |
|
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值