学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1157

主题
发表于 2019-7-13 12:29:12 | 查看: 44895| 回复: 50

相关题目:

♦ GAesDecode

1. APK文件静态反编译
使用JEB2反编译及查看JAVA代码(该题不涉及native层,IDA ARM反汇编及调试有机会再讲),“EP”定位可通过manifest查看
895785d295ccc89f62.png
onCreate函数可看到很直接的加密流程:MainActivity.encrypt接受屏幕输入和一串字符;判断其返回值是否等于kNk3Qz+l/kLpGuKxf5iGE9cOoTmmn9Ac+UdF4b2CHqU=”:
960935d295ce706e91.png
545475d295cf01243e.png
encrypt()函数传入的第二个参数This is a AES-like encryption algorithm. However, we do some change. Therefore, you cannot directly use security class to decrypt the message. Our challenge is to find the plain text of this encrypt message with th fixed key.
提示这是个变形的AES加密算法,可能是友善的也可能是误导,但后续我们可以此为依据进行验证加快解题速度。
1. 尝试运行
使用雷电安卓模拟器,随意输入“12345678”,验证其错误信息输出
“Incorrect Flag!”:
533125d295d10131e3.png
1. JEB2调试
Debugger->Start->Attach:
650695d295d1fb9de1.png
使用特定函数调用(如本例Base64.encodeToSTring)从JAVA定位到Smali代码,Ctrl+B下断点:
499785d295d2db3038.png
标准加密与APK调试验证对比:
864055d295d3b7e2a0.png
1. 破解算法
先参考下(http://blog.csdn.net/qq_28205153/article/details/55798628)标准的AES加密流程图
770325d295d4ce6e0b.png
APK算法首先对输入字串进行一个16分组,这里的变量名可通过快捷键n(类似IDA)重命名,帮助逆向理解:
396475d295d5cd5326.png
对每16字符进行10轮变换
806145d295d6fd7fd2.png
然后,做一个拼接(4是因为AES以4字节为一个单位):
363925d295d7e2bdb6.png
9465d295d8651537.png
最后对加密字串做base64输出。
对比关键的四个加密模块函数:字节代换substitute()、行移位shiftRows()、列混合mixCloumns()、轮密钥加addRoundKey()。
轮密钥加addRoundKey()
轮密钥加是将128位轮密钥Ki同状态矩阵中的数据进行逐位异或操作,与apk代码相符;
731835d295d9425e23.png
字节代换substitute()
可发现APK代码中的有现成的逆S盒与标准逆S盒一致,暂时可推断也使用标准S盒:
863615d295da1c58b2.png
818035d295dac4e332.png
行移位shiftRows()
行移位是一个简单的左循环移位操作。当密钥长度为128比特时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节,与APK代码一致:
692315d295dba227a0.png
列混合mixCloumns()
首先四次变换的逻辑没有问题:
2,3,1,1
1,2,3,1
1,1,2,3
3,1,1,2
896115d295dcb28d8f.png
LightState.add()也没有问题:
649975d295ddca0d4e.png
LightState.multiply2()发现异或值做了改变:
790255d295ded588f6.png
变形解密将“0x1b”改为“0x1d”配置好key“kNk3Qz+l/kLpGuKxf5iGE9cOoTmmn9Ac+UdF4b2CHqU=”解密的16进制数组,解密得到flag为:

游客,如果您要查看本帖隐藏内容请回复
436695d295e014110f.png

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

    发表于 2019-7-18 16:50:42
    学习了,感觉有点复杂啊
    发表于 2019-7-18 16:53:35 来自手机
    Adam 发表于 2019-7-18 16:50
    学习了,感觉有点复杂啊

    涉及到密码学的逆向题如果没有密码学基础,行外人看起来会很复杂,其实没多难,仔细研究研究就出来了

      发表于 2019-7-19 10:38:41
      学习一下

        发表于 2019-9-12 08:56:36
        感谢大佬分享经验

          发表于 2019-10-8 21:47:50
          感谢分享,我会认真学习的!
          发表于 2019-10-9 07:12:25 来自手机
          kkk_z 发表于 2019-10-8 21:47
          感谢分享,我会认真学习的!

          加油哦!

            发表于 2019-10-26 14:03:21
            太牛了,很难看懂呀

              发表于 2019-10-26 21:04:30
              解密的具体脚本能否发一下啊
              发表于 2019-10-27 16:33:14
              0606lcy 发表于 2019-10-26 21:04
              解密的具体脚本能否发一下啊

              按照截图敲就行

              小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

              GMT+8, 2024-4-27 06:20 , Processed in 0.113178 second(s), 83 queries .

              Powered by Discuz! X3.4

              Copyright © 2001-2021, Tencent Cloud.

              快速回复 返回顶部 返回列表