android 逆向ida,浅谈安卓逆向协议(四)- ida pro - 小红书
文章仅提供思路,千里之行,还要靠各位自己努力,不喜勿看。
重头戏-小红书。这是相比前几个最难的了。为什么?看下面娓娓道来。
小红书互联网上真是没搜到解决方案,主要是sign验签和shield验签,sign签名网上有个python版,经过我验证,正确,我就没细看(2019.12.12文尾补充出来代码)。因为这几天比较忙,还没把小红书方案上线。但小红书shield,让我困扰了整整两周多,最后搞定。
小红书做了模拟器检测,如果你是模拟器一直提示你要升级,这块我没细细研究,我直接换了真机。后来我发现了它更多的验证,绕了很多路,重刷了原生系统。不过后来我解决了native的验证,那时我才觉得,可能我不需要这么麻烦。小红书是我弄的最久的,可能接近三周,也学到了很多东西。
小红书shield在libshield.so中。所以jdax不用搜了,浪费时间。最初我也百搜不得其姐,后来我得到了姐姐,思路就打开了。
JAVA层:
小红书做了Debug.isDebuggerConnected的防调试验证,xposed绕过,其他方式绕过都行。这里我采用了其他方式绕过。因为xposed我不是很精通。
然后小红书Retrofit调用create唤起okhttp3的addInterceptor劫持再调用RedHttpInterceptor的intercept函数再调用native函数process
当然初始化native函数initializeNative在引入这个类的时候就调用了,本来想直接引入SO构造Retrofit实现获取sign,但是它上下文太强了,根本无法猜测到它到底是什么类型,传入一模一样的值进去。通过抓包发现,它在so里调用了process方法,根本不会让你在外拿到sign,所以它上下文关联和复杂,相比之前的快手、抖音、最右是最麻烦的。试了几次,抓包发现,模拟构造后发送的shield都为空。
这时候就会发现xposed和frida在这种上下文关联太强的apk中,分析起来也比较乏力。因为参数类型太复杂。
当然后来跟大神们交流中得知,还是有人通过xposed完成对它的模拟调用。
NATIVE层:
初始版的libshield.so,inline-hook技术是用不了的,因为它里面加了两层验证。验证不过就给你while(1)循环
sub_E9AC处的"proc/%d/status",获取"TracerPid"判断自己是否被调试
为了这个,花了我一周多时间刷小米8青春的boot.img,因为我要找一个原生anroid8.1支持xposed的系统。
但实际上并不需要这样操作,直接绕过就好了,但是既然走上了逆向的路,一定要一个完美的逆向真机系统。
还有sub_F104处的Signature的hashCode都得绕过
最后hook-inline
最后通过对native层的hook和ida pro分析,才完成了对小红书shield的逆向。附上成功截图
-----------------------
2019.12.12,最近已经在弄6.2*的版本了,新版shield基本已经过了。
6.2*hook_inline截图
之前,有人找不到sign的算法,我把之前网上的python版本经过我的简单修正版(更满足伸手党直接测试)的贴出来。里面的deviceId、device_fingerprint、versionName、t我做了***,因为涉及我的设备信息,我不能因为共享算法把自己的设备弄封了,你们可以根据自己实际遇到的url进行操作,我在python3.7下测试过,有截图。
import hashlib
Arr ={"platform":"android","deviceId":"*******","device_fingerprint":"******","device_fingerprint1":"","versionName":"*****","channel":"Guanfang","sid":"","lang":"zh-Hans","t":"1575096***"};
def md5hex(word):
m = hashlib.md5()
m.update(word.encode("utf-8"))
return m.hexdigest()
def sortedDictValues3(adict):
keys = adict.keys()
keys.sort
return map(adict.get, keys)
def get_sign(Arr):
Str=''
Keys=sorted(Arr.keys())
for item in Keys:
if item!='':
Str=Str+item+'%3D'+Arr[item]
deviceId=Arr['deviceId']
v1_2 = bytearray(Str, 'utf-8')
v5_1 = ''
v3_2 = 0
v2 = 0
v4_1=bytearray(deviceId, 'utf-8')
while v2
算法我校验过再发的,我只能帮你们到这了,shield是逆向的一个分水岭,加油了各位
拿到签名的方式有很多例如,1:xposed的hook,2:嵌入SO调用native层函数,3:unicorn模拟arm中调用函数,4:Ida pro 逆向汇编翻译成C++等。
android逆向交流QQ群:290081995,这个行业比较封闭,让我们共同进步。转载请保留版权。
android 逆向ida,浅谈安卓逆向协议(四)- ida pro - 小红书相关推荐
- 浅谈安卓逆向协议(四)- ida pro - 小红书
文章仅提供思路,千里之行,还要靠各位自己努力,不喜勿看. 重头戏-小红书.这是相比前几个最难的了.为什么?看下面娓娓道来. 小红书互联网上真是没搜到解决方案,主要是sign验签和shield验签,si ...
- 浅谈安卓逆向月报(1)- 抖音 - ida - native层F5伪代码堆栈平衡修复
这章主要聊聊如何修复可以F5伪代码 以最新的抖音840的so为例,这边仅仅说下如何修复F5,解决"positive sp value has been found"错误提示. 后续 ...
- 浅谈安卓逆向协议(三)- 最右
文章仅提供思路,千里之行,还要靠各位自己努力,不喜勿看. 最右android我给它分为,封前版和封后版,封后版多了一个报文的解密,其实也是能破解的.但是这里谈的是封前版,仅有sign验签. 打开jda ...
- 浅谈安卓逆向协议(五)- 脱360加固 - 皮皮搞笑
文章仅提供思路,千里之行,还要靠各位自己努力,不喜勿看. 皮皮搞笑和最右同出师门,目前最新的1.8.3,就一个sign验签 本来很高兴的jdax打开APK,一看,我擦勒,什么鬼,360加固了. 本来想 ...
- android 加固作用,浅谈安卓apk加固原理和实现
二.apk加固原理 (1)apk文件结构 解压一个apk包,可以看到如下目录结构: assets:存放工程资源(图片.本地html等)文件的目录 Lib:存放ndk编译出来的so文件(so:C/C++ ...
- android 系统升级 方法,安卓系统怎么升级 浅谈安卓系统更新升级的几种方法
最近有网友问小编"安卓系统怎么升级?",针对该问题,笔者也在网上查找了下相关资料,不过并没有找到什么有价值的相关介绍,多数都是介绍如何自动升级.或者下载升级版包等等方法,对于一些常 ...
- 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台
一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...
- 什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战
简单地来说,安卓逆向是对已经打包好的APP进行反编译.源码分析了解APP实现逻辑的一门技术.我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包,逆向就是要最大程序地还原出APK打包之前的源码. ...
- android获取apk名称_安卓逆向——APK安装流程
制丨文生 整理丨阿星 很多学习安卓逆向的朋友大多都会卡在安卓apk上,今天小生就来给大家讲解一下,安装apk的流程,希望能帮助到大家. 安装方式: ⑴系统程序安装 ⑵通过Android市场安装 ⑶手机 ...
最新文章
- 这个北航妹子也太卷了...
- python中options设置_如何在AngularJS的ng-options中设置value属性?
- VR與AI的激情相遇
- 随机森林分类器_建立您的第一个随机森林分类器
- python读取mysql数据_Selenium(Python) ddt读取MySQL数据驱动
- 百度UEditor编辑器使用(二)
- 促销海报模板|经典蓝的带着「节日促销」来搞事情了!
- php 向上取整_PHP取整方法小总结
- hadoop1.1.2集群安装指南
- C#反编译工具ilspy下载地址
- 使用JFlash烧写boot教程
- 软件测试的步骤和方法
- 数字音频功放芯片型号与应用介绍
- Opencv -- 13像素值统计及平均值和方差的意义
- 第四章:jQuery动画
- mtk平台android编译命令,MTK 常见的编译命令
- ie8兼容性视图灰色修复_IE8兼容性视图怎么关闭 IE8兼容性视图设置关闭方法
- 查询出学生表中年龄和分数相同的所有同学的名字
- oracle中的trim函数使用介绍
- 通知 | 2022年度“RONG”奖学金入围答辩名单公布