几道攻防世界安卓逆向题要点总结 (1)

龙云靳的剥壳站 纵有疾风起,人生不言弃 本文由博客端 http://114.116.238.43 主动推送

备忘一下,逆向做不出来了,这两天耍了几道安卓逆向。

不知不觉攻防世界等级都刷到高手了,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

1.PNG

基础 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)

哎,记一下吧,怕忘了,今天看,明天忘,明天再看,后天再忘,可能年纪轻轻就也该到了吃脑白金的年龄了doge doge doge

  • CTF
    9 引用 • 13 回帖 • 1 关注

广告 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...