文章仅提供思路,千里之行,还要靠各位自己努力,不喜勿看。

重头戏-小红书。这是相比前几个最难的了。为什么?看下面娓娓道来。

小红书互联网上真是没搜到解决方案,主要是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 - 小红书相关推荐

  1. 浅谈安卓逆向协议(四)- ida pro - 小红书

    文章仅提供思路,千里之行,还要靠各位自己努力,不喜勿看. 重头戏-小红书.这是相比前几个最难的了.为什么?看下面娓娓道来. 小红书互联网上真是没搜到解决方案,主要是sign验签和shield验签,si ...

  2. 浅谈安卓逆向月报(1)- 抖音 - ida - native层F5伪代码堆栈平衡修复

    这章主要聊聊如何修复可以F5伪代码 以最新的抖音840的so为例,这边仅仅说下如何修复F5,解决"positive sp value has been found"错误提示. 后续 ...

  3. 浅谈安卓逆向协议(三)- 最右

    文章仅提供思路,千里之行,还要靠各位自己努力,不喜勿看. 最右android我给它分为,封前版和封后版,封后版多了一个报文的解密,其实也是能破解的.但是这里谈的是封前版,仅有sign验签. 打开jda ...

  4. 浅谈安卓逆向协议(五)- 脱360加固 - 皮皮搞笑

    文章仅提供思路,千里之行,还要靠各位自己努力,不喜勿看. 皮皮搞笑和最右同出师门,目前最新的1.8.3,就一个sign验签 本来很高兴的jdax打开APK,一看,我擦勒,什么鬼,360加固了. 本来想 ...

  5. android 加固作用,浅谈安卓apk加固原理和实现

    二.apk加固原理 (1)apk文件结构 解压一个apk包,可以看到如下目录结构: assets:存放工程资源(图片.本地html等)文件的目录 Lib:存放ndk编译出来的so文件(so:C/C++ ...

  6. android 系统升级 方法,安卓系统怎么升级 浅谈安卓系统更新升级的几种方法

    最近有网友问小编"安卓系统怎么升级?",针对该问题,笔者也在网上查找了下相关资料,不过并没有找到什么有价值的相关介绍,多数都是介绍如何自动升级.或者下载升级版包等等方法,对于一些常 ...

  7. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

  8. 什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战

    简单地来说,安卓逆向是对已经打包好的APP进行反编译.源码分析了解APP实现逻辑的一门技术.我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包,逆向就是要最大程序地还原出APK打包之前的源码. ...

  9. android获取apk名称_安卓逆向——APK安装流程

    制丨文生 整理丨阿星 很多学习安卓逆向的朋友大多都会卡在安卓apk上,今天小生就来给大家讲解一下,安装apk的流程,希望能帮助到大家. 安装方式: ⑴系统程序安装 ⑵通过Android市场安装 ⑶手机 ...

最新文章

  1. 这个北航妹子也太卷了...
  2. python中options设置_如何在AngularJS的ng-options中设置value属性?
  3. VR與AI的激情相遇
  4. 随机森林分类器_建立您的第一个随机森林分类器
  5. python读取mysql数据_Selenium(Python) ddt读取MySQL数据驱动
  6. 百度UEditor编辑器使用(二)
  7. 促销海报模板|经典蓝的带着「节日促销」来搞事情了!
  8. php 向上取整_PHP取整方法小总结
  9. hadoop1.1.2集群安装指南
  10. C#反编译工具ilspy下载地址
  11. 使用JFlash烧写boot教程
  12. 软件测试的步骤和方法
  13. 数字音频功放芯片型号与应用介绍
  14. Opencv -- 13像素值统计及平均值和方差的意义
  15. 第四章:jQuery动画
  16. mtk平台android编译命令,MTK 常见的编译命令
  17. ie8兼容性视图灰色修复_IE8兼容性视图怎么关闭 IE8兼容性视图设置关闭方法
  18. 查询出学生表中年龄和分数相同的所有同学的名字
  19. oracle中的trim函数使用介绍
  20. 通知 | 2022年度“RONG”奖学金入围答辩名单公布

热门文章

  1. AfxGetThreadState 与 _AFX_THREAD_STATE 剖析
  2. CPU占用过高问题的排查及解决
  3. 小狼的单身情话之HTML网页标签和段落的初级教学
  4. Beta阶段敏捷冲刺前准备
  5. 多重for循环优化,提升运行效率
  6. 虚拟机安装时黑屏的解决办法
  7. PDF合并在电脑上怎样实现?PDF合并的方法有哪些?
  8. 写论文有哪些神网站?
  9. 小米id锁状态查询_揭秘:苹果隐藏ID到底是什么?你可能就被坑了!
  10. 【Unity大气散射】GAMES104:3A中如何实现大气散射