Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

achieve issue #35 #36

Open
wants to merge 24 commits into
base: master
Choose a base branch
from
Open

achieve issue #35 #36

wants to merge 24 commits into from

Conversation

fettdrac
Copy link

@fettdrac fettdrac commented Jul 5, 2019

It is my first time to contribute codes to such a famous open-source project, there must be something important that are not mentioned by me, so if any problems happens,I will be very happy to solve it as soon as possible during my summer vacation.

add functions mentioned above in issue #35

Thank you.

@NoahNyy
Copy link

NoahNyy commented Jul 15, 2019

你好, 想请教怎么操作? 只要把java目录下的文件复制到自己的app的java 目录下 运行就可以了吗?

@fettdrac
Copy link
Author

fettdrac commented Jul 20, 2019

你好, 想请教怎么操作? 只要把java目录下的文件复制到自己的app的java 目录下 运行就可以了吗?

因为是全局注入,复杂些,但每一步基本没坑(在AVD和我自己的三星真机上没毛病),如果想要简单一些(避免写system分区,而且可以实现自动部署,"武器化"的话可以直接ptrace注入so那套操作(参考libinject,注意selinux))
1、先编译整个项目(推荐AS环境),得到libwhale.so和包含有'com.lody.whale.WhaleRuntime'类的dex(app模块下有多个dex,用jadx-gui反编译找出包含的那个,重命名whale.dex复制到/data/local/tmp下)
-----静态注入操作 begin ,更稳定,但需要/system写权限,动态ptrace注入可以省略-----
2、用[https://bbs.pediy.com/thread-224297.htm]的工具改app_process,工具输出会告诉你应该把libwhale.so改成什么名字(也可以用readelf -d看第一个so,具体操作详见链接)
3、把修改好的app_process(我这里是app_process32)替换原先的(注意备份!),运行'app_process -Xzygote /system/bin --zygote --start-system-server'看下是不是缺少一个依赖(我这里是dl.so,有时是android_runtime.so)缺少依赖说明修改基本ok
4、把重命名好的libwhale.so复制到/system/lib下(文件名一定要对!)
-----end-----
5、将写好的hook模块(hmtest是实例)复制到/data/local/tmp下,重命名为HMTest.dex(目前路径写死,可以实现动态查找,但没必要(滑稽),因为一个dex里可以有多个模块),重启java世界,就可以全局hook了,修改模块的话重启生效
6、算是彩蛋功能,ZygoteHook类的代码会在JNI_OnCreateJVM后就执行,几乎完整的root权限执行任意代码(patch SELinux之类的可以参考KSMA里的那段shellcode,也可以在这里等待mediaserver混进secure world让RKP保护为我们所用(完整任意地址读写~)),里面默认实现一个hook forkAndSpecialize的代码,可以给任意app高危权限(比如以system身份运行,可以混进系统签名的应用里拿到一些OEM权限和数据,前排@某为,某米,三颗星(滑稽))

如果只是在自己app内hook,就是添加libwhale.so,然后把whale_wrapper模块里的类都复制进来就ok了(参考asLody大佬的README),Xposed-Style hook,教程网上一堆

'我提这PR主要是想到动态加载dex和用Object.clone和Object.internalClone获取ArtMethod结构体偏移的方法',灵活性更好.,全局注入那块没想过被merge。
全局注入这块EdXposed比我写的好,代码也更优化些,我主要是拿whale框架学习art hook,顺便隐蔽性比较好,没啥UI交互,直接搞个root shell就可以无感知完成,用户无非就感觉启动时间变久了。

@jiejiao6
Copy link

fettdrac 有qq或者wechat吗

@jiejiao6
Copy link

patch SELinux之类的可以参考KSMA里的那段shellcode,也可以在这里等待mediaserver混进secure world让RKP保护为我们所用(完整任意地址读写~)

这块代码在哪里呢

@fettdrac
Copy link
Author

fettdrac commented Jul 23, 2019

patch SELinux之类的可以参考KSMA里的那段shellcode,也可以在这里等待mediaserver混进secure world让RKP保护为我们所用(完整任意地址读写~)

这块代码在哪里呢

这块只是理论上可行,三星的一个洞里有关于通过RKP写内核内存的利用方法,但是我这边实际没有实现(个人水平实在非常有限),只是看过相关利用。
有个从0到TrustZone系列,讲的挺不错,链接:https://www.freebuf.com/articles/system/103152.html。
其实不应该提那块的,让你费时去找了,sorry!

大多数情况个人用户用不到DRM,不用去考虑TrustZone那块,KSMA patch SELinux的话:https://github.com/jltxgcy/CVE_2017_7533_EXP
这个里面有完整的一套代码,关注
static unsigned long get_fack_block(unsigned long phys_addr)和
static patch_syscall(unsigned long mirror_kaddr)
这两个函数,root权限下往内核空间写点东西办法很多

@lingade
Copy link

lingade commented Jan 10, 2021

MSHook/Hooker.h not found

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants