QWB-RE


强网杯RE-复现

easyre & game

0x0 前言

这次做出了 gamemaster和easyapk,在此就不写出来,就发自己需要复现的题目

本次easyre复现观看pz师傅视频复现

https://www.bilibili.com/video/BV1QY4y1w7DU?spm_id_from=333.851.header_right.history_list.click&vd_source=2fcdd1bcbcd68497824663b16df7d4ef

0x1 分析

1

拿到程序先用figer修复一下函数,可以发现fork和sys_ptrace

2

可以看见创建了一个子线程,直接把这个re3dump下来

3

17

启动子线程然后进行一个等待,等待子线程反馈后 保存了寄存器的值然后进行一个判断6

在re3里面可以看见这个操作 int3断点后 下面跟了一个值 可以发现就是我们需要判断的值,主线程就是在等待一个这个

7

4

观察如果进入第一个int3后的函数,里面又读取了子线程的值 然后和一个值进行了异或,相当于一个smc8

9

动调到异或的位置,可以发现异或的就是我们下面的地址

10

我们在异或后面下断,同时打印异或后正确的值,方便我们patch回去

11

12

这里的左值就是子线程需要smc的地址

xorKey = {8723: 2533025110152939745, 8739: 5590097037203163468, 8755: 17414346542877855401, 8771: 17520503086133755340, 8787: 12492599841064285544, 8803: 12384833368350302160, 8819: 11956541642520230699, 8835: 12628929057681570616, 8851: 910654967627959011, 8867: 5684234031469876551, 8883: 6000358478182005051, 8899: 3341586462889168127, 8915: 11094889238442167020, 8931: 17237527861538956365, 8947: 17178915143649401084, 8963: 11176844209899222046, 8979: 18079493192679046363, 8995: 7090159446630928781, 9011: 863094436381699168, 9027: 6906972144372600884, 9043: 16780793948225765908, 9059: 7086655467811962655, 9075: 13977154540038163446, 9091: 7066662532691991888, 9107: 15157921356638311270, 9123: 12585839823593393444, 9139: 1360651393631625694, 9155: 2139328426318955142, 9171: 2478274715212481947, 9187: 12876028885252459748, 9203: 18132176846268847269, 9219: 17242441603067001509, 9235: 8492111998925944081, 9251: 14679986489201789069, 9267: 13188777131396593592, 9283: 5298970373130621883, 9299: 525902164359904478, 9315: 2117701741234018776, 9331: 9158760851580517972}

addr = 0x2213

while True:
    data = get_qword(addr)
    key = xorKey[addr]
    dec = data ^ key
    idc.patch_qword(addr, dec)
    addr += 16

直接在re3修复回去

13

然后在末尾可以发现还有一个int3,这个就是进行第二个函数,第二个函数进去其实就是把smc给还原回去

14

修复后可以发现是一个数织游戏

16

找到规则值,发现不对

15

发现在init中有一个复制的操作,会通过地址换算影响到50A0的规则值,然后把真正的值放到在线网站进行解密即可

https://handsomeone.github.io/Nonogram/

GAME

0x0 前言 工具

https://github.com/nelenkov/android-backup-extractor

工具

https://blog.csdn.net/bakelFF/article/details/123049992

配置MVN 用来压包工具

MVN报错无法JAVAhome 就是环境变量去掉bin

报错不能运行,有可能像我一样有两个java环境 java和javac版本不同

把需要的版本的环境变量位置提高就ok了

java -jar abe.jar unpack ba.ab ba.tar

0x1 分析java层

5

6

可以看到有AES加密和base64,还有一个地方检测root

0x2 so层分析

2

进去通过索引 可以发现很多字符串都是被加密了,我们索引找到异或回去发现这个字符串不就是java层中的函数名嘛

0x3 解密字符串

3

直接通过ce搜索字符串找到内存所在位置dump出来

分析so时可以发现一些字符串的作用,在内存中都可以看见

4

通过key再寻找到IV

0x4 确定算法正确

8

我输入的用户名是lanlan抓包获取

7

然后进行加密

9

解密回去

10

可以发现字符串每6位中间的字符串交换位置

1

安装app抓包获得其中的加好友位置可以发现一个admin的账号

11

获取admin账号的account和name

0x5 解密

12

13

进行解密

0x6 Getflag

import requests
url ="http://47.93.244.181/re/GetFlag.php"
res = requests.post(url, data={"code":"123125", "account":"&Od987$2sPa?>l<k^j", "username":"admin"})
print(res.text)

0x7 总结

GAME复现学习,只能说CE 直接不用动调so取正确的key和iv。看了其他师傅文章里面还有一些反调试,vpn检测 frida检测,其他师傅使用hook方法过掉,root检测真机直接用面具就过了。总结来说CE直接查内存是最骚的操作。原本还想复现一下强网其他题目并且发文章,现在可能就复现看一下就不发文章了。学习逆向做CTF也快接近一年了,有比赛打有空再发文章,在这里感谢各位师傅的观看。

芜湖,结尾感谢一下Nepnep战队的Qfrost师傅和ThTsOd师傅教了我很多!!

Nepnep万岁!!!

如果有师傅想学习逆向,战队内部有Q神 T神讲解题目哦,欢迎加入。


文章作者: Blue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Blue !
评论
  目录