在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Android inline hook一般基于这个函数,使用ptrace函数attach一个目标进程,注入定制的so库进入目标进程的地址空间,然后用so里边的函数地址替换目标进程地址空间里原有的函数地址,目标进程运行到原有函数地址时,就会进入你的so库中的函数,而你的函数一般需要将当时目标进程现场保存起来(原函数地址、寄存器值),待自己的函数跑完后,再恢复现场,目标进程继续运行。 细节我们不在多述,资料也很多,这里我们直接基于一个GitHub上的开源项目Android EagleEye(https://github.com/MindMac/AndroidEagleEye),来实现我们对大神app的hook。AndroidEagleEye的中文说明: 我们需要按照“hook更多native方法”的说明,增修hook_apis.c中的相关代码并设置系统属性: 1.声明目标方法的替代方法 参数类型、返回值类型需要和目标方法保持一致 我们是Hook应用程序自身Native库中的方法,该变量应该以**custom_hook_info**开头。该结构体的第2个成员为目标库的名称(开头的lib是必需的);第3个成员为目标方法名称;第4和最后一个成员为第1步中声明的方法名。第2、4个成员很明确,但是第3个成员目标方法名称,我们还需要idaPro来确定。我们上面讲到大神app解密lua脚本的关键函数在idaPro导出窗口中的名称是_byds_d_: 这里有一点需要特别注意,由于寻找函数时,寻找的是app got表函数名称而不是导出函数窗口内的函数名称。 所以函数名称一定不要弄错了,不然找不到函数,导致hook不成功。 现在,我们可以写**HOOK_INFO**结构体了: 打开cmd,直接进入EagleEye/jni目录,ndk-build编译: 这里不用再重新打包apt,从github上下载下来的目录结构是这样的: 里面就有EagleEye.apk,安装这个apk,之后再将刚才新编译的libeagleeyenative.so覆盖掉刚才apk中带的so库(/data/data/com.mindmac.eagleeye/lib中)即可: 该配置文件用以设置目标库的名称,一个库名称一行,且库名称以**lib**开头,**.so**不需要: 并将该配置文件推送到目标应用程序的**data**目录下,/data/data/\<package name ofthe application you want to hook\>,本例中是/data/data/com.qipai.n1,要确保该文件可读: 6.设置Android 系统属性rw.eagleeye.nt.uids 最后,运行测试,首先运行xposed并**eagleeye模块: 这种hook方式,测试的模拟器(雷电)和真机都是可以的。在这里也多谢AndroidEagleEye作者。 原文链接:http://www.freebuf.com/column/173221.html |
请发表评论