首页
社区
课程
招聘
[原创]Albatross 支持hook指令的强大hook和反射库
发表于: 2025-7-27 10:16 8224

[原创]Albatross 支持hook指令的强大hook和反射库

2025-7-27 10:16
8224
收藏
免费 157
支持
分享
最新回复 (132)
雪    币: 38
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
76
我是小白,看着很高端,很想学习食用之,请问怎么使用,我手机下载下来是个zip压缩包,这是要PC编译才能在安卓上执行的吗,我只有手机一部,请问应该从何起手,
2025-8-15 22:52
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
77
万里星河 WanQing 万里星河 测试机型:一加五&nbsp ...
我在coloerOS v6 android9的系统测试没问题,你回头试试
2025-8-16 14:54
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
78
xput 我是小白,看着很高端,很想学习食用之,请问怎么使用,我手机下载下来是个zip压缩包,这是要PC编译才能在安卓上执行的吗,我只有手机一部,请问应该从何起手,
这个需要了解android app开发和对smali语法有所了解,需要android studio编译。
2025-8-16 14:56
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
79
WanQing 我在coloerOS v6 android9的系统测试没问题,你回头试试
v.1.0.8的库似乎没有发布 只有v1.0.7
2025-8-16 16:44
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
80
万里星河 v.1.0.8的库似乎没有发布 只有v1.0.7
拉取最新的代码,之前有bug的几个版本都删除了
2025-8-16 19:28
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
81
WanQing 拉取最新的代码,之前有bug的几个版本都删除了
一加五 安卓9 初步测试有效果了
小米还是老样子
2025-8-16 19:52
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
82
万里星河 一加五 安卓9 初步测试有效果了 小米还是老样子

不知能否说说原理是啥 我在Instrumentation看到如下代码 似乎很有搞头:

  // Call-back for when the dex pc moves in a method.
  virtual void DexPcMoved(Thread* thread,
                          Handle this_object,
                          ArtMethod* method,                          uint32_t new_dex_pc)
      REQUIRES_SHARED(Locks::mutator_lock_) = 0;

然后就是回调个dex_pc其实不太直观

根据java层的method可获得ArtMethod 然后可以得到codeItem和dex的起始地址 codeItem加上dex_pc能定位到字节码 使用Instruction的导出函数可以直接反编译成smali 因此建议可以把反编译的smali一起回调回来 更直观和实用些  

最后于 2025-8-16 20:11 被万里星河编辑 ,原因:
2025-8-16 20:05
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
83
万里星河 万里星河 一加五 安卓9 初步测试有效果了 小米还是老样子 不知能否说说原理是啥 我在Instrumentation看到如下代 ...
我用frida实现过 但泛化能力不太好 只能在某一部特定的手机用
2025-8-16 20:09
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
84
万里星河 我用frida实现过 但泛化能力不太好 只能在某一部特定的手机用[em_055]
那种技术方案可以做,不过不应该去hook mterp解释器,而是对其进行动态重编译,发现是目标的跳转到重编译的代码,不然会拖慢执行速度的。
2025-8-16 21:27
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
85
万里星河 万里星河 一加五 安卓9 初步测试有效果了 小米还是老样子 不知能否说说原理是啥 我在Instrumentation看到如下代 ...
这个可以做的,适合有壳的情况分析代码。
2025-8-16 21:29
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
86
万里星河 一加五 安卓9 初步测试有效果了 小米还是老样子
你把小米的libart.so 32位和64位的可以都邮箱发给我,我看一下有什么改动
2025-8-16 21:30
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
87
WanQing 你把小米的libart.so 32位和64位的可以都邮箱发给我,我看一下有什么改动

好久没用邮件了 直接附件发你吧

上传的附件:
2025-8-16 21:48
0
雪    币: 20
活跃值: (1330)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
88
6666
2025-8-17 03:28
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
89
WanQing 你把小米的libart.so 32位和64位的可以都邮箱发给我,我看一下有什么改动

修复好了

void* hook_getInstruction(void* p1,void* p2,void* p3,void* p4,void* p5,void* p6,void* p7,void* p8)
{
    LOGD("%p %p",p1,p2);
    unsigned long p = ((unsigned long)p2 >> 12) << 12;
    if(mprotect((void*)p,PAGE_SIZE,PROT_READ | PROT_WRITE | PROT_EXEC))
    {
        LOGD("mprotect: %s", strerror(errno));
    }
    return back_getInstruction(p1,p2,p3,p4,p5,p6,p7,p8);
}


2025-8-17 17:58
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
90
万里星河 修复好了void*&nbsp;hook_getInstruction(void*&nbsp;p1,void*&nbsp;p2,void*&nbsp;p3,void*&a ...

实现了samli动态反编译

public void instruction(View view) throws NoSuchMethodException
{
  initAlbatross();
  if (listener == null)
  {
    Method getCaller = AlbatrossDemoMainActivity.class.getDeclaredMethod("getCaller", View.class);
    listener = Albatross.hookInstruction(getCaller, 0, 10, (method, self, dexPc, invocationContext) ->
    {
        assert dexPc <= 10;
        assert dexPc >= 0;
        assert method == getCaller;
        if (self != AlbatrossDemoMainActivity.this)
        {
            Albatross.log("self:" + self + " this:" + AlbatrossDemoMainActivity.this);
        }
        assert invocationContext.numberOfVRegs() == 7;
        String smali = Albatross.decompile(method,dexPc);
        Log.d("InstructionHooker",method + "[" + dexPc + "]" + "->" + smali);

        Object receiver = invocationContext.getParamObject(0);
        assert receiver == self;
        Object v = invocationContext.getParamObject(1);
        assert (v instanceof View);
        if (dexPc == 4)
        {
          invocationContext.setVRegObject(0, AlbatrossDemoMainActivity.class);
        }
    });
  }
  else
  {
    listener.unHook();
    listener = null;
  }
}
qing.albatross.demo64 D/InstructionHooker: public void qing.albatross.demo.AlbatrossDemoMainActivity.getCaller(android.view.View)[0]->invoke-static {}, java.lang.Class qing.albatross.core.Albatross.getCallerClass() // method@196
qing.albatross.demo64 D/InstructionHooker: public void qing.albatross.demo.AlbatrossDemoMainActivity.getCaller(android.view.View)[3]->move-result-object v0
qing.albatross.demo64 D/InstructionHooker: public void qing.albatross.demo.AlbatrossDemoMainActivity.getCaller(android.view.View)[4]->iget-object v1, v5, Landroid/widget/TextView; qing.albatross.demo.AlbatrossDemoMainActivity.textView // field@49
qing.albatross.demo64 D/InstructionHooker: public void qing.albatross.demo.AlbatrossDemoMainActivity.getCaller(android.view.View)[6]->new-instance v2, java.lang.StringBuilder // type@TypeIndex[49]
qing.albatross.demo64 D/InstructionHooker: public void qing.albatross.demo.AlbatrossDemoMainActivity.getCaller(android.view.View)[8]->invoke-direct {v2}, void java.lang.StringBuilder.<init>() // method@41


2025-8-17 22:11
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
91
万里星河 实现了samli动态反编译public&nbsp;void&nbsp;instruction(View&nbsp;view)&nbsp;throws&nbsp; ...
可以,为你点赞
2025-8-17 23:04
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
92
WanQing 可以,为你点赞
感谢大佬谬赞
2025-8-17 23:24
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
93
不过小米6还是有问题 安卓15 lineageos
2025-8-18 15:31
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
94
万里星河 不过小米6还是有问题 安卓15 lineageos[em_006]
方法hook的修复了,我看lineageos 编译出的libart有些方法没有内联,有些内联进去了,指令hook的在修复中。
2025-8-18 20:35
0
雪    币: 46
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
95
万里星河 不过小米6还是有问题 安卓15 lineageos[em_006]
Android5 lineageOs实测v1.0.9没问题了,你拉取代码试试
2025-8-20 08:42
0
雪    币: 4080
活跃值: (3525)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
96
好好学习天天向上
2025-8-20 09:30
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
97
WanQing Android5 lineageOs实测v1.0.9没问题了,你拉取代码试试[em_020]
大佬太强辣 我抽时间试试
2025-8-20 10:26
0
雪    币: 241
活跃值: (251)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
98
学习一下!!!
2025-8-23 16:35
0
雪    币: 240
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
99
万里星河 大佬太强辣 我抽时间试试[em_014]
已测试 小米6 lineageos 安卓15 运行正常 
2025-8-24 12:23
0
雪    币: 717
活跃值: (1145)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
100
666666
2025-8-24 21:57
0
游客
登录 | 注册 方可回帖
返回