Android逆向之115网盘5.2.2apk签名校验so破解并干掉长广告

在使用115网盘的时候,发现里面的离线下载功能的在线视频观看功能竟然有10分钟的广告时间,于是开始萌生尝试破解的它的想法,首先声明,本帖只作为技术研究,请读者遵守相关法律法规,不要侵犯以他人的商业利益为目的进行相关破解行为。

由于之前破解过多个apk 修改里面的smali代码研究相关的技术,所以刚开始我解开115网盘apk的时候,虽然看到里面的代码混淆了,经过一番研究之后,还是找到了广告的两个关键位置,一个开始播放前的10分钟内广告,一个是滑动进度条的时候的5到11秒随机长度广告,两个都是在VideoVitamioPlayActivity这个类里面,如下图:

找到VideoVitamioPlayActivity.smali文件,并找到上面图中两个位置的smali代码并删掉,重新编译成classes.dex文件,替换原来apk 包里面的相应文件,重新签名,放到手机安装成功。可总是打不开,我立刻把手机连接上电脑,看logcat输出,发现里面输入一个error,大大的“Illigal APP...”几个字出现在我眼前,我顿时兴奋了,决定继续玩它下去。

在logcat中,我看到这是native层里面报出的错误,心想这肯定是在第一个activity或application里面调用native代码,果然在DiskApplication这个类的onCreate方法里面找到了一行代码EncryptNative.init(getApplicationContext());,于是跟踪进去 ,发现其调用了yyw_encrypt.so库,并有两个对外方法:

public static native String getLoginSign(String paramString1, String paramString2, String paramString3);

public static native void init(Object paramObject);

我开始尝试性的把DiskApplication里面的EncryptNative.init(getApplicationContext());删除掉再重新编译、运行。果然不出所料,APP可以运行起来了,可是在登陆的时候还是被强制关闭了,logcat依然输出大大的“Illigal APP...”。

这会我开始把yyw_encrypt.so扔进IDA pro,研究这两个方法的实现逻辑,如下图

从上图的方法可以看出来,init方法里面获取apk当前的签名经过sha1转换后与设定的两个sha1值进行相等比较,并把比较结果放到IS_CORRECT全局变量里面,只要一个相等,就会正常结束方法,否则跳转到loc_1720地址处弹出提示并关闭APP。而第二个方法:

从getLoginSign 方法的执行流程中可以看出这方法首先会判断IS_CORRECT是否等于1,如果不等于的话就跳转到loc_1458处执行,执行提示“Illigal APP...”和关闭app动作。而等于的话就直接进行登陆sign字符串的转换,而这个地方恰恰是没有和当前签名的sha1值进行相关运算,只是把参数里面的几个字符串进行相关运算返回一个结果 ,所以破解它的方法就轻松看出来了,只到把init的CMP处理的R9改成1就可以了,而为了达到这个目的,可以在很多地方入手,经过一番研究,最后我选择了equals函数入手,因为这是最简单方便的,只有init方法里面的两处调用,不会影响其它地方:

如图,在equals方法执行的最后面,R0作为返回数据存入的寄存器,里面存入的是判断结果,只要把R0存入立即数1,就可以返回相等的判断结果,于是开始查阅ARM的指令机器码(ARMv7-M Architecture Application Level Reference Manual),查询16位的Thumb指令的MOV立即数,在A6.7.75章节找到了这指令的相关说明:

根据文档说明 可以得到MOV R0,#1的机器码为:20 01,接着找到equals方法MOV R0,R5指令的所在位置为000015FB,打开Ultraedit,把000015FB的28 46改成01 20,改了之后再从IDA打开libyyw_encrypt, 里面的指令已经变成MOVS R0,#1,如下图所示:

由于修改的是armeabi-v7a里面的so,还需要修改armeabi里面的so, 虽然会有点区别,但是这个MOVS R0,#1指令在两个版本的ARM指令中是一样的,以同样的方法替换原来的机器码,过后替换掉原来apk中的so文件,重新签名,运行,登陆,离线播放,一切正常,成功干掉长广告,至此,破解终于完成。

时间: 2024-10-17 00:07:04

Android逆向之115网盘5.2.2apk签名校验so破解并干掉长广告的相关文章

模拟登陆115网盘(MFC版)

[cpp] view plain copy // 模拟登陆115网盘 #include <afxinet.h> // 包含相关的头文件 /* 用抓包工具抓包可得到需要提交的数据,然后模拟提交即可. *(有的时候需要得到cookie信息,你可以使用CInternetSession::GetCookie()函数得到该cookie信息)*/ [cpp] view plain copy try { #define MAX_COUNT 1024 CInternetSession session(_T(&

Android Studio各版本网盘下载地址(持续更新)

0.3.2 带SDK 无SDK 0.3.1 linux: http://dd.ma/PkslVZNz max: http://dd.ma/BUrzqUYN windows: http://dd.ma/fJITsRHP 0.3.0 linux: http://dd.ma/EEJVu0Sh mac: http://dd.ma/BHwcWOJU windows: http://dd.ma/4MRoajTv 0.2.13 mac: http://dd.ma/vJIfNC7Y linux: http://

Android 中带你开发一款自动爆破签名校验工具 kstools

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Android中带你开发一款自动爆破签名校验工具kstools - 生死看淡,不服就干! - 博客频道 - CSDN.NET 生死看淡,不服就干! http://www.wjdiankong.cn 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &n

android源码百度网盘分享

转载请标明出处: http://blog.csdn.net/yujun411522/article/details/46334123 本文出自:[yujun411522的博客] 最近在使用Ubuntu搭建android环境时,下载android源码速度实在太慢.好在已经下完了,为了不浪费大家的时间,所以这里分享一下,已经上传到百度网盘,地址:http://pan.baidu.com/s/1eQ4I4q2

Android中带你开发一款自动爆破签名校验工具kstools

一.技术回顾 为了安全起见,一些应用会利用自身的签名信息对应用做一层防护,为了防止应用被二次打包操作,在之前已经介绍了很多关于应用签名校验爆破的方法,一条基本原则不能忘:全局搜索"signature"字符串,这里可以在Jadx打开apk搜索,也可以在IDA中打开so搜索都可以.找到这信息之后可以手动的修改校验逻辑,但是这个法则有个问题,就是如果一个应用在代码中很多地方都做了签名校验,比如以前介绍的一篇爆破游戏文章:Android中爆破应用签名信息案例分析,那时候就会发现,应用在很多地方

苹果手机那里找115网盘资源

在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈.博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你. 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积.不断沉淀.不断总结.善于传达自己的个人见解以及乐于分享的过程. 文章目录

教程115网盘怎么找资源

[十 薇:T77554][诚信经营][持续更新][品种繁多][任意挑选][质量有保障] 随着百度生态环境及算法改变,内容质量对于搜索引擎来说越来越重要了,那么信息的实时传达到蜘蛛抓取是每位站长必须做到的事情了,链接提交工具是网站主动向百度搜索推送数据的工具,工具可缩短爬虫发现网站链接时间,网站时效性内容建议使用链接提交工具,实时向搜索推送数据.本工具可加快爬虫抓取速度,无法解决网站内容是否收录问题. 站长工具百度度推送分为**“自动提交”和“手动提交”**,手动提交是最简单直接的方式,然而也是最

115网盘怎么找资源

AIDL文件编写, 教程很多, 我这里就不详细说明了, 需要注意的是, 由于我们要实现回调功能, 所以必须写一个回调接口 IEventCallback, 另外AIDL文件中 oneway 关键字表明调用此函数不会阻塞当前线程, 调用端调用此函数会立即返回, 接收端收到函数调用是在Binder线程池中的某个线程中. 可以根据实际项目需求选择是否需要加 oneway 关键字. AIDL只支持传输基本java类型数据, 要想传递自定义类, 类需要实现 Parcelable 接口, 另外, 如果传递基本

那里找115网盘资源卖的人

云原生是当下的热点话题,但是很多人对云原生有很多误解,特别是传统产业物联网或工控.物联网行业对云原生显得"后知后觉".与其在这里说是预测,不如说是现在进行时,只是由于传统产业本身的技术包袱和组织个人认识程度差异,目前发展并不见快.目前大部分的系统还是停留在旧年代,只是不到火候,还没到尝鲜和推倒重来的必要.但是,面对未来业务的持续增长和行业竞争,必然要面临一个技术的现代化转型升级,即:使用新技术代替老技术,使用新观念代替老观念的痛苦过程.否则老系统必然会变成企业发展的一个瓶颈,因为基于老