easyEZbaby_app
Jadx
这个文件一般是窗口界面,点击中间的一般就是主函数
Obj1是用户名,obj2是密码
用户名
public boolean checkUsername(String str) { |
这部分是MD5加密,加密的内容是 "zhishixuebao"
MD5解密脚本
import hashlib |
7da5fec345fecde5fdcd641f68e0b6d1
for循环,i+=2
p='7da5fec345fecde5fdcd641f68e0b6d1' |
7afc4fcefc616ebd
来看密码
public boolean checkPass(String str) { |
循环15次,通过一系列的数学运算和字符转换来生成flag
a='' for i in range(15): a+=chr(((255 - i) + 2) - 98-48) print(a) |
得到
onmlkjihgfedcba
那么flag就是用户名+密码
flag{7afc4fcefc616ebdonmlkjihgfedcba}
Ereere
Shift+f12查找字符串
定位到主函数
跟进sub_400864()函数,看到256,想到rc4
进入aFlag1233213211
回到主函数再跟进sub_400550
进aZyxwvutsrqponm发现base64密码表
主函数
想将rc4进行了加密然后base64解密然后与ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ== 相比,如果相同就输出flag的值
那么逆向的思路是
将base64进行换表之后ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ==
进行base64解密 然后再进行RC4解密就能得到flag
import base64 flag = "" key = "ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ==" string1 = "ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz/+9876543210" # string1表示更换后的码表 string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" # string2表示原始码表 print("Base64还原: ", key.translate(str.maketrans(string1, string2))) # 将 key 还原成初始码表加密后的结果 Str = base64.b64decode(key.translate(str.maketrans(string1, string2))) # Base64解密,bytes型 print("Base64解密: ", Str) byte_4A0860 = [] aFlag1233213211 = "flag{123321321123badbeef012}" # rc4_init for i in range(256): byte_4A0860.append(i) v4 = 0 v3 = 0 for j in range(256): v5 = byte_4A0860[j] v3 = (v5 + v3 + ord(aFlag1233213211[int(j % len(aFlag1233213211))])) & 0xff byte_4A0860[j] = byte_4A0860[v3] byte_4A0860[v3] = v5 v4 = v4 + 1 if v4 >= len(aFlag1233213211): v4 = 0 print("s_box:", end=" ") for j in range(256): print(byte_4A0860[j], end=" ") print() # rc4_crypt v4 = 0 v3 = 0 for k in range(len(Str)): v3 = (v3 + 1) & 0xff v4 = (byte_4A0860[v3] + v4) & 0xff v5 = byte_4A0860[v3] byte_4A0860[v3] = byte_4A0860[v4] byte_4A0860[v4] = v5 flag += chr(Str[k] ^ byte_4A0860[(byte_4A0860[v3] + byte_4A0860[v4]) & 0xff]) print(flag) |
flag{RC_f0ur_And_Base_s1xty_f0ur_Encrypt_!}
Mine-
下载完是一个exe程序,运行一下
拖到ida看main函数
这段代码是一个用C++编写的扫雷游戏程序,或许扫完了就能拿到flag?
ans:存储游戏结束时显示的字符串。
还有rand函数和srand函数的调用,说明这里游戏地图是随机生成的,所以不会根据输入的点位来解密或者生成flag
修改rip
右键modify
F9运行
7ii3VecVgof3r6ssiP2g7E3HqwqhM
flag{h4pp4-M1n3-G4m3}