确定从移动应用到 API 的 Post 请求的加密算法

Posted

技术标签:

【中文标题】确定从移动应用到 API 的 Post 请求的加密算法【英文标题】:Determine the encryption algorithm of Post request from mobile application to API 【发布时间】:2021-12-24 02:04:17 【问题描述】:

我试图了解当我从移动应用程序向 API 提交 POST 请求时,移动应用程序如何加密密码 这样我就可以编写一个可以使用相同算法的 python 代码向与移动应用程序相同的 API 发送加密密码。

我厌倦了捕捉移动应用程序的私有 API,我收到了应用程序发送请求的请求,但有趣的是应用程序在通过 POST 请求将密码发送到 API 之前对密码进行了加密,这就是密码在请求中查找:

password=GmdKoBhIne4g3KR8JeR/Cg==

移动应用程序正在对密码进行编码,当它向 API 发送请求时我已经知道密码,但我想要的是捕捉这个移动应用程序加密密码的方式,加密类型不是 Base64(当然大声笑),我厌倦了在没有加密的情况下向 API 发送请求,我得到了一个错误。这意味着 API 正在解密密码。

所以我厌倦了反编译移动应用程序,我得到了源代码,很麻烦,代码源很复杂,函数名称随机,很难阅读lol,我反编译后随机生成变量APK。

所以我厌倦了在代码源中搜索(密码,API .....)之类的关键字,最后我找到了可以开始的行, 我试图了解移动应用程序如何将密码字符串转换为未知的加密类型,在两天前我反编译了一个 APK 文件,但加密仍然难以捕捉:( 我发现了这个:

然后函数返回:

if (str21 != null) 
        i = str21.hashCode();
    
return hashCode23 + i;

但仍然无法从加密算法中理解任何内容:(

我正在搜索代码源,发现两个文件 CERT.SF 和 CERT.RSA 我不知道,但我觉得这两个文件可以帮助我,CERT.SF 文件包含许多 SHA-256-Digests 和我看不懂的 RSA。

我厌倦了以我在应用程序上发布请求的形式测试字母,例如: 我虽然可以捕捉到像 (A, B, C ..... 1,2,3....) 这样的字母 但是当我发布 A 时,我在 Burp-suite 上收到了密码再次生成为像以前一样的随机字符串,所以没有任何改变

如果有密码学的人可以帮助我解决这个问题可能会很棒

谢谢。

【问题讨论】:

软件逆向工程是一项艰苦的工作,你有一个好的开始。不幸的是,您显示的代码似乎都没有提供有关密码如何加密的很多线索。 在浏览代码源后,我发现该应用程序正在使用 RSA 加密密码,如果您对此有所了解,我们可以私下讨论。 由于加密的密码只有 16 个字节,因此不太可能使用 RSA。 有两个文件CERT.SF && CERT.RSA //我在代码源上也看到了很多publicKey和privateKey:instance.init(1, (RSAPublicKey) publicKey); 看起来该应用程序是 android 应用程序,对吗?如果是,您可以尝试在有根设备/模拟器上安装应用程序,并使用 frida/objection 挂钩所有加密方法。如果应用程序使用 Android 提供的加密算法(因此使用真正的加密,而不仅仅是自己开发的东西),那么跟踪加密方法将向您显示输入、密钥和加密输出。 【参考方案1】:

所以,感谢一些帮助我弄清楚这一点的中文文章。

移动应用程序被混淆了,但感谢上帝,我发现了一些应用程序正在使用 AES/CBC/PKCS5Padding 的痕迹,所以我跳了起来,我植根了我的设备并绕过 SSL 平移和我在我的设备外壳上安装了友好的 Frid​​a 服务器,并获得了移动应用程序的 PID,我发现了许多有助于检测移动设备上的密钥的脚本,但没有任何脚本有效。所以我厌倦了理解 Frida 是如何检测密钥的,我编写了一个自定义的 python 脚本来从移动应用程序中删除密钥。 对于我无法共享的自定义 python 脚本,因为它包含我正在对其进行预测试的移动应用程序功能。 但我可以通过一些资料来帮助了解 Frida 如何绕过密码算法

弗里达:https://github.com/frida/frida

利用代码:https://github.com/Kc57/blog_post_code/tree/master/frida-python-bindings-example

【讨论】:

以上是关于确定从移动应用到 API 的 Post 请求的加密算法的主要内容,如果未能解决你的问题,请参考以下文章

将 POST 请求从一个 REST API 转发/重定向到另一个

将用户名和密码从移动/网络应用程序的每个请求发送到后端 api 是否一个坏主意

如何从 ReactJS Web 应用程序向 Django API 发送 POST 请求?

永久移动 POST 请求

使用与移动设备相同的 API 开发网站

此 IP、站点或移动应用程序无权使用此 API 密钥。从 IP 地址 **** 收到的请求,引用者为空