备忘一下,逆向做不出来了,这两天耍了几道安卓逆向。
不知不觉攻防世界等级都刷到高手了,400 多分,不过有四分之三都是看 wp 抄出来的吧 😅
APK 逆向
应该是最简单的安卓逆向题了,条件都在 mainactivite 里给了,用一段字符串去 md5 获得 hex 后,每隔两位取值。
# author jinyunlong
# createtime 2021/5/16 23:23
# 职业 ICBC锅炉房保安
import hashlib
import string
def encrypt_md5(str):
md=hashlib.md5()
md.update(str.encode(encoding='utf-8'))
print(md.hexdigest())
# return md.digest() #byte
return md.hexdigest() #hex
s = 'Tenshine'
s = encrypt_md5(s)
flag = ''
for i in range(0,len(s),2):
flag +=str(s[i])
print(flag)
人民的名义-抓捕赵德汉 1-200
关键代码在 CheckPass 类里,是段 md5,解了密就是 inputstring
基础 android
考察了安卓广播方法的使用:sendBroadcast(发广播方法) receiver(注册广播) action android:name="xxxxxxxxxxxxxxxx(输入内容)"
在这之前的考点是在 12 次循环中的 pass[len] = (char) (((255 - len) - 100) - pass[len]);表达式计算之后每一位的 pass[len]的值必须等于字符‘0’的 char 值。'0'的十进制就是 48,用这个算出的 12 位 key 进行第一次提交到第二个 onclick 事件,第二个事件触发的就是发广播 sendBroadcast 方法了,然后输入注册广播内的 action android:name="xxxxxxxxxxxxxxxx(输入内容)"就会跳到给 flag 的方法了
其实这题还有很多其他解法,可以看大佬这篇攻防世界-Mobile-基础 android
有时间是要做下安卓开发,还挺好玩的。
Android2.0
一道 so 库逆向,用 ida 打开有几个明显函数分别是 first,second,third 对应三段字符串,有个坑是这三段伪代码都是处理四位字符,剩下的位数不处理,写脚本时要注意,最后在 init 方法里按位置拼接了下。
# author jinyunlong
# createtime 2021/5/17 10:14
# 职业 ICBC锅炉房保安
s1 = ''
t1 = 'LN^d'
for i in t1:
s1 += chr((ord(i) ^ 0x80) // 2)
s1 += 'l'
print(s1)
s2 = ''
t2 = [0x20, 0x35, 0x2d, 0x16]
for i in range(len(t2)):
s2 += chr(ord(t1[i]) ^ t2[i])
s2 += chr(0x61)
print(s2)
s3 = ''
t3 = 'AFBo'
for i in range(len(t3)):
s3 += chr(t2[i] ^ ord(t3[i]))
s3 += '}'
print(s3)
flag = ''
for i in range(5):
flag += s1[i] + s2[i] + s3[i]
print(flag)
APK 逆向-2
逆向里也有道题叫这名字,谁能想到这道题是改 mainfest.xml 文件呢。文件格式的事。反编译 apk 后一堆花里胡哨的东西,然后装 apk 也装不上,看了 wp 写是 mainfest.xml 文件加载失败了,用 jadx 一看还真是,根本没加载出来,然后参考几个正常的 mainfest 文件,用 010 十六进制打开发现这个文件的第一行第 8 到第 11 个字符和第三行的第三个字符都不对劲,修改后重新放到 apk 目录结构里,重新打回 apk 包反编译打开可正常显示了 action android:name="8d6efd232c63b7d2"就是答案
app3
没做出来,不过学会了使用 Androidbackup_extractor 去反查 ab 文件,jadx 的反混淆。
easyjni 和 easy-so
放一块说吧两道题一样(easy-so 比 easyjni 还简单,做出来的人却更少。。??)
就拿 so 说吧
主要逻辑在 so 库文件里,关键代码在 Java_com_testjava_jack_pingan2_cyberpeace_CheckString,有两段字符串操作一段是前后 16 个字节换位置,还一个是两两互换。还原回来就是 flag
easyjni 有个 base64 码表替换后加密的步骤
贴下各种换位置的 py
😮
# author jinyunlong
# createtime 2021/5/17 19:30
# 职业 ICBC锅炉房保安
s = 'f72c5a36569418a20907b55be5bf95ad'
temp=[]
for i in range(0,len(s)):
temp.append(s[i])
print(temp)
for j in range(0,len(temp),2):
k = ''
k = temp[j]
temp[j] = temp[j+1]
temp[j+1] = k
print(temp)
for m in range(0,len(temp)//2):
n = ''
n = temp[m]
temp[m] = temp[m+16]
temp[m+16] = n
flag = ''.join(temp)
print(flag)
哎,记一下吧,怕忘了,今天看,明天忘,明天再看,后天再忘,可能年纪轻轻就也该到了吃脑白金的年龄了 。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于