网站软件app,免费注册账号qq,网站建设自己在家接单,手机网站一键开发知识点
java.security.MessageDigest类 功能#xff1a;用于为应用程序提供信息摘要算法的功能#xff0c;如md5和SHA。换句话说#xff0c;就是生成md5或者是SHA密码。 相关#xff1a; getinstance:静态函数#xff0c;用来实例操作和初始操作。 update:处理数据 reset…知识点
java.security.MessageDigest类 功能用于为应用程序提供信息摘要算法的功能如md5和SHA。换句话说就是生成md5或者是SHA密码。 相关 getinstance:静态函数用来实例操作和初始操作。 update:处理数据 reset:重置摘要 digest:明文变为密文
解题流程
根据题目下载了一个压缩包 首先下载文件看到是apk文件那就是安卓逆向。拿模拟器来运行看看 jeb打开文件找到关键函数 分析代码计算v1的md5,形成的md5密文的字符串取偶数就是flag 在onCreate里面调用了checkSN函数传进去的值是edit_username和edit_sn,edit_username就是v1 用python写md5的算法求解flag
import hashlib
import string
def encrypt_md5(str):mdhashlib.md5() #创建md5对象md.update(str.encode(encodingutf-8)) #这里需用encode()函数对字符串进行编码#不然会报TypeError: Unicode-objects must be encoded before hashingreturn md.hexdigest()sTenshine
sencrypt_md5(s)
print(s)
print(len(s))#方法一
for i in range(len(s)):if i%20:print(s[i],end)
#方法二
for i in range(0,len(s),2):print(s[i],end)总结下来首先用户名是固定的Tenshine经过MD5加密之后就是 b9c77224ff234f27ac6badf83b855c76这一串根据源码分析每隔1位进行拼接就是flag所以就是flag{bc72f242a6af3857}
方法二 某大佬有另外的解法我直接拷过来了不过我没有成功实现此方法有兴趣的可以了解一下。 首先我们通过Android killer反编译这个apk找到checkSN函数 这里呢可以看到当调用此函数的时候会传递两个string类型的参数,这里我们转Java代码看一下 这里呢可以看到当调用此函数的时候会传递两个string类型的参数,这里我们转Java代码看一下 这里呢 前面那几个判断 我们直接无视,下面这一块我圈起来的代码 我们可以看到 他是判断 参数2的长度有没有22个 有的话 则开始算flang的然后跟参数2进行比较,注意看 这里是突破点
通过这几串代码 我们可以看到他是判断参数2长度有没有22个 有的话就算出flag的值 跟参数2进行比较
这里我们返回Android killer 找到文本比较这个位置的代码 然后直接输出log 打印出代码算出的flag的内容 然后编译回去 再在模拟器里面安装 然后打开ddms 这里我们在输入框里面随便输入22位内容 然后点击按钮
再看ddms可以看到flag已经输出出来了 这样就找出flag的值了