首页 > 其他分享 >BABYRE 【攻防世界】 Reverse

BABYRE 【攻防世界】 Reverse

时间:2024-03-23 15:46:44浏览次数:30  
标签:攻防 函数 v2 BABYRE add v3 judge input Reverse

题目


 

丢进Exeinfo PE里面,得到64bit,无壳

丢进IDA pro(x64)里面,找到主函数

 代码中有一个花指令:*(unsigned int (__fastcall **)(char *))judge)(input) 

  • unsigned int (__fastcall **)(char *):这是一个函数指针类型,指向一个接受char *类型参数并返回unsigned int类型的函数。__fastcall是一种调用约定,它指定了函数参数传递的方式。
  • (*):这表示函数指针的间接引用,即对函数指针judge进行解引用,获取其指向的函数。
  • (char *)judge:这是对函数指针judge的解引用,将其当作一个函数调用,并传递input作为参数。
  • 因此,(*(unsigned int (__fastcall **)(char *))judge)(input)的整体含义是:调用judge指向的函数,传递input作为参数,并期望该函数返回一个unsigned int类型的值

双击judge追踪看看,有的大佬说会双击跟踪不了报错,我的可以双击跟踪

一开始我还没发现有问题,以下内容参考大佬wp

选中public judge,按C,跳出“Directly convert to code?”-->Yes,变成了汇编

 把红色区域全部框选起来,按P,试图重新生成function——这里会出现一个红色错误endp ; sp-analysis failed

 打开IDA的Options--->General-->Disassembly,勾选“Stack pointer”,打开堆栈指针

 发现出现负值,说明我的IDA7.7存在指针错误

我看几个大佬的wp,他们都没有去解决这个指针问题,可能是不影响解题吧,所以我也没去管它

这里放上解决错误的资料:IDA出现"sp-analysis failed"和F5(反编译)失败-CSDN博客

 

视线回到主函数,在第8行,judge是一个数组,但是在第12行,judge是一个函数指针

从二进制机器码的角度看,可以理解成这个judge函数的每个字节都被异或了

用人话说,这个函数被加密了

解决方式也是参考大佬的wp——使用IDApython脚本解决:file-->script command

大佬的脚本如下:

1 add=0x600b00
2 for i in range(182):
3     PatchByte(add+i,Byte(add+i)^0xC)

但是,我运行会报错,我的IDA没有这个函数,导入了ida_bytes模块也没有用

放下我这边能运行的代码(记得左下角Scripting language选python):

1 import idaapi
2 
3 add = 0x600b00
4 for i in range(182):
5     idaapi.patch_byte(add + i, idaapi.get_byte(add + i) ^ 0xC)
  • idaapi.patch_byte函数用于修改指定地址的字节,它接受两个参数:地址和要写入的字节值。
  • idaapi.get_byte函数用于获取指定地址的字节值,它接受一个参数:地址,并返回该地址处的字节值

按一次就可以了,变成下面这样:

选中judge,按C(变成汇编),框选地址B00~BB5,也就是所有的红色区域,按P(重新生成function)

此时可以在左边找到judge函数内容

 点进去,F5反汇编

这个代码不难理解,写逆向脚本也不难,但是我这里又犯了一个错

我以为只需要拿v2去异或解题,v3虽然也在代码中,但是后面都没再提及了,我以及单纯就是干扰,或者是没有用的乱码数据

我只用v2运行解题脚本的时候,结果就是一个:flag

我看到这个老开心了,证明我的代码是没有错误的,思路大方向也是没有错误了,但是之后就没有找到其他的东西了

看来看去,还是v3最可疑,单独用v3运行解密脚本,是一堆没有价值可读性的东西

后面看了大佬的脚本,要把v2与v3加在一起

啊?这是为什么??代码里没有体现啊????然后我就去找了资料

双击v2,点进去看看栈

双击v3,也是看看栈

20~1C:5个,刚好对的上v2的长度

1B~13:9个,也刚好对的上v3的长度

有没有发现,v2和v3用的是一块连续的空间啊啊啊

修改后的脚本如下:

 1 s1 = "fmcd"
 2 s2=chr(0x7F)
 3 s3="k7d;V`;np"
 4 key=s1+s2+s3
 5 input_str = ""
 6 
 7 for i in range(len(key)):
 8     input_str += chr(ord(key[i]) ^ i)
 9 
10 print(input_str)

运行结果: flag{n1c3_j0b} 

标签:攻防,函数,v2,BABYRE,add,v3,judge,input,Reverse
From: https://www.cnblogs.com/demo41/p/18090525

相关文章

  • 文件上传一-WEB攻防-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过9
    演示案例:PHP-原生态-文件上传-前后端验证PHP-原生态-文件上传-类型文件头验证PHP-原生态-文件上传-后缀黑白名单验证PHP-原生态-文件上传-解析配置&二次渲染PHP-原生态-文件上传-逻辑缺陷&函数缺陷#学习前必读:1、课前一定要明白:无文件解析安全问题上,格式解析是一......
  • 攻防世界Ditf解题过程
    下载下来发现是一张照片,使用其他图片软件进行操作无果,放进虚拟机里面看一下输入binwalk-ee02c9de40be145dba6baa80ef1d270ba.png分离图片将分离出的文件复制到外面本机上,发现三个文件想打开这个压缩文件查看一下,结果发现需要密码,看来还是要查看一下图片,看是否能找到密......
  • 攻防世界乱刷
    攻防世界乱刷题目题目地址:[polyre](https://adworld.xctf.org.cn/challenges/list?rwNmOdr=1710932754481)总结:控制流平坦换的题需要将程序还原,增强程序的可读性,程序中存在永真(或永假)指令时可以利用idapython将条件跳转(jz,jnz)修改为直接跳转(jmp),进一步增强可读性。......
  • 31.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-其它消息的实现与使用优化
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!如果看不懂、不知道现在做的什么,那就跟着做完看效果内容参考于:易道云信息技术研究院VIP课上一个内容:30.数据搜索功能码云地址(master分支):https://gitee.com/dye_your_fingers/titan码云版本号:6cd3ae3d3bf803e1......
  • 攻防实战 | 记一次nacos到接管阿里云&百万数据泄露
    在某次攻防当中,通过打点发现了一台nacos,经过测试之后发现可以通过弱口令进入到后台,可以查看其中的配置信息通过翻看配置文件,发现腾讯云的AK,SK泄露,以及数据库的账号密码。操作不就来了么,直接上云!利用CF工具加上之前的AK,SK配置信息,创建腾讯云控制台账号密码,登录后直接上云......
  • 红队攻防之exe文件签名免杀
    达则兼善天下,穷则独善其身1、生成cobaltstrikebin文件,选择raw选项。2、使用cobaltstrike分离免杀工具生成loader.exe文件。3、使用UPX对生成的exe文件进行加壳,加壳前后对比文件的大小。4、对loader.exe进行制作并签发证书-数字签名。(1)、检查程序中是否存证书。......
  • 零基础自学网络安全 / 网络渗透攻防路线学习方法【建议收藏】
    学前感言:1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.......
  • 「AGC019B」 Reverse and Compare
    题意给定一个长度为\(n\)小写英文字母组成的字符串\(s\)。可以任意选定\(1\lex\ley\len\),把\(s_x\)到\(s_y\)之间的字符翻转。求最终不同字符串的方案数。分析我们先考虑所有字符都不同的情况。小学奥数的加法原理告诉我们,每一位都不同的字符串,对于第\(i\)位,可......
  • drf源码剖析----版本、reverse
    点击查看代码classAPIView(View):defdispatch(self,request,*args,**kwargs):self.args=argsself.kwargs=kwargsrequest=self.initialize_request(request,*args,**kwargs)self.request=requestself.headers......
  • 【Misc】【攻防世界】halo
    这是一个傻逼的解题记录初学自己摸索的菜鸟,欢迎大佬指正(磕头) 题目: 下载打开:一时间也没啥头绪,丢到CyberChef里面看看只有base64解码出非乱码字符串 igq4;441R;1ikR51ibOOp 解题经验太浅,一时也没有能把igg4与flag联系起来的方法卡题了,去找了wp看看原来是要进......