记一次 app 逆向的过程

2,297 阅读3分钟
原文链接: www.jianshu.com

记一次对app逆向的过程,主要分享下遇到的问题和解决的思路及方法。

对M站做个简单的数据抓包监控,首先想到直接调用官方app的数据接口——简单而且数据结构简单!

下面是分析该app客户端和服务器的数据交互的笔记。

早期曾经对它app反编译分析过,基本情况是:

app有混淆、无进一步处理,用现成的工具反编译就成功、客户端https连接服务器。

当时看到https连接,抓包毫无头绪的时候,发现它的api用http访问也可以(这个是后文存在的前提,所有工作都是围绕这个前提进行的),幸福来的太突然,smali文件查找https修改为http,重新打包跑起来,然后tcumpdump

下载安装,几个版本升级后,发现他们加强了安全:

app针对逆向做了进一步措施。第一,防反编译处理,试用了几款软件,执行反编译的时候直接异常退出去了,估计是针对做了处理。第二,跟服务器交互的url都用c写了,放在lib目录下liburl.so,增强了反编译难度。

如何下手?

网上查找方法,发现so文件可以用IDAPro6.6(逆向工具)打开查看,下载安装打开,url全部出来了。


IDAPro6.6查看so文件内容


准备使用上次那招https改http然后正常跑,再抓包工具看url和请求的变量,可现在有两个问题:

1、so文件如何修改?
2、修改后如何打包回来?

首先,使用工具010Editor(16进制查看工具)直接修改so文件字符。

遵从一个原则:
在修改文件的内容的时候,一定不能影响到其他内容的地址,这样会导致其他信息的偏移值发生变化之后,代码就会异常报错的。

有以下集中情况以及处理方法:
1、如果修改的字符串的长度和源字符串的长度相等,直接替换就可以。
2、如果修改的字符串的长度比源字符串的长度短,需要用空字符串进行补齐。<----我们用此方法,https更改为空格+http< code="">
3、如果修改的字符串的长度比源字符串的长度要长,添加补位字符串,然后修改源字符串在代码中的指针(相对地址)。


搜索"https"后,跟ida查看的内容一样,有两个https,在右边文本栏,直接把https更改为空格+https即可(前后差异见下图,选中的蓝底内容)。


010Editor修改so文件内容


其次,用修改后的文件替换apk安装解压的so文件,路径在/data/data//lib/liburl.so,替换后重启app就可以http浏览数据。

ps:一般抓包方法,使用小米随身WIFI,手机链接热点,设置ip为Charles的代理端口地址。

参考文章