记一次对app逆向的过程,主要分享下遇到的问题和解决的思路及方法。
对M站做个简单的数据抓包监控,首先想到直接调用官方app的数据接口——高效且数据结构简单!
早期曾经对它app反编译分析过,基本情况是:
app有混淆、无进一步处理,用现成的工具反编译就成功、客户端https连接服务器。
当时看到https连接,抓包毫无头绪的时候,发现它的api用http访问也可以(这个是后文存在的前提,所有工作都是围绕这个前提进行的
),幸福来的太突然,smali文件查找https修改为http,重新打包跑起来,然后tcumpdump
。
下载安装,几个版本升级后,发现他们增强了安全方面:
app针对逆向做了进一步措施。第一,防反编译处理,试用了几款软件,执行反编译的时候直接异常退出去了,估计是针对做了处理。第二,跟服务器交互的url都用c写了,放在lib目录下liburl.so,增强了反编译难度。
如何下手?
网上查找方法,发现so文件可以用IDAPro6.6
(逆向工具)打开查看,下载安装打开,url全部出来了。
准备使用上次那招https改http然后正常跑,再抓包工具看url和请求的变量,可现在有两个问题:
1、so文件如何修改?
2、修改后如何打包回来?
首先,使用工具010Editor
(16进制查看工具)直接修改so文件字符。
遵从一个原则:
在修改文件的内容的时候,一定不能影响到其他内容的地址,这样会导致其他信息的偏移值发生变化之后,代码就会异常报错的。
有以下集中情况以及处理方法:
1、如果修改的字符串的长度和源字符串的长度相等,直接替换就可以。
2、如果修改的字符串的长度比源字符串的长度短,需要用空字符串进行补齐。<----我们用此方法,https更改为空格+http
3、如果修改的字符串的长度比源字符串的长度要长,添加补位字符串,然后修改源字符串在代码中的指针(相对地址)。
搜索"https"后,跟ida查看的内容一样,有两个https,在右边文本栏,直接把https更改为空格+https即可(注意,不是直接删除s!修改前后差异见下图蓝底内容
)。
其次,用修改后的文件替换apk安装解压的so文件,路径在/data/data/<packname>/lib/liburl.so
,替换后重启app就可以http浏览数据。
ps:一般抓包方法,使用小米随身WIFI
,手机链接热点,设置ip为Charles
的代理端口地址。
1、Charles 菜单 “Proxy”->”Proxy Settings”,代理端口 8888,打勾 “Enable transparent HTTP proxying” 。
2、Charles 所在 IP 地址,Charles 顶部菜单 “Help”->”Local IP Address”。
3、iPhone “ 设置 “->” 无线局域网 “ 中,wifi 详情「HTTP 代理」一项,我们将其切换成手动,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888。