吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7138|回复: 103
收起左侧

[Android 原创] 某Dong读书专业版校园ip身份认证Hook

  [复制链接]
wzvideni 发表于 2024-10-26 22:31
本帖最后由 wzvideni 于 2024-10-26 23:12 编辑

前言:
不知道怎么回事,用了几年的看书软件突然要验证了,要正常的过验证得在相应校园的ip才行,我是几年前用测试码注册了一个绑定了手机号一直用到现在,自然是没法正常验证了,不知道有没有其他人遇到这种情况。

说实话这个软件的确很良心,突然不能用了有点难受,我在搜索了一番也没有找到解决方案,目前唯一的解决办法就是用HttpCanary重写相应验证的网络请求响应,但是得每次启动都把HttpCanary打开才行,麻烦但是能行。

看着剩余时间从15天到了现在的3天,每次打开都能看见这个验证,怎么彻底解决这个问题一直困扰着我,今天闲着的时候顿悟,我学了安卓开发,又学了安卓逆向,解决这个问题不是手到擒来,只可惜学逆向看的教程用的Hook方法和我想用的不一样就没上手练过,这次算是有机会给我练练了,就这么有了这篇记录。

验证提示截图:
Screenshot_20241026-211421_Matrixx Home.png

分析:

由于之前用HttpCanary抓包分析了相应验证,就打算Hook相应验证的网络请求的方法,在验证前改写网络请求回调传入的参数。

首先身份验证请求的链接是:https://tob-api.jd.com/tob/api/college/user/verify/info……

返回的参数是json数据:{"data":{"need_verify":true,"verify_state":0,"start_prompt_time":1728884471000,"remain_verify_days":3},"result_code":0,"message":"SUCCESS"}

没有加密,意思也很明确了,改写need_verify和verify_state就可以了

现在就是怎么Hook相应的网络请求验证方法了

首先要先找到验证的方法,我通过搜索相应的数据类属性来查找的调用处,由于开发的时候通常都是这么写的,我想这个App应该也是这样,那么就用Jadx打开apk文件反编译代码,尽量搜索唯一的关键字,我选择的是start_prompt_time,直接搜start_prompt_time或者startPromptTime,直接搜start_prompt_time没有找到,搜startPromptTime就有了,如下图所示:
2024.10.26_215502.png

跳转过去后就看到数据类实体了,和网络请求返回的一样,如下图所示:
2024.10.26_215630.png

然后右键VerifyInfoEntity点击查找用例,找到这个实体类在哪被使用了,跳转后的截图如下:
2024.10.26_220000.png

很明显UserVerifySelectAction类中的内部类a的j方法就是身份验证的的网络请求回调,里面还有计算时间的代码,100%确定了。

代码位置找到了,现在就是编写lsposed模块来持久化Hook了,由于我学的Hook是跟着论坛里的教程学了,用的是java,但是我不想写java,又因为很久没写java不会写了,只会kotlin。

正好有大佬编写了一套Kotlin的Hook:YukiHookAPI,首先用YukiHookAPI构建工具创建了一个lsposed项目模板,再用Android Studio打开,边看文档和示例代码就开始写了,期间不会的就问chatgpt了,想不到chatgpt连安卓逆向也会,Ai真的太强大了

顺带用同样的方法把启动页给关掉了,每次启动都要等3秒,虽然显示的不是广告,但是和广告达到了同样的效果,让用户点跳过或者等3秒……,不过现在清爽了

最终核心代码20行不到,我之前还一直以为Hook会比开发要难,结果出乎我的意料,不过仔细想想,也是因为有各个大佬开发的框架,才可以这么便利的Hook,感谢大佬!

论坛的代码插入居然没有Kotlin,那就选java吧,实际上是Kotlin,核心代码如下:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
@InjectYukiHookWithXposed
class HookEntry : IYukiHookXposedInit {
 
    override fun onInit() = configs {
        configs {
            debugLog {
                tag = "JingDongReaderCampus"
                isEnable = true
                isRecord = false
                elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)
            }
            isDebug = true
            isEnableModuleAppResourcesCache = true
            isEnableHookSharedPreferences = false
            isEnableDataChannel = true
        }
    }
 
    override fun onHook() = encase {
 
        loadApp(name = "com.jingdong.app.reader.campus") {
 
            // 注册模块 Activity 代{过}{滤}理
            onAppLifecycle {
                onCreate { registerModuleAppActivities() }
            }
 
            val headersClass by lazyClass("okhttp3.Headers")
             
            // Hook验证
            "com.jingdong.app.reader.main.action.UserVerifySelectAction\$a".toClass().apply {
                method {
                    name = "j"
                    param(IntType, headersClass, StringClass)
                }.hook {
                    before {
                        // 修改传入的参数 `str`
                        args[2] =
                            "{\"data\":{\"need_verify\":false,\"verify_state\":1,\"start_prompt_time\":1728884471000,\"remain_verify_days\":365},\"result_code\":0,\"message\":\"SUCCESS\"}"
                    }
                }
            }
 
            // Hook启动页
            "com.jingdong.app.reader.logo.action.GetSplashImageAction\$a".toClass().apply {
                method {
                    name = "j"
                    param(IntType, headersClass, StringClass)
                }.hook {
                    before {
                        // 修改传入的参数 `str`
                        args[2] =
                            "{\"data\":{\"has_adv\":false,\"name\":\"浙江大学的启动图\",\"pic_address\":\"https://img10.360buyimg.com/ebookadmin/jfs/t1/194181/34/42246/108158/655abb8cF1a52e14c/e9fe15f9f3072098.png.dpg\",\"jump_type\":0},\"result_code\":0,\"message\":\"SUCCESS\"}"
                    }
                }
            }
        }
    }
}


下载地址:

蓝奏云:https://wwur.lanzout.com/b0pm3gdza
密码:jdds

免费评分

参与人数 16吾爱币 +26 热心值 +16 收起 理由
猎奇者 + 1 + 1 谢谢@Thanks!
guoruihotel + 1 + 1 谢谢@Thanks!
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
sunnylds7 + 2 + 1 谢谢@Thanks!
ab.zhang + 1 + 1 鼓励转贴优秀软件安全工具和文档!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
52pojielogo + 1 + 1 我很赞同!
0qxqy0 + 1 + 1 我很赞同!
qianxungigi + 1 + 1 谢谢@Thanks!
jaffa + 1 谢谢@Thanks!
xys3 + 1 + 1 刚看,要求15天完成身份认证
夫子点灯 + 1 + 1 我很赞同!
helian147 + 1 + 1 热心回复!
laozhang4201 + 1 + 1 热心回复!
shengruqing + 1 我很赞同!
Issacclark1 + 1 谢谢@Thanks!

查看全部评分

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

kaka0000 发表于 2024-10-26 23:31
感谢大神分享,解决了我得大问题
 楼主| wzvideni 发表于 2024-10-31 21:27
huijcbit 发表于 2024-10-31 13:18
手机,p40pro,鸿蒙系统,未root,今天更新了专业版,安装了hook程序,打开软件提示:“请完成身份认证,否 ...

未root的话可以使用LSPatch,LSPatch需要用Shizuku,Shizuku需要激活,Shizuku官网激活教程:https://shizuku.rikka.app/zh-hans/guide/setup/#%E9%80%9A%E8%BF%87%E6%97%A0%E7%BA%BF%E8%B0%83%E8%AF%95%E5%90%AF%E5%8A%A8,激活后就可以LSPatch修补目标应用,然后安装修补后的apk,再选择模块作用域,选择hook模块,然后就可以使用了,我已经测试过没问题了,如果没有效果可以杀死目标应用再打开试试,LSPatch和Shizuku我待会儿上传到帖子底部的蓝奏云链接
mymon 发表于 2024-10-26 23:05
 楼主| wzvideni 发表于 2024-10-26 23:09
mymon 发表于 2024-10-26 23:05
大神牛,还需要登录吗?

没有Hook登录的身份认证,只Hook了登录后的需要校园IP的身份认证,还是需要登录的
289051401 发表于 2024-10-26 23:09
确实免去验证过程方便多了
666888tzq 发表于 2024-10-26 23:34
大佬厉害。
星落黎明 发表于 2024-10-27 00:13
这样没啥用吧,这只是把这个提示去掉了,不验证,后台应该会把账号的权限关了,后面可能会直接登录不上。
RyesLai 发表于 2024-10-27 00:17
暂时还没遇到,先收藏备用
Kzs 发表于 2024-10-27 00:39
大佬厉害
guangyingcuojue 发表于 2024-10-27 00:50
厉害了这个
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-3-20 04:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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