前段时间忙于找工作,现在好不容易有个闲暇,思来想去发个帖子活跃一下,在各大论坛潜水多年再不贡献点东西就太不好意思了。此贴仅作为入门贴,逆向之路万水千山,荆棘遍野,还需慢慢修炼才能炼成大神。
个人平时喜欢看各种视频,无奈广告满天飞,一怒之下就把爱奇艺广告去掉了,瞬间舒畅无比,从此看视频再也不烦躁了。先将破解步骤记录余下。
当前测试版本为7.7.1,版本号80771
一、签名校验
首先将apk包反编译后不修改任何内容重新打包安装到模拟器,发现能打开软件但是不能连接网络。初步判断有APK的签名校验,但是是在服务器端判断的,不是在本地判断的。最终经过各种折腾定位到libprotect.so中的JNI函数getContentJNI,该函数根据APK的签名经过各种运算得到一个固定的返回值。该值可以直接在调用该函数出添加Log语句输出获得。修改内容如下:
此处,直接将该值返回,重新打包安装测试能正常联网使用了。
二、更改广告请求服务器地址
通过抓取数据包分析发现,客户端播放视频时,客户端先向"http://api.cupid.iqiyi.com/mixer"发送GET请求,获取广告内容的URL地址,然后再向这些广告地址发送GET请求获取广告视频的内容。由以上分析获得思路是直接更改该广告请求服务器的地址,使其向错误的服务器发送请求,这样它是不可能获取到广告的URL地址的,因而也就不会再播放广告了。修改内容如下:
修改之后在真机测试发现播放视频时已经没有广告了。
三、补充完善
经过以上修改在我的测试机三星Galaxy S3上面已经测试无误,但是再海马玩模拟器上面还是回播放广告。初步猜测,可能是根据硬件平台信息调用不同的接口函数造成的。因而还是从抓包数据分析,发现客户端还会向服务器地址"/php/xyz/entry/nebula.php"发送GET请求,但是该请求获取到的服务器响应的内容是JSON结构的数据,该数据包含视频地址和广告地址及其他一些信息。因而不能简单的将该GET请求地址改掉,这样就不能播放视频了。分析该JSON结构发现广告地址放在以"ad_str"为键的数据中,而在代码中要想获取广告地址必须通过该键获取,因而初步思路是将该字符串"ad_str"更改为该JSON结构中不存在的键即可,这样获取不到广告地址也就不会播放广告了。经过查找发现该字符串实在是太多了,也就不在精确定位位置了,直接将能搜索到的smali代码中的该字符串"ad_str"查找替换为其他字符串即可。
最终,经过以上三步之后,客户端在真机和模拟器上面基本可以无压力播放视频了,再也不担心广告的烦扰了。修改后的apk不在此发布,各位有兴趣可以自己动手尝试。
希望多顶贴,多赞,多回复!!!