App逆向百例|14|某旅行攻略App zzzghostsigh参数分析

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: App逆向百例|14|某旅行攻略App zzzghostsigh参数分析

观前提示:

本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除

样本:aHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMVVRVnNwRzJvTWVCRGJLOXlvSHZmdGc/cHdkPWxpbm4=

0x1 准备工作

样本无壳 存在证书验证 使用objection脚本直接Pass

本次受害参数

jadx-gui打开样本APK

直接搜索zzzghostsigh

跳转过来查找用例

继续跳转

可能在ghostSigh里面实现 在objection 验证一下结果

Arguments com.mfw.core.login.util.SecurityTools.ghostSigh(GET&https%3A%2F%2Fmapi.mafengwo.cn%2Fsearch%2Fsearch%2Fget_result_list%2Fv3&app_code%3Dcom.mfw.roadbook%26app_ver%3D10.8.6%26app_version_code%3D1016%26brand%3Dgoogle%26channel_id%3DTengXun%26dev_ver%3DD2218.0%26device_id%3D088fd48f2e39f6dd%26device_type%3Dandroid%26hardware_model%3DPixel%26has_notch%3D0%26jsondata%3D%257B%2522switched_search_type_by_user%2522%253A0%252C%2522page%2522%253A%257B%2522boundary%2522%253A%25220%2522%252C%2522num%2522%253A10%257D%252C%2522keyword%2522%253A%2522%25E5%25B9%25BF%25E5%25B7%259E%2522%252C%2522is_correct%2522%253A%25220%2522%252C%2522search_id%2522%253A%2522616876f0-d55b-4642-9861-49d1487d4677%2522%257D%26mfwsdk_ver%3D20140507%26o_coord%3Dgcj%26o_lat%3D23.210456%26o_lng%3D113.276382%26oauth_consumer_key%3D5%26oauth_nonce%3D20758a6d-750b-4bfb-aff4-05e194f652e4%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1670304163%26oauth_token%3D0_0969044fd4edf59957f4a39bce9200c6%26oauth_version%3D1.0%26open_udid%3D088fd48f2e39f6dd%26screen_height%3D1794%26screen_scale%3D2.88%26screen_width%3D1080%26shumeng_id%3DDurXXFIkF8p6cnynFKceRZixZovBGYlg0uwzlwlxeMcSE5umYEfhbsraVbvpLsybIFUGNsoCyBKpymAQDzelEQpg%26sys_ver%3D8.1.0%26time_offset%3D480%26x_auth_mode%3Dclient_auth)
(agent) [292326] Return Value: d043330bcff1ecfe2bd3e096ab729986c6eb1e9e

得到传入明文和传出结果 接下来只需要找出具体算法实现即可

最终定位到libmfw.so中的xPreAuthencode

其中this.a为主动调用传入的字符串

回到上层 从这里知道传入的就是包名

从objection验证可确定

0x2 Unidbg主动调用

直接用Unidbg造个框架 无需补环境就能跑出结果

主动调用

对比结果一致

0x3 加密分析

从加密结果可知 无论我们输入的长度多长 都输出固定长度密文

那可以猜测这可能是一个哈希加密

而且输出的密文长度为40 可以猜测这是一个SHA1

那先拿到一份py的SHA1实现

github:https://github.com/alex-a-robinson/SHA1/blob/master/sha1.py

这是SHA1的一个加密流程

从中可以知道一个SHA1会经过20+20+20+20=80轮的加密 而且ABCDE贯穿了整个加密 最终得到一个40位的结果

ABCDE对应的就是魔数 每20轮对应的不同的K值 所以要判断这是不是一个SHA1只需要找到这些值就可以了

根据搜索 可以判断这是一个SHA1

那主动调用加密123456和正常的sha1对比发现结果不一致

那猜测就是有魔改 从这里可知是从x0里取出魔数

debugger onsole看x0

01 23 45 67 →0x67452301

89 AB CD EF →0xefcdab89

FE DC BA 98 →0x98badcfe

7C 1F 4A 5E→0x5e4a1f7c

76 54 32 10→0x10325476

原本的魔数为0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0

从这里可以看到后俩个魔数被更改了 手动更正魔数运行看结果

看来不仅仅更改了魔数 存在其他魔改

从前面可知 SHA1存在80轮加密 那我们手动输出80轮加密的每个结果 对比tracecode不就行了

根据对比每轮的结果发现在第16轮的时候开始出现不同

前15轮的K值为0x5A827999

在第16次循环的时候就将K值提前换成0x6ED9EBA1

搜索0x6ED9EBA1出现4次

验证结果

按照这个思路接着看第20轮往后到39轮使用的K值为0x8F1BBCDC

第40轮开始又用回K值为0x5A827999

根据tracecode可知这区间又出现EOR又AND可知 这里的计算方式和前16轮一致 K值也一致

搜索0x5A827999可知一共出现了36次 减去前16轮 所以后面又使用了20轮

在60到79后跟原代码一致

所以算下来一共分为 16+4+20+20+20=80轮

if i <= 15:
 f = d ^ (b & (c ^ d))
 k = 0x5A827999
elif i <= 19:
 f = b ^ c ^ d
 k = 0x6ED9EBA1
elif i <= 39:
 f = (b & c) | (b & d) | (c & d)
 k = 0x8F1BBCDC
elif i <= 59:
 f = d ^ (b & (c ^ d))
 k = 0x5A827999
else:
 f = b ^ c ^ d
 k = 0xCA62C1D6

验证结果发现并不完全一致 到底是哪里的问题

根据错误位置 输出h2h3cd的值

回到tracecode搜索

从这里就可以看到0xee9397da与之相加的是0x5e4a1f7c0x2ee2fec3与之相加的是0x98badcfe

也就是需要将cd的位置互相调换

最后拼接得到结果

对比结果 输出一致



感谢各位大佬观看

感谢大佬们的文章分享

如有错误 还请海涵

共同进步 带带弟弟


点赞 在看 分享是你对我最大的支持

逆向lin狗

相关文章
|
1月前
|
UED
|
11天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
2月前
|
安全
【Azure App Service】App service无法使用的情况分析
App Service集成子网后,如果子网网段中的剩余IP地址非常少的情况下,会在App Service实例升级时( 先加入新实例,然后在移除老实例 )。新加入的实例不能被分配到正确的内网IP地址,无法成功的访问内网资源。 解决方法就是为App Service增加子网地址, 最少需要/26 子网网段地址。
|
3月前
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
|
3月前
|
Java
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
|
3月前
|
开发框架 缓存 .NET
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
|
3月前
|
缓存 前端开发 Java
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
|
3月前
|
C# 开发工具
【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码渐入最源端
【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码渐入最源端
|
3月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)

热门文章

最新文章

下一篇
无影云桌面