wzvideni 发表于 2024-10-26 22:31

某Dong读书专业版校园ip身份认证Hook

本帖最后由 wzvideni 于 2024-10-26 23:12 编辑

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

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

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

验证提示截图:


分析:
由于之前用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就有了,如下图所示:


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


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


很明显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,核心代码如下:

@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 =
                            "{\"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 =
                            "{\"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

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

大佬厉害。:lol

星落黎明 发表于 2024-10-27 00:13

这样没啥用吧,这只是把这个提示去掉了,不验证,后台应该会把账号的权限关了,后面可能会直接登录不上。

RyesLai 发表于 2024-10-27 00:17

暂时还没遇到,先收藏备用

Kzs 发表于 2024-10-27 00:39

大佬厉害

guangyingcuojue 发表于 2024-10-27 00:50

厉害了这个
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 某Dong读书专业版校园ip身份认证Hook