记一次渗透过程中某APP的逆向分析过程

0x01 使用Reqable抓包

使用Reqable配合JustTrustMe++Xposed模块对App进行抓包,发现响应加密,看起来像Base64AES

图片

没办法只能尝试逆向APP了,用JEB打开一看,竟然混淆了类名和方法名:

图片

直接去找加密逻辑估计够呛,先用算法助手尝试一波解密看看:

0x02 使用算法助手尝试解密

环境:光速虚拟机 + Magisk Delta + LSPosed

勾选对应APP:

图片

一顿操作过后查看算法助手的日志,找到上方抓到的密文了,密钥等信息也有:

图片

图片

图片

0x03 使用JEB定位加密位置

但是依旧解密后乱码,虽然有的显示了一点明文,但估计后面还有一层处理,查看细节可以发现使用的加密类是javax.crypto.*,而这个类使用的加密API是javax.crypto.CipherdoFinal方法,再次使用Jeb全局搜索doFinal查看调用的地方(这里也可以看上方算法助手的调用堆栈也能定位到此处):

图片

40处匹配,经过全部筛选后发现有一处看似网络拦截器的地方调用了doFinal方法:

图片

查看一番果然它对数据进行还进行了GZIP解压缩:

图片

为了验证一下是否如此,决定采用Xposed的方式进行Hook(也可以使用frida),Hooke0.m的第二个参数:

0x04 使用Xposed拦截明文

这里使用的是YukiHookAPI,相对于原始的Xposed API调用更加简洁方便。

编写模块:

图片

启动APP开始Hook,成功获取明文:

图片

使用在线网站尝试解密:

https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)AES_Decrypt(%7B'option':'UTF8','string':'ecfcgadhgegadgjm'%7D,%7B'option':'Hex','string':'00000000000000000000000000000000'%7D,'CBC','Raw','Raw',%7B'option':'Hex','string':''%7D,%7B'option':'Hex','string':''%7D)Gunzip()&input=aXNzS01FWkxrSFplTDZYOFh5Q3ErcTZSSnRzM2c3emVnZVMyWHkyVW5yM28veExSeVF3ZXIrTjZsaGZhaVpua3FBbTdGc0s0dUFydHhtbHd5TXhtWVlLUm1ZVnFPbExheS83aERKNWZtc009&oenc=65001

https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)AES_Decrypt(%7B'option':'UTF8','string':'ecfcgadhgegadgjm'%7D,%7B'option':'Hex','string':'00000000000000000000000000000000'%7D,'CBC','Raw','Raw',%7B'option':'Hex','string':''%7D,%7B'option':'Hex','string':''%7D)Gunzip()&input=RytXN0NDNnJIa2VHUlUwVWZCTkRkcWRMdmlFZ1kvQ09GNVhMTWVqVnYxZUhac0N3NDdPcHQrc1hnaFR0SE5sK09iTkpGRU05S2JTWVhORzhHZnkxY2NkYjBiZzhJSnlJRk90WlAzRjFybWRBSWZSMGY1L1Erd3NrWFl5KzNwUHRlWng3bnZ2YnlVbUFMVlcyUHFzRHBVTHBTNlNwVENEaHpOZmRNelB1cmhXWjJRaTY2WXdZOXJDajdqQzZNWDkrL1kyY1RzakpwQk9FUS93R0xyZ05SSlhnTjV5M1Z2WFJnd3FDVjh3WGZjMD0&oenc=65001

图片

使用Python脚本解密:

from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
import gzip
from io import BytesIO

def decrypt_aes_cbc_pkcs7(key, iv, ciphertext):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    decrypted = unpad(cipher.decrypt(ciphertext), AES.block_size)
    return decrypted

def main():
    while True:
        try:
            encrypted_data = input("密文: ")
            key = b'ecfcgadhgegadgjm'
            iv = b'\x00' * 16
            encrypted_data = base64.b64decode(encrypted_data)

            decrypted_data = decrypt_aes_cbc_pkcs7(key, iv, encrypted_data)
            with gzip.GzipFile(fileobj=BytesIO(decrypted_data), mode='rb') as f:
                decompressed_data = f.read()

            print(decompressed_data.decode('utf-8'))
        except Exception as e:
            print(e)

if __name__ == "__main__":
    main()

图片

到此分析完毕!

0x05 总结

本次APP逆向过程需要熟练各种工具的使用以及环境的配置,如使用Magisk,而大部分人的手机都没有root,所以得使用虚拟环境,也就是光速虚拟机,还有一些诸如ReqableJEB算法助手YukiHookAPI这些大佬开发的工具或者技术,感谢这些大佬们开发的工具,如有需要这些工具可以直接关注我们的公众号发消息,免费提供给各位师傅们!

0x06 相关链接

Reqable:https://reqable.com/zh-CN/

算法助手:https://github.com/Xposed-Modules-Repo/com.junge.algorithmaide

YukiHookAPI:https://highcapable.github.io/YukiHookAPI/zh-cn/

JEB:https://www.pnfsoftware.com/

声明

本文所提供的信息仅供学习和研究网络安全技术之用途。读者在使用这些信息时应自行判断其适用性,并对其行为负全责。作者不对任何读者因使用本文中信息而导致的任何直接或间接损失负责。

转载须知:

如需转载本文,请务必保留本文末尾的免责声明,并标明文章出处为红细胞安全实验室,同时提供原文链接。未经许可,请勿对本文进行修改,以保持信息的完整性。

感谢各位师傅们的理解与支持。

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
某flutter-app逆向分析是指对于一个使用flutter框架开发的应用进行逆向工程分析。逆向工程是通过分析应用的代码、二进制文件等来了解其内部实现细节。 首先,我们需要获取该应用的安装包文件(APK或IPA文件),然后进行解包操作,将其转换为可读取的文件目录结构。 接下来,我们可以使用一些工具来提取应用的资源文件、代码文件等。对于flutter-app来说,可以提取出dart文件,这是flutter的主要代码文件,其包含了应用的逻辑实现。 通过阅读dart文件,我们可以了解应用的代码结构、数据模型、界面设计等。可以分析应用的逻辑实现方法,包括各种函数、类、方法的调用关系。 同时,还可以通过分析相关配置文件、资源文件等来了解应用的各种设置、资源加载方式等。 在逆向过程,还可以使用一些调试工具来进一步了解应用的运行机制。例如,hook工具可以拦截应用的函数调用,并捕获输入输出数据,用于进一步分析。 逆向分析的目的可以有很多,比如了解应用的工作原理、发现潜在的漏洞或安全问题、提供参考用于自己的开发等。 需要注意的是,逆向分析需要遵守法律规定。未经授权的逆向分析可能侵犯他人的知识产权,涉及到隐私等方面的问题。因此,在进行逆向分析之前,应该了解并遵守当地相关法律法规,避免产生法律纠纷。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值