吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6361|回复: 26
上一主题 下一主题
收起左侧

[Android 原创] Android hook so 库中函数

  [复制链接]
跳转到指定楼层
楼主
wxkly8888 发表于 2021-12-7 14:20 回帖奖励
本帖最后由 wxkly8888 于 2021-12-7 14:24 编辑

最近博主发现一个android 反编译神器 androidFaker,这个工具能hook java 和so库中的函数,甚至可以直接将apk 打开为AndroidStudio标准工程直接run起来。

传送门:FakerAndroid

博主想着能否借助这款神器,来破解下之前《教我兄弟学Android逆向系列课程》中的apk签名验证。最终成功实现了原文的目标:

爆破李华Demo中的用户名和密码 要求输入任意用户名和密码 会提示登陆成功

没有看过这系列文章的同学可以去看看,写的很不错,附传送门:

《教我兄弟学Android逆向系列课程+附件导航帖》
《教我兄弟学Android逆向08 IDA爆破签名验证》

本文的demo 不需要手机root, 不需要修改arm指令,所需要的仅仅是

`1. 待破解的apk

  1. Android Studio(带AndroidFaker的插件,不会装插件的同学可以参考下fakerAndroid 的github的说明)
  2. IDA, 用于so库的函数地址的查找`
FakerAndroid打开Apk文件

通过Android studio 直接打开源apk文件

打开之后的项目目录如下:

hook so库函数
  1. 通过《教我兄弟学Android逆向08 IDA爆破签名验证》我们知道,源apk在so方法中做了签名以及用户名密码校验。

    主要是check 这个jni方法。

    package demo2.jni.com.myapplication;
    
    public class myJNI {
       static {
           System.loadLibrary("JniTest");
       }
    
    public native String check(Object arg1, String arg2, String arg3) {
    }
    
    }

    2.通过IDA 打开源apk文件中的libJniTest.so库,查找check函数偏移地址。

    这里需要注意的是选取正确的so文件,,如果你的手机是armeabi-v7a的,需打开armeabi-v7a 文件夹下的so文件,如果是V8的 需打开armeabi-v8a的so文件。我这个demo跑在模拟器上,所以我这边需要打开的是x86文件夹下的so文件。

  1. 在native-lib.cpp文件进行so库函数的hook

    Java_com_fakerandroid_boot_FakerApp_fakeApp这个回调函数中里进行hook,  其中functionAdress填入刚才check函数的偏移地址。

    fakeCpp 将源地址的函数替换成我们的hook 函数。这里我们在fakerMethod 直接返回 登录成功,代码如下:

    jstring fakeMethod(JNIEnv *env){:
       LOGI("fake method called");
       jstring toast = env->NewStringUTF("登录成功");
       return toast;
    }
    extern "C"
    JNIEXPORT void JNICALL
    Java_com_fakerandroid_boot_FakerApp_fakeApp(JNIEnv *env, jobject thiz, jobject application) {
        //so库在内存的基准地址  
        long base = baseImageAddr("libJniTest.so");
        LOGE("baseImageAddr : %ld",base);
        //通过IDA获取此方法的地址0x000006E0;
        long functionAdress=base+0x000006E0;
        LOGE("functionAdress : %ld",functionAdress);
       //将源方法替换成我们自己的fakeMethod
        fakeCpp((void *) (functionAdress), (void *) fakeMethod, reinterpret_cast<void **>(&functionAdress));
    }

4.打包测试

fakerAndroid 厉害的地方在于反编译之后可以直接在android studio中run起来,当然你也可以重新签名源apk。最后看下效果图:

至此,成功hook了源apk中的check函数。
演示代码地址:https://pan.baidu.com/s/1SjPrfIfdVQ06pBfXlhXndg  密码:npba

免费评分

参与人数 9吾爱币 +13 热心值 +9 收起 理由
新手来脱机 + 1 + 1 谢谢@Thanks!
jolin7714 + 1 + 1 谢谢@Thanks!
w7191511 + 1 谢谢@Thanks!
幽溪左畔 + 1 + 1 谢谢@Thanks!
94udgs + 1 + 1 我很赞同!
wangyftr + 1 + 1 我很赞同!
tangyuan852 + 1 我很赞同!
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
笙若 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| wxkly8888 发表于 2021-12-8 10:13 |楼主
无闻无问 发表于 2021-12-7 19:13
最终还是需要ida去分析so嘛…

IDA的作用是获取函数的偏移地址,不需要去分析及修改arm指令,其他工具也能做到的
推荐
Sinozo 发表于 2024-11-20 17:52
你好 想请问一下用的As版本和Gradle的版本 我之前使用的As版本不明白为什么没有办法导入插件
沙发
wantwill 发表于 2021-12-7 15:53
3#
52new 发表于 2021-12-7 16:04
终于有人发fakeandroid的教程了
4#
水木青枫 发表于 2021-12-7 17:37
谢谢分享
5#
longforus 发表于 2021-12-7 18:07
谢谢分享,又发现了一个好东西, 虽然麻烦了一点,但是在特殊的时候,可能会很有用
6#
无闻无问 发表于 2021-12-7 19:13
最终还是需要ida去分析so嘛…
7#
dipper 发表于 2021-12-7 21:11
谢谢分享,很好的教程
8#
luoye1997 发表于 2021-12-8 08:47
解决了这个问题,谢谢
10#
o0蜗牛 发表于 2021-12-8 10:18
非常感谢详细讲解
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 02:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表