美拍apk
分析sig的算法

一:fiddler抓包
GET
https://newapi.meipai.com/common/online_switch.json?device_system_version=4.4.2&language=zh-Hans&client_id=1089857302&device_id=866571024961545&version=4500&channel=m9&model=2014501&locale=1&sig=4b2859d0871718b76838733da9c1a1e9&sigVersion=1.0
HTTP/1.1

二:AndroidKiller 反编译 搜关键字
“sig”
三:静态分析java

paramak.a(“sig”, paramString.sig);
追踪到这
paramString = SigEntity.generatorSig((String)localObject, arrayOfString);
追踪到这
public static SigEntity generatorSig(String paramString, String[] paramArrayOfString)
{
byte[][] arrayOfByte = new byte[paramArrayOfString.length][];
for (int i = 0; i < paramArrayOfString.length; i++) {
arrayOfByte[i] = paramArrayOfString[i].getBytes();
}
return nativeGeneratorSig(paramString, arrayOfByte);
}
追踪到这
public static native SigEntity nativeGeneratorSig(String paramString, byte[][] paramArrayOfByte);

算法在 native层 nativeGeneratorSig 这个函数

static
{
System.loadLibrary(“sigWithoutTime”); //在这个so库里
}

四:静态分析so
apk里提取 libsigWithoutTime.so 到IDA中分析
定位到nativeGeneratorSig 函数 里分析

GeneratorSIG((int)&v28, (int)&v32, (int)&v25, (int)&v26, (int)&v27); 看着函数名就可疑进入分析下
MD5_Calculate(v16, *((_DWORD *)v16 - 3), &v17); MD5计算 看着函数名就差不多确定是这了 进入分析下
MD5_Init(&v10);
MD5_Update(&v10, v4, v3);
MD5_Final(&v10, v9);
v6 = 0;
do
{
sprintf(v5, “%x”, (unsigned int)(unsigned __int8)v9[v6] >> 4);
v7 = v9[v6++] & 0xF;
result = sprintf(v5 + 1, “%x”, v7);
v5 += 2;
}
while ( v6 != 16 );
if ( v11 != _stack_chk_guard )
_stack_chk_fail(result);
return result;

静态分析so到这

五:动态调试so

BL _Z10MD5_UpdateP10MD5ContextPhj

libsigWithoutTime.so:62359F1A LDR R2, [SP,#0x88+var_1C]
下断点
前个断点 是分析 传入参数的值
后个断点是 分析加密后 的结果
前个值R1寄存器值为
common/hot_banners.json1108985730220145014500866571024961545m9zh-Hansbdaefd747c7d594f
后个值R1寄存器值为
c83e2180feb8af70e441b55da36fb0a4
运行后发包 捕获的数据为
https://newapi.meipai.com/
common/hot_banners.json?
client_id=1089857302
&version=4500
&language=zh-Hans&device_id=866571024961545
&channel=m9
&model=2014501
&locale=1
&sig=8ce31208ef8bfa074e145bd53af60b4a
&sigVersion=1.0

对比可以看出来 加密参数值是 由各个参数值按照一定的排列方式 组合的
加密后得到MD5值 最后还进行了一下变形排序 再作为sig值 发出去的

美拍sig算法so分析相关推荐

  1. Yolov1目标检测算法详细分析

    Yolov1目标检测算法详细分析 Yolov1介绍 这是继RCNN,fast-RCNN 和 faster-RCNN之后,rbg(Ross Girshick)大神挂名的又一大作,起了一个很娱乐化的名字: ...

  2. Nature Methods:Rob Knight发布Striped UniFrac算法轻松分析微生物组大数据

    Striped UniFrac微生物组大尺度分析算法 Striped UniFrac: enabling microbiome analysis at unprecedented scale Natu ...

  3. 非变动性算法源代码分析与使用示例( for_each、min_element 、find_if、search 等)...

    非变动性算法代码分析与示例: 一.for_each C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14   // TEMPLATE FUNCTION for_each ...

  4. 背景建模--Vibe 算法优缺点分析

    背景建模--Vibe 算法优缺点分析 一.Vibe 算法的优点 Vibe背景建模为运动目标检测研究邻域开拓了新思路,是一种新颖.快速及有效的运动目标检测算法.其优点有以下两点: 1.思想简单,易于实现 ...

  5. 【计算理论】计算复杂性 ( 时间复杂度时间单位 : 步数 | 算法分析 | 算法复杂性分析 )

    文章目录 一.时间复杂度时间单位 二.算法分析 三.算法复杂性分析 一.时间复杂度时间单位 图灵机计算时间 是根据 步数 进行定义的 , 图灵机走 111 步 , 时间加一 , 每一步的时间可能不一致 ...

  6. 贪心、递归、递推以及动态规划算法的分析与对比

    PS:   头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...

  7. 银行家算法的分析与实现

    文章目录 1 银行家算法的分析与实现 1 银行家算法的分析与实现 问题描述: 研究一个银行家如何将总数一定的资金,安全的借给若干个顾客,使顾客既能满足对资金的需求,也使银行家可以收回自己的全部资金,不 ...

  8. Gradient Boost 算法流程分析

    Gradient Boost 算法流程分析 2012-10-31 19:57 2635人阅读 评论(0) 收藏 举报  分类: 算法学习(15)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  9. 算法时间复杂度分析基础

    摘要       本文论述了在算法分析领域一个重要问题--时间复杂度分析的基础内容.本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导.从而帮助大家从本质上认清这个概念. ...

最新文章

  1. 汽车线束测试软件,Aigtek线束测试仪,汽车线束测试_高精度自动测试_操作简单...
  2. Qt学习笔记之UDP编程
  3. Java二元运算和三元运算速度测试
  4. SQL一键备份用户数据库
  5. 戴尔台式机安装win 7系统
  6. 距离Java开发者玩转 Serverless,到底还有多远?
  7. Linux C Serial串口编程
  8. c# 中的除法运算需要注意
  9. 分享一个在沪深300下获得146.56%超额收益的策略
  10. 如何清除计算机的u盘使用记录,如何消除电脑上U盘使用记录
  11. 计算机基础知识msoffice高级应用,2017计算机二级MS Office高级应用考试大纲
  12. echarts图表应用
  13. 如何绘制抽奖转盘html,利用canvas实现抽奖转盘
  14. java -jar -xx_java 启动方式 java -jar xx.jar
  15. uestc 1903
  16. 项目经历 - 卷积网络识别古日文
  17. 实现翻页或查询后保持复选框勾选状态
  18. 交换机的基本配置实验报告
  19. centos7 ipython安装
  20. 计算机专业英语名人名言,英语名人名言(中英对照)

热门文章

  1. postgresql源码学习(53)—— vacuum②-lazy vacuum之heap_vacuum_rel函数
  2. C++Qt入门(3)---QMainWindow的基本组件
  3. python五边形的代码_如何使用pythonttkinter画布中的create_line创建五边形和六边形?...
  4. 【USACO1.2_1】★Milking Cows 挤牛奶
  5. Lucene 索引文件之tvdtvxtvm
  6. 如何建设(访问)本地网站
  7. FWT学习笔记(快速沃尔什变换)
  8. 单个路由器设置计算机无线网络,无线路由器无线MAC地址过滤设置方法(指定电脑上网)...
  9. 如何看待马云又唱歌又拍电影
  10. java 实验6 图形用户界面设计试验(2)