赞
踩
题目下载:
链接: 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:
写解密代码:
# -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import base64 from Crypto.Cipher import AES a = "==QN1E0NxAjQ@M@I?cuIAAeH" b = "nEYgXfm6CovdajyScU0+aCCB701JAaZWZzC+71phA0M=" def work(a): len_a = len(a) result = list(a) for i in range(len_a/2): temp = result[len_a - i - 1] result[len_a - i - 1] = a[i] result[i] = chr(ord(temp) + 5) result = base64.b64decode("".join(result)) return result def AES_Decrypt(key, data): vi = '1234567890123456' data = data.encode('utf8') encodebytes = base64.b64decode(data) # 将加密数据转换位bytes类型数据 cipher = AES.new(key.encode('ASCII'), AES.MODE_CBC, vi.encode('utf8')) text_decrypted = cipher.decrypt(encodebytes) # 去补位 text_decrypted = text_decrypted.decode('utf8') return text_decrypted a_decrypted = work(a) print(a_decrypted) key = "EaRncVfLgIPMaygA" b_decrypted = AES_Decrypt(key, b) print(b_decrypted)
答案:A18ADF01A69342F9
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。