graph TB;
C0-->|1.传入flag| B1;
B1-->|2.传入flag|C1;
C1-->|3.调用|B2;
B2-->|4.传入key|C1;
C1-->|5.返回RSA加密结果|B1
B1-->|6.传入RSA加密结果|C2;
C2-->|7.MD5后的字符串|B1
B1-->|8.MD5后的字符串|D0
D0-->D1
D0-->D2
D1-->|前16个作为AES密钥|D3
D2-->|后面的字符串作偏移|D3
D3-->|9.AES/CBC/PKCS7Padding解密|D4
subgraph java层
direction TB
C0[onClickCheck]
subgraph JNI层
direction TB
B1[JNI-b]
B2[JNI-a]
C1[java-funcB]
C2[java-funcA]
end
subgraph decryptMsg方法
direction TB
D0[字符串]
D1[前16个字符串]
D2[剩余的字符串]
D3[assets中enc文件]
D4[解密后的文件]
end
end
解密文件
RSA
可以通过JNI中的a函数获取公钥
公钥格式
1 2 3
-----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJgby/H1lmzAIGjC3NczfQEWl5e3gR2VDukg9Wm+UopVUgXbj9O4+YSMZ0brftk2Qkr8GHJU8a8YqK2DNFg2XD8CAwEAAQ== -----END PUBLIC KEY-----
import base64 from Crypto.Util.number import* import gmpy2 from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad base="j7WBExN4XN/P2HVCOFssAAquRgdQCqdWZKwDo9uTBLfcLpC+1XC6DmBokh5twaS7Ip1MBIEAlFX2WEzz2H9qwXT5WEUgzC4RF0AOe95wqU89oqf4dn7/ZiO2imb5a6FrDnpwo6SqtdhasU3OrGg7mgtapukCHjjmJH7Vx+yVPm0uR40bgxVCIPtnJ+b6iNp8o+Cgyrd2BZ/TCQX1GJz3pM80+cV5cZOMjr/JepVcWFN+7GNKxR8jaPa/bV+C7Y+S" cipher_bytes = base64.b64decode(base) tmp1=[] for i inrange(0,len(cipher_bytes),64): tmp1.append(cipher_bytes[i:i+64]) #64个字节一组 e=65537 p=71037807056497808667473611757425298887086548124211388066888426631640585037969 q=112145533787143859495414888829654253787274898301436147509050442708404900683727 n=7966572791419081482888151379127643748169118610600984895753957531413662475745737840799418096417263789370960837649556218062403972113814987633647934355430463 d=gmpy2.invert(e,(p-1)*(q-1)) tmp2=[] tmp3=[] tmp4='' for i in tmp1: tmp2.append(pow(bytes_to_long(i),d,n)) for i in tmp2: tmp3.append(long_to_bytes(i)) for i in tmp3: tmp4+=i.decode() tmp='' for i inrange(0,len(tmp4.replace('|','').replace('\x00','')),8): tmp+=chr(int(tmp4.replace('|','')[i:i+8],2)) print(tmp) tmp=str.upper(__import__("hashlib").md5(tmp.encode()).hexdigest()) password=tmp[0:16].encode() iv=tmp[16:].encode() withopen(r".\resources\assets\enc','rb') as e: with open(r'.\resources\assets\dec.7z',"wb+")as d: enc=e.read() cipher=AES.new(password,AES.MODE_CBC,iv) dec=cipher.decrypt(enc) dec=unpad(dec,AES.block_size) d.write(dec)