2023 0xGame Reverse WP

本人也是全部AK了,只能说还是挺适合新生的很好的题目


WEEK1:

1.数字筑基

        1.1 WEEK1的签到题IDA直接打开就有flag


2.代码金丹

        2.1 也是签到题比较输入,IDA打开就有flag


3.网络元婴

        3.1:  我们可以观察到这个scanf,IDA反编译出来只有一个参数,并没有结束输入的参数,这个其实就是一个可变参数的问题

        3.2:我们点击scanf这个函数按住快捷键y,在第一个参数后面输入 三个点就好了

        3.3其实就是让我们输入的数组和v6这个数组比较,没有任何加密我们只需要获取v6的值就ok了

        3.4:我们只需要在赋值完成后打个断点,再去提取出v6数组里面的值就好了

        3.5:由于v6是int类型的数组直接shift + e并不好提取,我们使用脚本提取数据

        3.6:获得flag


4.虚拟化神

        4.1:我们先观察正确的判断条件,这边也有可变参数按照上面的方法修改就好了,那v15和v10比较,如果相同输出正确信息

        4.2:所以我们直接找v10就好了,在上面的代码发现,v10给了v3,然后对v10进行赋值密文数据,再对v3解密其实也就是v10解密

      4.3:我们只需要等解密完dump出这个数据就好了,打断点运行程序到解密完后的代码处,在汇编层面打断点要不然可能断不住

        4.4:双击v10变量就可以看见flag啦


5.赛博天尊

        5.1:很明显考察Z3库的使用

        5.2:使用z3库跑出flag


WEEK2:

   1.符文解密师

        1.1:C++编写的程序,打开就有flag

2.编译逆旅者

        2.1:pyc文件

        2.2:python反编译 - 在线工具 (tool.lu),在线网站反编译出源代码

        2.3:hex值转为字符串得到flag

3.码海舵师

        3.1:就是一个普通的base64加密再比较

        3.2:工具解密一下下

4. 注册侦探

        4.1:先分析上面的代码,记录了密文结束地址也就是v4,以及将Src赋值给v3,思路就是查看那些代码对v3操作了

4.2:在这里对v3的每一个字节进行异或的0x33解密

4.3:我们只需要在对Src赋值完后dump出他的值异或0x33就可以获取flag了

4.4:解密得到flag

5.壳艺大师

        5.1:查壳发现UPX壳

        5.2:我这边使用脱壳机脱壳

        5.3:upx -d 加路径 左下角是一表示脱壳成功

        5.4:shift + f12 发现一个类似于key的字符串

        5.5:猜测是循环拿 key 和输入数据异或再比较

        5.6:验证一下,发现确实结果是 0xG开头的

        5.7:dump出密文数据 循环异或就可以了

WEEK3

     1.代码启示录

        1.1:jadx打开查看main函数发现flag

        


    2.旋转密码城

        2.1:jadx打开发现就是普通的偏移

        2.2:直接脚本爆破就得出flag

3.数字幽灵城

        3.1:通过base58.decode()解密这 R.string.encodedFlag,解密后和输入比较

        3.2:双击追踪过去发现是在字符串资源文件里面的数据

        3.3:使用apktool解包后,在res\ values \strings这个xml文件里面搜索encodedFlag

        3.4:Base58解密,由于不是标准码表就写脚本解密

4.变量迷城

        4.1:查看最下面的加密方法,其实就是加密数据和key异或,我们只需要获取这个key就可以,key是 javaClassVersion + systemVar的组合,看传参systemVar是0xGame javaClassVersion是上面传参过来的x,这个x貌似是一个方程里面的某个数,只需要求出这个x就可以

        4.2:我们知道flag前几个字符是0xGame{也知道密文数据,我们可以直接推出这个x,根据异或的特性,推出x是114514

        4.3:得出flag

5. 虚构核心

        5.1:这边就是对文件解密的一个操作

        5.2:和key异或解密得出一个文件这个文件是程序关键代码

        5.3:使用jadx打开这个程序,这个代码就是说flag应该是0xGame{开头 }结尾,然后提取中-符号分割的中间部分,开头的字符串和结尾的字符串是 f5bf50a3 和 f3eddaccb39f,然后检查1- 3的字符串长度是不是4,然后md5加密和预定义的md5比较

        5.4:因为知道字符串长度只有4完全可以爆破,md5在线解密破解,md5解密加密 (cmd5.com),爆破再组合一下就是flag

WEEK4:

     1. 二进制学徒

        1.1:pyc在线反编译就有flag

2.代码悟道者

       2.1:base64换表加密

        2.2:在线网站解密,在线自定义base64编解码、在线二进制转可打印字符、在线base2、base4、base8、base16、base32、base64--查错网 (chacuo.net)

3.指令神使

        3.1:输入flag加密后和密文数据比较

        3.2:sub_140001154函数分析,判断输入的前七个字节是0xGame 结尾是 }

        3.3:sub_140001118函数分析,对小写字母凯撒 相当于 (a1 - 84) % 26 + 97 

        3.4:exp

 4.算法祭祀

        4.1:C#编写的程序,32位的程序

        4.2:dnSpy打开程序,CBC模式的DES加密,调试发现key是520XGAME,iv是STV>!'+#

        4.3:exp


5.内存星旅者

     5.1:很明显我们的sub_140001510函数返回值要不是0,这个函数给v5赋值了

        5.2: sub_140001600函数分析,生成一个路径使用v5的值和加密数据异或解密然后生成一个文件,最后再删除文件

        5.3:分析v5的来源也就是sub_140001510函数,这里当v5的值为0x1CF410时程序会返回非0值,也就可以得到v5其实就是0x1CF410

        5.4:由于这个函数的返回值是0,所有我们要修改这个函数的返回值让流程进入解密函数的分支里面,并且将v5在内存里面的值修改为0x1CF410,然后再程序删除文件前查看文件得到flag

        1.先将rax寄存器的值改为1保证程序可以进入正确的流程

        2.修改v5的值为0x1CF410

3.在删除文件前打断点运行程序到这里

4. v14是生成的文件路径

5.查看这个路径里面的flag文件得到flag

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值