从0开始逆向分析一个app 某点小说

前置条件

1.首先我们假设已经搭建好了抓包工具 charles
2.并且有一个可运行的虚拟或者真实设备 获取root权限,同时安装了adb
3.选择一款hook工具 此处选择frida
以上没有达成的可以找我历史文章

选择一款应用 某点小说

某小说应用为案例 比如我们想看小说的基本信息
去应用商店下载并且安装app到模拟器(优先低低版本 容易分析)
在这里插入图片描述
分析接口以后发现可以抓包但是没有数据

通过配置postern+charles可以解决这个问题
charles这么配,走socks5
在这里插入图片描述
然后模拟器装postern
在这里插入图片描述
可以抓到我需要的请求数据包了

在这里插入图片描述

开始hook app

但是启动客户端frida需要知道应用的包名

此处有一个命令 adb shell 进入手机命令行
dumpsys window windows|grep com
在这里插入图片描述
命令可以修改

此时反斜杠后面就是包名

有了包名就可以进行hook了,第一个思路hook 一个app的string构造函数

Java.perform(/*hook string的js方法*/
function hook_string_factory() {
    var StringFactory = Java.use('java.lang.StringFactory');
    StringFactory.newStringFromString.implementation = function (content) {
        console.log("java.lang.StringFactory.newStringFromString->" + content);
        var result = this.newStringFromString(content);
        return result;
    };
})

hook_string_factory()
进行hook 然后打印所有string构造
 frida -U -f com.qidian.QDReader -l .\hook-string.js -o output.log

打印结果就出现了
在这里插入图片描述

我们捕获到自己需要的字符串以后 可以通过if判断在里面打印一个堆栈 然后通过定位阅读反编译后的代码 ,一点一点分析请求参数 ,加密参数等等

在这里插入图片描述
此处的反编译工具推荐jadx ,jeb,gda等等

到了这里问题来了 string没有hook到我想要的参数

frida对map的put函数进行hook

于是我选择map进行hook,hook打印map中每个进行调用put的函数
当请求头包含borgus,或者qdsign的一些字符串时候 打印一个调用栈
在这里插入图片描述
打印结果如图

在这里插入图片描述

发现这个参数是一个native变量 需要取so中进行分析 介于为了写文章 so难度较大 就不展开说了
在这里插入图片描述

第一个参数经过hook发现是url
第二个参数是get/post 请求形式
第三个是responsebody ,就是请求头request的body

经过多次点击触发
发现第一个参数url 打印结果没有我想要的v3/bookdetail/get这个请求

调用so加密接口的地方不止一个

所以so调用同一套加密算法的入口应该不止一个位置

我放弃map调用栈的方式

后来我开始分析这个请求
在这里插入图片描述
这个url的请求部分除了url以外可以剩余的header选项都可以通过so层返回,这个结论是我hook上面的native函数得到的结论

接下来我把目标放到了拦截器上,就是发送一个请求到业务逻辑之前,已经得到返回结果渲染到页面之前都是经过N个过滤器interceptor

我还是hook map,不过是吧请求参数换了一个关键字 get参数

在这里插入图片描述
hook map ,包含isoutbook关键字就打印调用栈
终于我得到了完整的拦截器的调用栈
在这里插入图片描述
通过hook我发现请求头经过这两个拦截器的时候发生了变化,应该就是填充了borgus等一系列加密参数

但是我不知道borgus等参数的具体添加位置

我将目光放到了请求Request的addheader方法上 开始hook 没发现什么有价值的东西
在这里插入图片描述

在这里插入图片描述
但是通过尝试我通过调用栈发现了一个新的拦截器
在这里插入图片描述

通过打印发现所有我需要的请求体headers参数都来自java的native方法addRetrofitH

在这里插入图片描述

构造request请求传递到so层

看声明发现传递到native方法是一个对象(如何构造request对象?)
返回一个request (传入传出headers发生了什么) 答案就是 传入的header为空 传出的header加密参数全部填充完毕

到了这里 我手动拼凑了一个请求居然拿到数据了

因此我最后构造了一个代码
如下(可修改用作rpc)
在这里插入图片描述

构造请求发送然后打印出数据

这里的book_id找规律可以发现他们统一有一个103前缀,其他的位通过1开始递增轮询 应该就可以找到所有小说了

到这里小说的详情页就可以拿到了(通过遍历id+rpc构造请求)

案例仅适用于学习分析

具体代码可以参考github
https://github.com/victor-zhao-177/appspiderHook

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
某flutter-app逆向分析是指对于一个使用flutter框架开发的应用进行逆向工程分析。逆向工程是通过分析应用的代码、二进制文件等来了解其内部实现细节。 首先,我们需要获取该应用的安装包文件(APK或IPA文件),然后进行解包操作,将其转换为可读取的文件目录结构。 接下来,我们可以使用一些工具来提取应用的资源文件、代码文件等。对于flutter-app来说,可以提取出dart文件,这是flutter的主要代码文件,其中包含了应用的逻辑实现。 通过阅读dart文件,我们可以了解应用的代码结构、数据模型、界面设计等。可以分析应用的逻辑实现方法,包括各种函数、类、方法的调用关系。 同时,还可以通过分析相关配置文件、资源文件等来了解应用的各种设置、资源加载方式等。 在逆向过程中,还可以使用一些调试工具来进一步了解应用的运行机制。例如,hook工具可以拦截应用的函数调用,并捕获输入输出数据,用于进一步分析。 逆向分析的目的可以有很多,比如了解应用的工作原理、发现潜在的漏洞或安全问题、提供参考用于自己的开发等。 需要注意的是,逆向分析需要遵守法律规定。未经授权的逆向分析可能侵犯他人的知识产权,涉及到隐私等方面的问题。因此,在进行逆向分析之前,应该了解并遵守当地相关法律法规,避免产生法律纠纷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值