当前位置:   article > 正文

安卓逆向:ctf题,通过加密后的文件获取加密前apk_bin文件提取apk

bin文件提取apk

题目下载:

链接: https://pan.baidu.com/s/1r-b0I6AitIghl8yjkyHuEA 提取码: wjf8

Jeb打开apk

 

重要的是红框的代码

程序运行后会判断存储根目录下是否有"BaoZang.apk",如果有的话按字节读取出来,进行aes加密

加密之后的数据写在LuoJie.bin文件里

现在我们有LuoJie.bin文件,那我们就逆向,使用aes解密,得到的就是apk文件

此处要注意key值经过generateKey()处理过:

 

解密可以写脚本,也可以使用androidkiller在 Cipher v0 = Cipher.getInstance("AES"); v0.init(1, ((Key)v2))的init函数的第一个参数修改为2,

这个方法就是解密函数了。

修改smali文件后重新打包apk,把LuoJie.bin文件放到手机存储根目录,运行apk,存储根目录会生成一个解密后的apk文件

把得到的apk再使用jeb打开

 

重点看红框代码,获取用户输入的用户名给v4,密码给v5,分别经过函数处理,得到的数据分别与"==QN1E0NxAjQ@M@I?cuIAAeH" "nEYgXfm6CovdajyScU0+aCCB701JAaZWZzC+71phA0M="相等即正确

先看怎么处理v4的:

最后一位减5给与第一位互换,循环长度为v4的长度/2

 

再看如何处理v5:

 

写解密代码:

  1. # -*- coding: utf-8 -*-
  2. import sys
  3. reload(sys)
  4. sys.setdefaultencoding('utf-8')
  5. import base64
  6. from Crypto.Cipher import AES
  7. a = "==QN1E0NxAjQ@M@I?cuIAAeH"
  8. b = "nEYgXfm6CovdajyScU0+aCCB701JAaZWZzC+71phA0M="
  9. def work(a):
  10.     len_a = len(a)
  11.     result = list(a)
  12.     for i in range(len_a/2):
  13.         temp = result[len_a - i - 1]
  14.         result[len_a - i - 1] = a[i]
  15.         result[i] = chr(ord(temp) + 5)
  16.     result = base64.b64decode("".join(result))
  17.     return result
  18. def AES_Decrypt(key, data):
  19.     vi = '1234567890123456'
  20.     data = data.encode('utf8')
  21.     encodebytes = base64.b64decode(data)
  22.     # 将加密数据转换位bytes类型数据
  23.     cipher = AES.new(key.encode('ASCII'), AES.MODE_CBC, vi.encode('utf8'))
  24.     text_decrypted = cipher.decrypt(encodebytes)
  25.     # 去补位
  26.     text_decrypted = text_decrypted.decode('utf8')
  27.     return text_decrypted
  28. a_decrypted = work(a)
  29. print(a_decrypted)
  30. key = "EaRncVfLgIPMaygA"
  31. b_decrypted = AES_Decrypt(key, b)
  32. print(b_decrypted)

答案:A18ADF01A69342F9

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/422756
推荐阅读
相关标签
  

闽ICP备14008679号