Category Archives: CyberSecurity

Length extension attack

长度扩展攻击(Length extension attacks)是指针对某些允许包含额外信息的加密散列函数的攻击手段。简单来说,就是通过特殊的手段来扩展消息,可以伪造一个不经过私钥签名的Hash签名结果。

攻击条件

  1. 已知私钥和消息
  2. 采取了 H(密钥 ∥ 消息) 此类构造的散列函数

攻击效果

  1. 伪造消息签名

攻击场景

  1. API请求签名:MD5(Secret + k1,v1 + k2,v2 …) ,注意secret在前
Continue reading

Padding oracle attack

适用于CBC模式下的AES,DES,3DES等分组密码。

攻击成立需要:

  1. 能控制初始向量 IV 和密文 CT
  2. 能触发密文解密流程(选择密文),得知解密结果以及是否padding异常

攻击效果:

  1. 解密密文
  2. 生成任意明文的密文

攻击场景:

  1. 加密协议为SSLv3的HTTPS请求
  2. 客户端存储形式的敏感凭证
Continue reading

使用Hopper Disassembler轻松破解Gem Menu for OneNote

最近喜欢上了OneNote,有一款小插件Gem Menu for OneNote功能还蛮实用的。下载下来,点击注册激活软件,一股原始的味道扑面而来,想必没有经过很强的保护,于是直接动手反编译破解这个小软件。

在Mac上可以使用Hopper Disassembler很方便的进行反编译,我们打开Gem Menu for OneNote的二进制文件,拖进Hopper Disassembler即可完成反编译,得到可执行文件的汇编代码和更直观的C语言代码等,方便我们理解程序逻辑:
Continue reading

Android 无源码调试

在逆向 Android APP 的过程中,有时候盯着一串加密算法,不断地在脑子模拟,并发生“栈溢出”和“OOM”。动态调试往往比静态分析更为生动和直观,但又苦于没有源码,无法调试,但这个其实真的可以有。

Android 通过 Dalvik VM 执行指令,在打包 APK 文件时,Java 源码将编译成 Dalvik 可执行文件,将 Native 代码编译成 .so 二进制 JNI 函数库,下面将介绍这两种代码的无源码调试方法。

Continue reading