一.前言
今天我来和大家讲一下app逆向中的常见加密,首先我们要知道,在逆向中我们会遇到各种加密,更别说app逆向了,当我们在app中遇到jjava中的各种标准算法的时候,我们要使用python进行还原,今天我就来介绍这些常见算法以及还原
tips:本期我不和大家讲原理,只讲使用(因为原理我也有很多不晓得,哈哈哈)
二.base64
base64其实并不属于算法,算法是有加密作用的,而base64只起到编码作用,而不能起到加密,目的是为了起到传输过程中避免造成不同编码造成的歧义。
import base64
# base64编码
def base64_encrypt(data):
ret = base64.b64encode(data.encode()).decode()
return ret # 返回base64加密后的字符串
# 将base64字符串 进行解密成原来字符串
def base64_decrypt(data):
data += '=' * (4 - len(data) % 4)
ret = base64.b64decode(data) # 返回base64解码的字符串
return ret
三.md5和sha1
把这两个算法放一起讲,是因为他们都是摘要算法,而摘要算法的特点就是,只能加密,不能解密
# md5摘要算法
def md5_(data, yan='', fun='hex'): # 第一个参数进行摘要算法的数据 第二个参数盐
md5_obj = md5(yan.encode()) # 构建一个md5对象
md5_obj.update(data.encode())
if fun == 'hex':
ret = md5_obj.hexdigest() # 返回十六进制字符串
elif fun == 'encode':
ret = md5_obj.digest() # 返回字节
elif fun == 'list':
ret = [i for i in md5_obj.digest()] # 返回十进制列表
# ''.join([hex(i)[2:].rjust(2,'0') for i in md5_obj.digest()]) 处理得到16进制字符串
return ret
# sha1摘要算法
def sha1_(data, yan=''): # 第一个参数进行摘要算法的数据 第二个参数盐
sha1_obj = sha1(yan.encode()) # 构建一个md5对象
sha1_obj.update(data.encode())
ret = sha1_obj.hexdigest()
return ret
运行结果可以看到,我这个是集成在一起了,yan指的就是他们两可以加盐,正常使用就好
四:DES
DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8 位都用作奇偶校验),密钥可以是任意的56位的数,而且可以任意时候改变。
from Cryptodome.Cipher import DES
# des加密 一般结果都会进行base64编码处理一下,key8位
def des_encrypt(data,key):
plaintext = pad(data.encode(),8)
des = DES.new(key.encode(), DES.MODE_ECB)
ciphertext = des.encrypt(plaintext)
return ciphertext
# des解密
def des_decrypt(ciphertext,key):
des = DES.new(key.encode(), DES.MODE_ECB)
plaintext = des.decrypt(ciphertext)
plaintext = unpad(plaintext,8)
return plaintext.decode()
五.DES3
des3加密:DES3的密钥长度为168位,由于计算机运算能力的增强,原版的DES密码的密钥长度变得容易被暴力破解;而DES3通过增加DES的密钥长度来避免类似的攻击。需要注意的是,由于DES3的加密过程较为复杂,因此会占用相对较多的处理时间和计算资源。
from Crypto.Cipher import DES3
# des3加密 key是24位数的
def des3_encrypt(plaintext,key):
key = key.encode('utf-8')
plaintext = plaintext.encode('utf-8')
# 填充明文
length = 8 - (len(plaintext) % 8)
plaintext += bytes([length]) * length
# 初始化加密器
cipher = DES3.new(key, DES3.MODE_CBC, b'\0' * 8)
# 加密
ciphertext = cipher.encrypt(plaintext)
return ciphertext
# des3解密
def des3_decrypt(ciphertext,key):
key = key.encode('utf-8')
# 初始化解密器
cipher = DES3.new(key, DES3.MODE_CBC, b'\0' * 8)
# 解密
plaintext = cipher.decrypt(ciphertext)
# 去除填充
plaintext = plaintext[:-plaintext[-1]]
return plaintext.decode('utf-8')
六.AES
aes加密分为很多种,其中ecb和cbc是常见的,区别就是一个带iv一个不带这个我就不放运行截图了,密钥长度可以是128比特、192比特或256比特,对应的十六进制密钥长度分别为16字节、24字节和32字节,这里直接给代码
from Crypto.Cipher import AES
# AES-ECB 加密
def AES_ECB_encrypt(data, key, mode='pkcs7'):
data = data.encode()
aes = AES.new(key.encode(), AES.MODE_ECB)
if mode == 'pkcs7':
data = pad(data, 16)
elif mode == 'zero':
while len(data) % 16 != 0:
data += b'\0'
encrypt_data = aes.encrypt(data)
fina_data = base64.b64encode(encrypt_data).decode()
return fina_data
# AES-ECB 解密
def AES_ECB_decrypt(data, key):
# 先对base64解密
encrypt_data = base64.b64decode(data.encode())
aes = AES.new(key.encode(), AES.MODE_ECB)
plain_data = aes.decrypt(encrypt_data)
return plain_data
# AES-CBC 加密
def AES_CBC_encrypt(data, key, iv, mode='pkcs7'):
data = data.encode()
aes = AES.new(key.encode(), AES.MODE_CBC, iv.encode())
if mode == 'pkcs7':
data = pad(data, 16)
elif mode == 'zero':
while len(data) % 16 != 0:
data += b'\0'
encrypt_data = aes.encrypt(data)
fina_data = base64.b64encode(encrypt_data).decode()
return fina_data
# AES-CBC 解密
def AES_CBC_decrypt(data, key, iv):
encrypt_data = base64.b64decode(data)
aes = AES.new(key.encode(), AES.MODE_CBC, iv.encode())
plain_data = aes.decrypt(encrypt_data)
fina_data = unpad(plain_data, 16)
return fina_data
七.rsa加密
# RSA加密
# 返回 公钥加密、私钥解密
def createRSAkey():
public_key, private_key = rsa.newkeys(1024)
return public_key,private_key
# rsa公钥加密
def RSA_encrypt(data,public_key):
ciphertext = rsa.encrypt(data.encode(), public_key)
return ciphertext
# rsa私钥解密
def RSA_decrypt(data,private_key):
plaintext = rsa.decrypt(data, private_key)
return plaintext.decode()
八.总结
今天我们介绍了常见加密加密,大家只要会用就行了,遇到啥用啥,就可以啦!!!
九.下期预告
下期我就要和你们说几个简单的案例,通过这个来教你们hook和反编译工具的使用
补充
如有需要学习资料和交流加我绿泡泡
这里插入一条广告(希望理解一下,养家糊口)!!!
有需要逆向需求或者是项目,课设等等,都能找我接单,麻烦大家了
公众号(后续会更新相关文章)
期待你的关注!